[jboss-cvs] JBossAS SVN: r79039 - branches/JBoss_4_0_3_SP1_CP/jaxrpc/src/main/org/jboss/axis.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Oct 2 12:38:09 EDT 2008


Author: darran.lofthouse at jboss.com
Date: 2008-10-02 12:38:09 -0400 (Thu, 02 Oct 2008)
New Revision: 79039

Modified:
   branches/JBoss_4_0_3_SP1_CP/jaxrpc/src/main/org/jboss/axis/AxisProperties.java
Log:
[ASPATCH-391] Web Service JAX-RPC Service Initialisation Not ThreadSafe.

Modified: branches/JBoss_4_0_3_SP1_CP/jaxrpc/src/main/org/jboss/axis/AxisProperties.java
===================================================================
--- branches/JBoss_4_0_3_SP1_CP/jaxrpc/src/main/org/jboss/axis/AxisProperties.java	2008-10-02 16:21:27 UTC (rev 79038)
+++ branches/JBoss_4_0_3_SP1_CP/jaxrpc/src/main/org/jboss/axis/AxisProperties.java	2008-10-02 16:38:09 UTC (rev 79039)
@@ -69,6 +69,8 @@
 {
    private static Logger log = Logger.getLogger(AxisProperties.class.getName());
 
+   // A lock to control static initialisation of altNameDiscoverer
+   private static final Object lock = new Object();
    private static DiscoverNamesInAlternateManagedProperties altNameDiscoverer;
    private static DiscoverMappedNames mappedNames;
    private static NameDiscoverers nameDiscoverer;
@@ -94,11 +96,21 @@
    {
       if (nameDiscoverer == null)
       {
-         nameDiscoverer = new NameDiscoverers();
-         nameDiscoverer.addResourceNameDiscover(getAlternatePropertyNameDiscoverer());
-         nameDiscoverer.addResourceNameDiscover(new DiscoverNamesInManagedProperties());
-         nameDiscoverer.addResourceNameDiscover(new DiscoverServiceNames(getClassLoaders()));
-         nameDiscoverer.addResourceNameDiscover(getMappedNames());
+         synchronized (lock)
+         {
+            // Double check, we may have been waiting to obtain the lock while another thread was initialising.
+            if (nameDiscoverer == null)
+            {
+               NameDiscoverers nameDiscoverer = new NameDiscoverers();
+               nameDiscoverer.addResourceNameDiscover(getAlternatePropertyNameDiscoverer());
+               nameDiscoverer.addResourceNameDiscover(new DiscoverNamesInManagedProperties());
+               nameDiscoverer.addResourceNameDiscover(new DiscoverServiceNames(getClassLoaders()));
+               nameDiscoverer.addResourceNameDiscover(getMappedNames());
+
+               // Only make available once fully initialised.
+               AxisProperties.nameDiscoverer = nameDiscoverer;
+            }
+         }
       }
       return nameDiscoverer;
    }




More information about the jboss-cvs-commits mailing list