[hibernate-commits] Hibernate SVN: r20207 - in search/trunk/hibernate-search/src: main/java/org/hibernate/search/jmx and 2 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Fri Aug 20 09:31:16 EDT 2010


Author: hardy.ferentschik
Date: 2010-08-20 09:31:16 -0400 (Fri, 20 Aug 2010)
New Revision: 20207

Modified:
   search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/ImmutableSearchFactory.java
   search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryBuilder.java
   search/trunk/hibernate-search/src/main/java/org/hibernate/search/jmx/IndexingProgressMonitor.java
   search/trunk/hibernate-search/src/main/java/org/hibernate/search/jmx/JMXRegistrar.java
   search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/SearchTestCase.java
   search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/configuration/mutablefactory/MutableFactoryTest.java
Log:
HSEARCH-278 This the SearchFactory is mutable we have to be a more devensive when registring an MBean and check first whether a bean is registered.

Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/ImmutableSearchFactory.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/ImmutableSearchFactory.java	2010-08-20 11:01:35 UTC (rev 20206)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/ImmutableSearchFactory.java	2010-08-20 13:31:16 UTC (rev 20207)
@@ -133,6 +133,10 @@
 		}
 
 		if ( isJMXEnabled() ) {
+			// since the SearchFactory is mutable we might have an already existing MBean which we have to unregister first
+			if(JMXRegistrar.isNameRegistered(  StatisticsInfoMBean.STATISTICS_MBEAN_OBJECT_NAME)) {
+				JMXRegistrar.unRegisterMBean( StatisticsInfoMBean.STATISTICS_MBEAN_OBJECT_NAME );
+			}
 			JMXRegistrar.registerMBean(
 					new StatisticsInfo( statistics ), StatisticsInfoMBean.STATISTICS_MBEAN_OBJECT_NAME
 			);

Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryBuilder.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryBuilder.java	2010-08-20 11:01:35 UTC (rev 20206)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryBuilder.java	2010-08-20 13:31:16 UTC (rev 20207)
@@ -156,21 +156,31 @@
 
 		String enableJMX = configurationProperties.getProperty( Environment.JMX_ENABLED );
 		if ( "true".equalsIgnoreCase( enableJMX ) ) {
-			enableIndexCrtlBean( searchFactoryImplementor );
+			enableIndexControlBean( searchFactoryImplementor );
 		}
 		return searchFactoryImplementor;
 	}
 
-	private void enableIndexCrtlBean(SearchFactoryImplementor searchFactoryImplementor) {
+	private void enableIndexControlBean(SearchFactoryImplementor searchFactoryImplementor) {
 		if ( !searchFactoryImplementor.isJMXEnabled() ) {
 			return;
 		}
 
-		// if we have a JNDI bound SessionFactory we can also enable the index control bean
-		if ( StringHelper.isNotEmpty( configurationProperties.getProperty( "hibernate.session_factory_name" ) ) ) {
-			IndexControl indexCtrlBean = new IndexControl( configurationProperties );
-			JMXRegistrar.registerMBean( indexCtrlBean, IndexControl.INDEX_CTRL_MBEAN_OBJECT_NAME );
+		// if we don't have a JNDI bound SessionFactory we cannot enable the index control bean
+		if ( StringHelper.isEmpty( configurationProperties.getProperty( "hibernate.session_factory_name" ) ) ) {
+			log.debug(
+					"In order to bind the IndexControlMBean the Hibernate SessionFactory has to be available via JNDI"
+			);
+			return;
 		}
+
+		// since the SearchFactory is mutable we might have an already existing MBean which we have to unregister first
+		if ( JMXRegistrar.isNameRegistered( IndexControl.INDEX_CTRL_MBEAN_OBJECT_NAME ) ) {
+			JMXRegistrar.unRegisterMBean( IndexControl.INDEX_CTRL_MBEAN_OBJECT_NAME );
+		}
+
+		IndexControl indexCtrlBean = new IndexControl( configurationProperties );
+		JMXRegistrar.registerMBean( indexCtrlBean, IndexControl.INDEX_CTRL_MBEAN_OBJECT_NAME );
 	}
 
 	private SearchFactoryImplementor buildIncrementalSearchFactory() {

Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/jmx/IndexingProgressMonitor.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/jmx/IndexingProgressMonitor.java	2010-08-20 11:01:35 UTC (rev 20206)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/jmx/IndexingProgressMonitor.java	2010-08-20 13:31:16 UTC (rev 20207)
@@ -24,7 +24,6 @@
 package org.hibernate.search.jmx;
 
 import java.util.concurrent.atomic.AtomicLong;
-import javax.management.ObjectName;
 
 import org.slf4j.Logger;
 
@@ -44,7 +43,7 @@
 	private final AtomicLong totalCounter = new AtomicLong();
 	private final AtomicLong entitiesLoadedCounter = new AtomicLong();
 
-	private final ObjectName registeredName;
+	private final String registeredName;
 
 	public IndexingProgressMonitor() {
 		String name = IndexingProgressMonitorMBean.INDEXING_PROGRESS_MONITOR_MBEAN_OBJECT_NAME;
@@ -54,36 +53,36 @@
 		registeredName = JMXRegistrar.registerMBean( this, name );
 	}
 
-	public void documentsAdded(long increment) {
+	public final void documentsAdded(long increment) {
 		documentsDoneCounter.addAndGet( increment );
 	}
 
-	public void documentsBuilt(int number) {
+	public final void documentsBuilt(int number) {
 		documentsBuiltCounter.addAndGet( number );
 	}
 
-	public void entitiesLoaded(int size) {
+	public final void entitiesLoaded(int size) {
 		entitiesLoadedCounter.addAndGet( size );
 	}
 
-	public void addToTotalCount(long count) {
+	public final void addToTotalCount(long count) {
 		totalCounter.addAndGet( count );
 	}
 
-	public void indexingCompleted() {
+	public final void indexingCompleted() {
 		log.info( "Indexing completed. Reindexed {} entities. Unregistering MBean from server", totalCounter.get() );
 		JMXRegistrar.unRegisterMBean( registeredName );
 	}
 
-	public long getLoadedEntitiesCount() {
+	public final long getLoadedEntitiesCount() {
 		return entitiesLoadedCounter.get();
 	}
 
-	public long getDocumentsAddedCount() {
+	public final long getDocumentsAddedCount() {
 		return documentsDoneCounter.get();
 	}
 
-	public long getNumberOfEntitiesToIndex() {
+	public final long getNumberOfEntitiesToIndex() {
 		return totalCounter.get();
 	}
 }

Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/jmx/JMXRegistrar.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/jmx/JMXRegistrar.java	2010-08-20 11:01:35 UTC (rev 20206)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/jmx/JMXRegistrar.java	2010-08-20 13:31:16 UTC (rev 20207)
@@ -52,7 +52,7 @@
 	 *
 	 * @return The registered object name
 	 */
-	public static ObjectName registerMBean(Object object, String name) {
+	public static String registerMBean(Object object, String name) {
 		ObjectName objectName = createObjectName( name );
 		MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
 		try {
@@ -61,24 +61,25 @@
 		catch ( Exception e ) {
 			throw new SearchException( "Unable to enable MBean for Hibernate Search", e );
 		}
-		return objectName;
+		return objectName.toString();
 	}
 
 	/**
 	 * Unregister the MBean with the specified name.
 	 *
-	 * @param name The object name of the bean to unregister. The {@code name} cannot be {@code null}
+	 * @param name The name of the bean to unregister. The {@code name} cannot be {@code null}
 	 *
 	 * @throws IllegalArgumentException In case the object name is {@code null}
 	 */
-	public static void unRegisterMBean(ObjectName name) {
+	public static void unRegisterMBean(String name) {
 		if ( name == null ) {
 			throw new IllegalArgumentException( "The object name cannot be null" );
 		}
+		ObjectName objectName = createObjectName( name );
 		MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
-		if ( mbs.isRegistered( name ) ) {
+		if ( mbs.isRegistered( objectName ) ) {
 			try {
-				mbs.unregisterMBean( name );
+				mbs.unregisterMBean( objectName );
 			}
 			catch ( Exception e ) {
 				log.warn( "Unable to un-register existing MBean: " + name, e );

Modified: search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/SearchTestCase.java
===================================================================
--- search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/SearchTestCase.java	2010-08-20 11:01:35 UTC (rev 20206)
+++ search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/SearchTestCase.java	2010-08-20 13:31:16 UTC (rev 20207)
@@ -258,7 +258,7 @@
 	 *
 	 * @return the target directory of the build
 	 */
-	public File getTargetDir() {
+	public static File getTargetDir() {
 		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
 		// get a URL reference to something we now is part of the classpath (us)
 		URL myUrl = contextClassLoader.getResource( SearchTestCase.class.getName().replace( '.', '/' ) + ".class" );

Modified: search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/configuration/mutablefactory/MutableFactoryTest.java
===================================================================
--- search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/configuration/mutablefactory/MutableFactoryTest.java	2010-08-20 11:01:35 UTC (rev 20206)
+++ search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/configuration/mutablefactory/MutableFactoryTest.java	2010-08-20 13:31:16 UTC (rev 20207)
@@ -1,3 +1,26 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ *  Copyright (c) 2010, Red Hat, Inc. and/or its affiliates or third-party contributors as
+ *  indicated by the @author tags or express copyright attribution
+ *  statements applied by the authors.  All third-party contributions are
+ *  distributed under license by Red Hat, Inc.
+ *
+ *  This copyrighted material is made available to anyone wishing to use, modify,
+ *  copy, or redistribute it subject to the terms and conditions of the GNU
+ *  Lesser General Public License, as published by the Free Software Foundation.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ *  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this distribution; if not, write to:
+ *  Free Software Foundation, Inc.
+ *  51 Franklin Street, Fifth Floor
+ *  Boston, MA  02110-1301  USA
+ */
 package org.hibernate.search.test.configuration.mutablefactory;
 
 import java.io.File;



More information about the hibernate-commits mailing list