You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2018/05/16 11:07:18 UTC
svn commit: r1831700 -
/tomcat/trunk/java/org/apache/tomcat/util/modeler/Registry.java
Author: markt
Date: Wed May 16 11:07:18 2018
New Revision: 1831700
URL: http://svn.apache.org/viewvc?rev=1831700&view=rev
Log:
Fix a SpotBugs warning (inconsistent sync)
Make setting of server thread-safe
Fix potential NPEs
Modified:
tomcat/trunk/java/org/apache/tomcat/util/modeler/Registry.java
Modified: tomcat/trunk/java/org/apache/tomcat/util/modeler/Registry.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/modeler/Registry.java?rev=1831700&r1=1831699&r2=1831700&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/modeler/Registry.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/modeler/Registry.java Wed May 16 11:07:18 2018
@@ -91,7 +91,8 @@ public class Registry implements Registr
* The <code>MBeanServer</code> instance that we will use to register
* management beans.
*/
- private MBeanServer server = null;
+ private volatile MBeanServer server = null;
+ private final Object serverLock = new Object();
/**
* The set of ManagedBean instances for the beans this registry
@@ -367,7 +368,7 @@ public class Registry implements Registr
String type=null;
MBeanInfo info=null;
try {
- info=server.getMBeanInfo(oname);
+ info = getMBeanServer().getMBeanInfo(oname);
} catch (Exception e) {
log.info( "Can't find metadata for object" + oname );
return null;
@@ -394,7 +395,7 @@ public class Registry implements Registr
{
MBeanInfo info=null;
try {
- info=server.getMBeanInfo(oname);
+ info = getMBeanServer().getMBeanInfo(oname);
} catch (Exception e) {
log.info( "Can't find metadata " + oname );
return null;
@@ -429,18 +430,22 @@ public class Registry implements Registr
* <code>MBeanServer</code> instance.
* @return the MBean server
*/
- public synchronized MBeanServer getMBeanServer() {
+ public MBeanServer getMBeanServer() {
if (server == null) {
- long t1 = System.currentTimeMillis();
- if (MBeanServerFactory.findMBeanServer(null).size() > 0) {
- server = MBeanServerFactory.findMBeanServer(null).get(0);
- if (log.isDebugEnabled()) {
- log.debug("Using existing MBeanServer " + (System.currentTimeMillis() - t1));
- }
- } else {
- server = ManagementFactory.getPlatformMBeanServer();
- if (log.isDebugEnabled()) {
- log.debug("Creating MBeanServer" + (System.currentTimeMillis() - t1));
+ synchronized (serverLock) {
+ if (server == null) {
+ long t1 = System.currentTimeMillis();
+ if (MBeanServerFactory.findMBeanServer(null).size() > 0) {
+ server = MBeanServerFactory.findMBeanServer(null).get(0);
+ if (log.isDebugEnabled()) {
+ log.debug("Using existing MBeanServer " + (System.currentTimeMillis() - t1));
+ }
+ } else {
+ server = ManagementFactory.getPlatformMBeanServer();
+ if (log.isDebugEnabled()) {
+ log.debug("Creating MBeanServer" + (System.currentTimeMillis() - t1));
+ }
+ }
}
}
}
@@ -719,10 +724,10 @@ public class Registry implements Registr
// -------------------- Registration --------------------
@Override
- public ObjectName preRegister(MBeanServer server,
- ObjectName name) throws Exception
- {
- this.server=server;
+ public ObjectName preRegister(MBeanServer server, ObjectName name) throws Exception {
+ synchronized (serverLock) {
+ this.server = server;
+ }
return name;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org