[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