admin@glassfish.java.net

CODE REVIEW: J2EEDomainMdl

From: Lloyd L Chambers <Lloyd.Chambers_at_Sun.COM>
Date: Tue, 27 Mar 2007 15:32:52 -0700

Please review no later than noon on Thursday 3/30.

J2EEDomainMdl used a static variable that appeared to be modified.
This was not thread safe and was also the source of a FindBugs
complaint.

Fixed by observing that the value doesn't actually change; a runtime
check verifies this in postRegister().

Lloyd


RCS file: /cvs/glassfish/admin/mbeans/src/java/com/sun/enterprise/
management/model/J2EEDomainMdl.java,v
retrieving revision 1.5
diff -w -u -r1.5 J2EEDomainMdl.java
--- admin/mbeans/src/java/com/sun/enterprise/management/model/
J2EEDomainMdl.java 9 Nov 2006 22:16:25 -0000 1.5
+++ admin/mbeans/src/java/com/sun/enterprise/management/model/
J2EEDomainMdl.java 27 Mar 2007 17:46:54 -0000
@@ -32,26 +32,33 @@
public class J2EEDomainMdl extends J2EEEventProviderMOMdl implements
NotificationListener {
- public static String DOMAINNAME;
- private static ObjectName jmImpl;
- private boolean debug = false;
+ public static final String DOMAINNAME;
+ private static final ObjectName jmImpl;
+ private final boolean debug = false;

      static {
+ String domainNameTemp = null;
+ ObjectName jmImplTemp = null;
+
          try {
              //DOMAINNAME =
com.sun.enterprise.server.ApplicationServer.getServerContext
().getDefaultDomainName();
              //DOMAINNAME = java.net.InetAddress.getLocalHost
().getHostName();DOMAINNAME = "com.sun.appserv";
              // By default lets set it to com.sun.appserv
- DOMAINNAME =
com.sun.enterprise.management.util.J2EEModuleUtil.getDomainName();
- jmImpl = JMXUtil.newObjectName
("JMImplementation:type=MBeanServerDelegate");
+ domainNameTemp =
com.sun.enterprise.management.util.J2EEModuleUtil.getDomainName();
+ jmImplTemp = JMXUtil.newObjectName
("JMImplementation:type=MBeanServerDelegate");
          } catch (Exception e) {
- DOMAINNAME = "com.sun.appserv";
- jmImpl = null;
+ domainNameTemp = "com.sun.appserv";
+ jmImplTemp = null;
+ }
+ finally {
+ DOMAINNAME = domainNameTemp;
+ jmImpl = jmImplTemp;
          }
      }
- private static String MANAGED_OBJECT_TYPE = "J2EEDomain";
+ private static final String MANAGED_OBJECT_TYPE = "J2EEDomain";
- private String [] eventTypes = new String []
{"j2ee.object.created","j2ee.object.deleted"};
+ private final String [] eventTypes = new String []
{"j2ee.object.created","j2ee.object.deleted"};
      public J2EEDomainMdl() {
          super(DOMAINNAME, false, false);
@@ -65,7 +72,11 @@
      }
      public J2EEDomainMdl(String domainname) {
          super(domainname == null ? DOMAINNAME : domainname, false,
false);
- DOMAINNAME = domainname;
+ if ( ! domainname.equals( DOMAINNAME ) )
+ {
+ throw new IllegalArgumentException();
+ }
+
          /*
          try {
@@ -101,7 +112,10 @@
         postRegister( Boolean registrationDone ) {
          if ( registrationDone.booleanValue() ) {
- DOMAINNAME = getObjectName().getDomain();
+ if ( ! getObjectName().getDomain().equals( DOMAINNAME ) )
+ {
+ throw new IllegalArgumentException();
+ }

              if ( REBROADCAST ) {
                  try {