You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by sc...@apache.org on 2008/12/15 19:40:48 UTC

svn commit: r726763 - /incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/JmxMBeanAgent.java

Author: schor
Date: Mon Dec 15 10:40:47 2008
New Revision: 726763

URL: http://svn.apache.org/viewvc?rev=726763&view=rev
Log:
[UIMA-1247] add synch for mbean registration

Modified:
    incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/JmxMBeanAgent.java

Modified: incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/JmxMBeanAgent.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/JmxMBeanAgent.java?rev=726763&r1=726762&r2=726763&view=diff
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/JmxMBeanAgent.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/JmxMBeanAgent.java Mon Dec 15 10:40:47 2008
@@ -57,7 +57,7 @@
         return;
       }
     }
-
+    
     try {
       // Now register the MBean. But, check for name collisions first. It is possible
       // that we are trying to register the same MBean twice (this happens for pools of AEs that
@@ -65,9 +65,12 @@
       // MBean the first time and just skip the registration each subsequent time.
       Object mbeanName = objectNameConstructor.newInstance(new Object[] { aMBean
               .getUniqueMBeanName() });
-      if (!(((Boolean) isRegistered.invoke(aMBeanServer, new Object[] { mbeanName }))
-              .booleanValue())) {
-        registerMBean.invoke(aMBeanServer, new Object[] { aMBean, mbeanName });
+      // synchronize to prevent multiple threads from initializing same thing UIMA-1247
+      synchronized (aMBeanServer) {
+        if (!(((Boolean) isRegistered.invoke(aMBeanServer, new Object[] { mbeanName }))
+                .booleanValue())) {
+          registerMBean.invoke(aMBeanServer, new Object[] { aMBean, mbeanName });
+        }
       }
     } catch (Exception e) {
       // don't fail catastrophically if we can't register with JMX. Just log a warning and continue.