[jboss-cvs] JBossAS SVN: r77515 - trunk/ejb3/src/main/org/jboss/ejb3/client.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Aug 26 23:15:59 EDT 2008


Author: ALRubinger
Date: 2008-08-26 23:15:59 -0400 (Tue, 26 Aug 2008)
New Revision: 77515

Modified:
   trunk/ejb3/src/main/org/jboss/ejb3/client/ClientContainer.java
Log:
[JBCTS-843] Preserve proper PostConstruct invocation order in client handler

Modified: trunk/ejb3/src/main/org/jboss/ejb3/client/ClientContainer.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/client/ClientContainer.java	2008-08-27 01:52:34 UTC (rev 77514)
+++ trunk/ejb3/src/main/org/jboss/ejb3/client/ClientContainer.java	2008-08-27 03:15:59 UTC (rev 77515)
@@ -37,6 +37,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
+import java.util.Stack;
 
 import javax.naming.Context;
 import javax.naming.LinkRef;
@@ -376,8 +377,10 @@
    private void processPostConstructs()
       throws ClassNotFoundException, SecurityException, NoSuchMethodException
    {
-      // First build a set of the callbacks by class
-      HashMap<Class<?>, Method> pcByClass = new HashMap<Class<?>, Method>();
+      // First build a set of the callbacks by class      
+      List<Class<?>> pcClasses = new ArrayList<Class<?>>();
+      Stack<Method> pcs = new Stack<Method>();
+      
       LifecycleCallbacksMetaData callbacks = xml.getPostConstructs();
       if(callbacks != null)
       {
@@ -392,11 +395,25 @@
                lifecycleClass = Thread.currentThread().getContextClassLoader().loadClass(className);
             Class<?> parameterTypes[] = new Class[0];
             Method method = lifecycleClass.getDeclaredMethod(methodName, parameterTypes);
-            pcByClass.put(lifecycleClass, method);
+            
+            // If we haven't yet added the callback for this class
+            if (!pcClasses.contains(lifecycleClass))
+            {
+               // Add it
+               pcs.push(method);
+            }
+            
+            // Mark that we've added callbacks for this class
+            pcClasses.add(lifecycleClass);
          }
       }
-      // Use the unique callback methods
-      postConstructs.addAll(pcByClass.values());
+      
+      // Add each post construct method, preserving proper order
+      while(pcs.size()>0)
+      {
+         postConstructs.add(pcs.pop());
+      }
+      
    }
 
    /* (non-Javadoc)




More information about the jboss-cvs-commits mailing list