You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by sp...@apache.org on 2006/09/12 20:15:29 UTC

svn commit: r442665 [4/4] - in /geronimo/server/branches/sachin: ./ applications/magicGball/magicGball-ear/src/main/plan/ assemblies/geronimo-boilerplate-minimal/ configs/axis-deployer/src/plan/ configs/client-deployer/src/plan/ configs/client/ configs...

Modified: geronimo/server/branches/sachin/modules/geronimo-security/src/main/java/org/apache/geronimo/security/jaas/server/JaasLoginService.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/sachin/modules/geronimo-security/src/main/java/org/apache/geronimo/security/jaas/server/JaasLoginService.java?view=diff&rev=442665&r1=442664&r2=442665
==============================================================================
--- geronimo/server/branches/sachin/modules/geronimo-security/src/main/java/org/apache/geronimo/security/jaas/server/JaasLoginService.java (original)
+++ geronimo/server/branches/sachin/modules/geronimo-security/src/main/java/org/apache/geronimo/security/jaas/server/JaasLoginService.java Tue Sep 12 11:15:24 2006
@@ -14,10 +14,9 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
+
 package org.apache.geronimo.security.jaas.server;
 
-import EDU.oswego.cs.dl.util.concurrent.ClockDaemon;
-import EDU.oswego.cs.dl.util.concurrent.ThreadFactory;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.geronimo.common.GeronimoSecurityException;
@@ -34,6 +33,7 @@
 import javax.crypto.Mac;
 import javax.crypto.SecretKey;
 import javax.crypto.spec.SecretKeySpec;
+
 import javax.security.auth.Subject;
 import javax.security.auth.callback.Callback;
 import javax.security.auth.login.LoginException;
@@ -41,6 +41,7 @@
 import java.security.InvalidKeyException;
 import java.security.NoSuchAlgorithmException;
 import java.security.Principal;
+
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Hashtable;
@@ -49,7 +50,8 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-
+import java.util.Timer;
+import java.util.TimerTask;
 
 /**
  * The single point of contact for Geronimo JAAS realms.  Instead of attempting
@@ -63,10 +65,9 @@
     public static final Log log = LogFactory.getLog(JaasLoginService.class);
     private final static int DEFAULT_EXPIRED_LOGIN_SCAN_INTERVAL = 300000; // 5 mins
     private final static int DEFAULT_MAX_LOGIN_DURATION = 1000 * 3600 * 24; // 1 day
-    private final static ClockDaemon clockDaemon;
+    private final static Timer clockDaemon = new Timer(/* Name requires JDK 1.5 "LoginService login modules monitor", */ true);
     private static long nextLoginModuleId = System.currentTimeMillis();
     private Collection realms;
-    private Object expiredLoginScanIdentifier;
     private final String objectName;
     private final SecretKey key;
     private final String algorithm;
@@ -74,7 +75,7 @@
     private final Map activeLogins = new Hashtable();
     private int expiredLoginScanIntervalMillis = DEFAULT_EXPIRED_LOGIN_SCAN_INTERVAL;
     private int maxLoginDurationMillis = DEFAULT_MAX_LOGIN_DURATION;
-
+    private ExpirationMonitor expirationMonitor;
 
     public JaasLoginService(String algorithm, String password, ClassLoader classLoader, String objectName) {
         this.classLoader = classLoader;
@@ -137,11 +138,18 @@
     }
 
     public void doStart() throws Exception {
-        expiredLoginScanIdentifier = clockDaemon.executePeriodically(expiredLoginScanIntervalMillis, new ExpirationMonitor(), true);
+        expirationMonitor = new ExpirationMonitor();
+
+        clockDaemon.scheduleAtFixedRate(
+                expirationMonitor, expiredLoginScanIntervalMillis, expiredLoginScanIntervalMillis);
     }
 
     public void doStop() throws Exception {
-        ClockDaemon.cancel(expiredLoginScanIdentifier);
+        if (expirationMonitor != null) {
+            expirationMonitor.cancel();
+            expirationMonitor = null;
+        }
+
         //todo: shut down all logins
     }
 
@@ -389,20 +397,7 @@
         return null;
     }
 
-
-    // This stuff takes care of whacking old logins
-    static {
-        clockDaemon = new ClockDaemon();
-        clockDaemon.setThreadFactory(new ThreadFactory() {
-            public Thread newThread(Runnable r) {
-                Thread t = new Thread(r, "LoginService login modules monitor");
-                t.setDaemon(true);
-                return t;
-            }
-        });
-    }
-
-    private class ExpirationMonitor implements Runnable { //todo: different timeouts per realm?
+    private class ExpirationMonitor extends TimerTask { //todo: different timeouts per realm?
 
         public void run() {
             long now = System.currentTimeMillis();

Modified: geronimo/server/branches/sachin/modules/geronimo-service-builder/src/main/java/org/apache/geronimo/deployment/xmlbeans/XmlBeansUtil.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/sachin/modules/geronimo-service-builder/src/main/java/org/apache/geronimo/deployment/xmlbeans/XmlBeansUtil.java?view=diff&rev=442665&r1=442664&r2=442665
==============================================================================
--- geronimo/server/branches/sachin/modules/geronimo-service-builder/src/main/java/org/apache/geronimo/deployment/xmlbeans/XmlBeansUtil.java (original)
+++ geronimo/server/branches/sachin/modules/geronimo-service-builder/src/main/java/org/apache/geronimo/deployment/xmlbeans/XmlBeansUtil.java Tue Sep 12 11:15:24 2006
@@ -154,8 +154,10 @@
 
     public static void unregisterSubstitutionGroupElements(QName substitutionGroup, QNameSet substitutions) {
         QNameSet oldSubstitutions = (QNameSet) substitutionGroups.get(substitutionGroup);
-        QNameSet difference = oldSubstitutions.intersect(substitutions.inverse());
-        substitutionGroups.put(substitutionGroup, difference);
+        if (oldSubstitutions != null && substitutions != null) {
+            QNameSet difference = oldSubstitutions.intersect(substitutions.inverse());
+            substitutionGroups.put(substitutionGroup, difference);
+        }
     }
 
     public static QNameSet getQNameSetForSubstitutionGroup(QName substitutionGroup) {

Modified: geronimo/server/branches/sachin/modules/geronimo-system/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/branches/sachin/modules/geronimo-system/pom.xml?view=diff&rev=442665&r1=442664&r2=442665
==============================================================================
--- geronimo/server/branches/sachin/modules/geronimo-system/pom.xml (original)
+++ geronimo/server/branches/sachin/modules/geronimo-system/pom.xml Tue Sep 12 11:15:24 2006
@@ -52,8 +52,8 @@
         </dependency>
         
         <dependency>
-            <groupId>concurrent</groupId>
-            <artifactId>concurrent</artifactId>
+            <groupId>backport-util-concurrent</groupId>
+            <artifactId>backport-util-concurrent</artifactId>
         </dependency>
         
         <!--

Modified: geronimo/server/branches/sachin/modules/geronimo-system/src/main/java/org/apache/geronimo/system/rmi/RMIClassLoaderSpiImpl.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/sachin/modules/geronimo-system/src/main/java/org/apache/geronimo/system/rmi/RMIClassLoaderSpiImpl.java?view=diff&rev=442665&r1=442664&r2=442665
==============================================================================
--- geronimo/server/branches/sachin/modules/geronimo-system/src/main/java/org/apache/geronimo/system/rmi/RMIClassLoaderSpiImpl.java (original)
+++ geronimo/server/branches/sachin/modules/geronimo-system/src/main/java/org/apache/geronimo/system/rmi/RMIClassLoaderSpiImpl.java Tue Sep 12 11:15:24 2006
@@ -26,7 +26,8 @@
 
 import java.rmi.server.RMIClassLoader;
 import java.rmi.server.RMIClassLoaderSpi;
-import EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap;
+
+import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
 
 /**
  * An implementation of {@link RMIClassLoaderSpi} which provides normilzation
@@ -40,7 +41,7 @@
     private RMIClassLoaderSpi delegate = RMIClassLoader.getDefaultProviderInstance();
 
     //TODO: Not sure of the best initial size.  Starting with 100 which should be reasonable.
-    private ConcurrentReaderHashMap cachedCodebases = new ConcurrentReaderHashMap(100, 0.75F);
+    private ConcurrentHashMap cachedCodebases = new ConcurrentHashMap(100, 0.75F);
 
 
     public Class loadClass(String codebase, String name, ClassLoader defaultLoader)

Modified: geronimo/server/branches/sachin/modules/geronimo-timer/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/branches/sachin/modules/geronimo-timer/pom.xml?view=diff&rev=442665&r1=442664&r2=442665
==============================================================================
--- geronimo/server/branches/sachin/modules/geronimo-timer/pom.xml (original)
+++ geronimo/server/branches/sachin/modules/geronimo-timer/pom.xml Tue Sep 12 11:15:24 2006
@@ -38,7 +38,10 @@
                
                https://issues.apache.org/jira/browse/GERONIMO-2183
         -->
+        <!-- 
+        TEMP: Testing concurrent changes...
         <maven.test.skip>true</maven.test.skip>
+        -->
     </properties>
     
     <dependencies>
@@ -87,10 +90,10 @@
             <groupId>org.apache.derby</groupId>
             <artifactId>derby</artifactId>
         </dependency>
-
+        
         <dependency>
-            <groupId>concurrent</groupId>
-            <artifactId>concurrent</artifactId>
+            <groupId>backport-util-concurrent</groupId>
+            <artifactId>backport-util-concurrent</artifactId>
         </dependency>
         
     </dependencies>

Modified: geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/ExecutorFeedingTimerTask.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/ExecutorFeedingTimerTask.java?view=diff&rev=442665&r1=442664&r2=442665
==============================================================================
--- geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/ExecutorFeedingTimerTask.java (original)
+++ geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/ExecutorFeedingTimerTask.java Tue Sep 12 11:15:24 2006
@@ -47,11 +47,7 @@
     }
 
     public void run() {
-        try {
-            threadPooledTimer.getExecutor().execute(workInfo.getExecutorTask());
-        } catch (InterruptedException e) {
-            log.warn("Exception running task", e);
-        }
+        threadPooledTimer.getExecutor().execute(workInfo.getExecutorTask());
     }
 
     public boolean cancel() {

Modified: geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/ThreadPooledTimer.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/ThreadPooledTimer.java?view=diff&rev=442665&r1=442664&r2=442665
==============================================================================
--- geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/ThreadPooledTimer.java (original)
+++ geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/ThreadPooledTimer.java Tue Sep 12 11:15:24 2006
@@ -33,7 +33,8 @@
 import javax.transaction.Transaction;
 import javax.transaction.TransactionManager;
 
-import EDU.oswego.cs.dl.util.concurrent.Executor;
+import edu.emory.mathcs.backport.java.util.concurrent.Executor;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.geronimo.gbean.GBeanLifecycle;

Modified: geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/jdbc/JDBCStoreThreadPooledNonTransactionalTimer.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/jdbc/JDBCStoreThreadPooledNonTransactionalTimer.java?view=diff&rev=442665&r1=442664&r2=442665
==============================================================================
--- geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/jdbc/JDBCStoreThreadPooledNonTransactionalTimer.java (original)
+++ geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/jdbc/JDBCStoreThreadPooledNonTransactionalTimer.java Tue Sep 12 11:15:24 2006
@@ -21,7 +21,8 @@
 import javax.sql.DataSource;
 import javax.transaction.TransactionManager;
 
-import EDU.oswego.cs.dl.util.concurrent.Executor;
+import edu.emory.mathcs.backport.java.util.concurrent.Executor;
+
 import org.apache.geronimo.connector.outbound.ConnectionFactorySource;
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;

Modified: geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/jdbc/JDBCStoreThreadPooledTransactionalTimer.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/jdbc/JDBCStoreThreadPooledTransactionalTimer.java?view=diff&rev=442665&r1=442664&r2=442665
==============================================================================
--- geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/jdbc/JDBCStoreThreadPooledTransactionalTimer.java (original)
+++ geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/jdbc/JDBCStoreThreadPooledTransactionalTimer.java Tue Sep 12 11:15:24 2006
@@ -21,7 +21,8 @@
 import javax.sql.DataSource;
 import javax.transaction.TransactionManager;
 
-import EDU.oswego.cs.dl.util.concurrent.Executor;
+import edu.emory.mathcs.backport.java.util.concurrent.Executor;
+
 import org.apache.geronimo.connector.outbound.ConnectionFactorySource;
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;

Modified: geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/vm/VMStoreThreadPooledNonTransactionalTimer.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/vm/VMStoreThreadPooledNonTransactionalTimer.java?view=diff&rev=442665&r1=442664&r2=442665
==============================================================================
--- geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/vm/VMStoreThreadPooledNonTransactionalTimer.java (original)
+++ geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/vm/VMStoreThreadPooledNonTransactionalTimer.java Tue Sep 12 11:15:24 2006
@@ -19,7 +19,8 @@
 
 import javax.transaction.TransactionManager;
 
-import EDU.oswego.cs.dl.util.concurrent.Executor;
+import edu.emory.mathcs.backport.java.util.concurrent.Executor;
+
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;

Modified: geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/vm/VMStoreThreadPooledTransactionalTimer.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/vm/VMStoreThreadPooledTransactionalTimer.java?view=diff&rev=442665&r1=442664&r2=442665
==============================================================================
--- geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/vm/VMStoreThreadPooledTransactionalTimer.java (original)
+++ geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/vm/VMStoreThreadPooledTransactionalTimer.java Tue Sep 12 11:15:24 2006
@@ -19,7 +19,8 @@
 
 import javax.transaction.TransactionManager;
 
-import EDU.oswego.cs.dl.util.concurrent.Executor;
+import edu.emory.mathcs.backport.java.util.concurrent.Executor;
+
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;

Modified: geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/vm/VMWorkerPersistence.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/vm/VMWorkerPersistence.java?view=diff&rev=442665&r1=442664&r2=442665
==============================================================================
--- geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/vm/VMWorkerPersistence.java (original)
+++ geronimo/server/branches/sachin/modules/geronimo-timer/src/main/java/org/apache/geronimo/timer/vm/VMWorkerPersistence.java Tue Sep 12 11:15:24 2006
@@ -24,7 +24,8 @@
 import java.util.Collection;
 import java.util.ArrayList;
 
-import EDU.oswego.cs.dl.util.concurrent.SynchronizedLong;
+import edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicLong;
+
 import org.apache.geronimo.timer.PersistenceException;
 import org.apache.geronimo.timer.Playback;
 import org.apache.geronimo.timer.WorkInfo;
@@ -40,10 +41,10 @@
 
     private final Map tasks = Collections.synchronizedMap(new LinkedHashMap());
 
-    private final SynchronizedLong counter = new SynchronizedLong(0);
+    private final AtomicLong counter = new AtomicLong(0);
 
     public void save(WorkInfo workInfo) throws PersistenceException {
-        long id = counter.increment();
+        long id = counter.incrementAndGet();
         workInfo.setId(id);
         tasks.put(new Long(id), workInfo);
     }

Modified: geronimo/server/branches/sachin/modules/geronimo-timer/src/test/java/org/apache/geronimo/timer/AbstractThreadPooledTimerTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/sachin/modules/geronimo-timer/src/test/java/org/apache/geronimo/timer/AbstractThreadPooledTimerTest.java?view=diff&rev=442665&r1=442664&r2=442665
==============================================================================
--- geronimo/server/branches/sachin/modules/geronimo-timer/src/test/java/org/apache/geronimo/timer/AbstractThreadPooledTimerTest.java (original)
+++ geronimo/server/branches/sachin/modules/geronimo-timer/src/test/java/org/apache/geronimo/timer/AbstractThreadPooledTimerTest.java Tue Sep 12 11:15:24 2006
@@ -19,8 +19,10 @@
 
 import javax.transaction.TransactionManager;
 
-import EDU.oswego.cs.dl.util.concurrent.SynchronizedInt;
+import edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicInteger;
+
 import junit.framework.TestCase;
+
 import org.apache.geronimo.pool.ThreadPool;
 import org.apache.geronimo.timer.vm.VMWorkerPersistence;
 
@@ -41,7 +43,7 @@
     private ThreadPool threadPool;
     private ThreadPooledTimer timer;
 
-    private SynchronizedInt counter = new SynchronizedInt(0);
+    private AtomicInteger counter = new AtomicInteger(0);
     protected TransactionManager transactionManager;
     protected ExecutorTaskFactory executableWorkFactory;
     protected UserTaskFactory userTaskFactory;
@@ -177,7 +179,7 @@
         public Runnable newTask(long id) {
             return new Runnable() {
                 public void run() {
-                    counter.increment();
+                    counter.incrementAndGet();
                 }
 
             };

Modified: geronimo/server/branches/sachin/modules/geronimo-tomcat-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/sachin/modules/geronimo-tomcat-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java?view=diff&rev=442665&r1=442664&r2=442665
==============================================================================
--- geronimo/server/branches/sachin/modules/geronimo-tomcat-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java (original)
+++ geronimo/server/branches/sachin/modules/geronimo-tomcat-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java Tue Sep 12 11:15:24 2006
@@ -54,10 +54,12 @@
 import org.apache.geronimo.j2ee.deployment.ModuleBuilder;
 import org.apache.geronimo.j2ee.deployment.WebModule;
 import org.apache.geronimo.j2ee.deployment.WebServiceBuilder;
+import org.apache.geronimo.j2ee.deployment.NamingBuilder;
 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
 import org.apache.geronimo.kernel.Kernel;
 import org.apache.geronimo.kernel.Naming;
 import org.apache.geronimo.kernel.config.ConfigurationData;
+import org.apache.geronimo.kernel.config.Configuration;
 import org.apache.geronimo.kernel.repository.Environment;
 import org.apache.geronimo.naming.deployment.ENCConfigBuilder;
 import org.apache.geronimo.naming.deployment.GBeanResourceEnvironmentBuilder;
@@ -74,11 +76,9 @@
 import org.apache.geronimo.web.deployment.AbstractWebModuleBuilder;
 import org.apache.geronimo.web.deployment.GenericToSpecificPlanConverter;
 import org.apache.geronimo.webservices.WebServiceContainer;
-import org.apache.geronimo.xbeans.geronimo.naming.GerMessageDestinationType;
 import org.apache.geronimo.xbeans.geronimo.web.tomcat.TomcatWebAppDocument;
 import org.apache.geronimo.xbeans.geronimo.web.tomcat.TomcatWebAppType;
 import org.apache.geronimo.xbeans.geronimo.web.tomcat.config.GerTomcatDocument;
-import org.apache.geronimo.xbeans.j2ee.MessageDestinationType;
 import org.apache.geronimo.xbeans.j2ee.ServletType;
 import org.apache.geronimo.xbeans.j2ee.WebAppDocument;
 import org.apache.geronimo.xbeans.j2ee.WebAppType;
@@ -104,8 +104,8 @@
             AbstractNameQuery tomcatContainerName,
             Collection webServiceBuilder,
             Collection securityBuilders,
-            Collection serviceBuilders, Kernel kernel) {
-        super(kernel, securityBuilders, serviceBuilders);
+            Collection serviceBuilders, NamingBuilder namingBuilders, Kernel kernel) {
+        super(kernel, securityBuilders, serviceBuilders, namingBuilders);
         this.defaultEnvironment = defaultEnvironment;
 
         this.tomcatContainerName = tomcatContainerName;
@@ -146,7 +146,7 @@
             // Output the target path in the error to make it clearer to the user which webapp
             // has the problem.  The targetPath is used, as moduleFile may have an unhelpful
             // value such as C:\geronimo-1.1\var\temp\geronimo-deploymentUtil22826.tmpdir
-            throw new DeploymentException("Error parsing web.xml for "+targetPath, xmle);
+            throw new DeploymentException("Error parsing web.xml for " + targetPath, xmle);
         }
         check(webApp);
 
@@ -165,9 +165,12 @@
 
         EnvironmentType environmentType = tomcatWebApp.getEnvironment();
         Environment environment = EnvironmentBuilder.buildEnvironment(environmentType, defaultEnvironment);
+
+        getNamingBuilders().buildEnvironment(webApp, tomcatWebApp, environment);
+
         // Note: logic elsewhere depends on the default artifact ID being the file name less extension (ConfigIDExtractor)
         String warName = new File(moduleFile.getName()).getName();
-        if(warName.lastIndexOf('.') > -1) {
+        if (warName.lastIndexOf('.') > -1) {
             warName = warName.substring(0, warName.lastIndexOf('.'));
         }
         idBuilder.resolve(environment, warName, "war");
@@ -213,7 +216,7 @@
                             try {
                                 rawPlan = XmlBeansUtil.parse(path, getClass().getClassLoader());
                             } catch (FileNotFoundException e1) {
-                                log.warn("Web application "+ targetPath + " does not contain a WEB-INF/geronimo-web.xml deployment plan.  This may or may not be a problem, depending on whether you have things like resource references that need to be resolved.  You can also give the deployer a separate deployment plan file on the command line.");
+                                log.warn("Web application " + targetPath + " does not contain a WEB-INF/geronimo-web.xml deployment plan.  This may or may not be a problem, depending on whether you have things like resource references that need to be resolved.  You can also give the deployer a separate deployment plan file on the command line.");
                             }
                         }
                     }
@@ -234,7 +237,7 @@
             }
             return tomcatWebApp;
         } catch (XmlException e) {
-            throw new DeploymentException("xml problem for web app "+targetPath, e);
+            throw new DeploymentException("xml problem for web app " + targetPath, e);
         }
     }
 
@@ -247,12 +250,13 @@
 
     public void initContext(EARContext earContext, Module module, ClassLoader cl) throws DeploymentException {
         WebAppType webApp = (WebAppType) module.getSpecDD();
-        MessageDestinationType[] messageDestinations = webApp.getMessageDestinationArray();
+//        MessageDestinationType[] messageDestinations = webApp.getMessageDestinationArray();
         TomcatWebAppType gerWebApp = (TomcatWebAppType) module.getVendorDD();
-        GerMessageDestinationType[] gerMessageDestinations = gerWebApp.getMessageDestinationArray();
+//        GerMessageDestinationType[] gerMessageDestinations = gerWebApp.getMessageDestinationArray();
 
-        ENCConfigBuilder.registerMessageDestinations(earContext.getRefContext(), module.getName(), messageDestinations, gerMessageDestinations);
-        if((webApp.getSecurityConstraintArray().length > 0 || webApp.getSecurityRoleArray().length > 0) &&
+//        ENCConfigBuilder.registerMessageDestinations(earContext, module.getName(), messageDestinations, gerMessageDestinations);
+        getNamingBuilders().initContext(webApp, gerWebApp, module.getEarContext().getConfiguration(), earContext.getConfiguration(), module);
+        if ((webApp.getSecurityConstraintArray().length > 0 || webApp.getSecurityRoleArray().length > 0) &&
                 !gerWebApp.isSetSecurityRealmName()) {
             throw new DeploymentException("web.xml for web app " + module.getName() + " includes security elements but Geronimo deployment plan is not provided or does not contain <security-realm-name> element necessary to configure security accordingly.");
         }
@@ -272,7 +276,6 @@
 //        GbeanType[] gbeans = tomcatWebApp.getGbeanArray();
 //        ServiceConfigBuilder.addGBeans(gbeans, moduleClassLoader, moduleName, moduleContext);
 
-
         //this may add to the web classpath with enhanced classes.
         //N.B. we use the ear context which has all the gbeans we could possibly be looking up from this ear.
         Map compContext = buildComponentContext(earContext, webModule, webApp, tomcatWebApp, moduleClassLoader);
@@ -302,8 +305,8 @@
             //N.B. use earContext not moduleContext
             ENCConfigBuilder.setResourceEnvironment(rebuilder, webApp.getResourceRefArray(), tomcatWebApp.getResourceRefArray());
 
-            webModuleData.setReferencePattern("TransactionManager", earContext.getTransactionManagerObjectName());
-            webModuleData.setReferencePattern("TrackedConnectionAssociator", earContext.getConnectionTrackerObjectName());
+            webModuleData.setReferencePattern("TransactionManager", earContext.getTransactionManagerName());
+            webModuleData.setReferencePattern("TrackedConnectionAssociator", earContext.getConnectionTrackerName());
 
             if (tomcatWebApp.isSetWebContainer()) {
                 AbstractNameQuery webContainerName = ENCConfigBuilder.getGBeanQuery(NameFactory.GERONIMO_SERVICE, tomcatWebApp.getWebContainer());
@@ -335,7 +338,7 @@
 
             if (tomcatWebApp.isSetCluster()) {
                 String cluster = tomcatWebApp.getCluster().trim();
-                AbstractName clusterName =earContext.getNaming().createChildName(moduleName, cluster, CatalinaClusterGBean.J2EE_TYPE);
+                AbstractName clusterName = earContext.getNaming().createChildName(moduleName, cluster, CatalinaClusterGBean.J2EE_TYPE);
                 webModuleData.setReferencePattern("Cluster", clusterName);
             }
 
@@ -365,7 +368,7 @@
                         String servletClassName = servletType.getServletClass().getStringValue().trim();
                         Object portInfo = portMap.get(servletName);
                         if (portInfo == null) {
-                            throw new DeploymentException("No web service deployment info for servlet name " + servletName +" in web app "+module.getName());
+                            throw new DeploymentException("No web service deployment info for servlet name " + servletName + " in web app " + module.getName());
                         }
 
                         WebServiceContainer wsContainer = configurePOJO(webModule.getModuleFile(), portInfo, servletClassName, moduleClassLoader);
@@ -381,7 +384,7 @@
 
             if (tomcatWebApp.isSetSecurityRealmName()) {
                 if (earContext.getSecurityConfiguration() == null) {
-                     throw new DeploymentException("You have specified a <security-realm-name> for the webapp " + moduleName + " but no <security> configuration (role mapping) is supplied in the Geronimo plan for the web application (or the Geronimo plan for the EAR if the web app is in an EAR)");
+                    throw new DeploymentException("You have specified a <security-realm-name> for the webapp " + moduleName + " but no <security> configuration (role mapping) is supplied in the Geronimo plan for the web application (or the Geronimo plan for the EAR if the web app is in an EAR)");
                 }
 
                 SecurityHolder securityHolder = new SecurityHolder();
@@ -405,7 +408,7 @@
                 }
                 securityHolder.setChecked(checkedPermissions);
                 earContext.addSecurityContext(policyContextID, componentPermissions);
-                DefaultPrincipal defaultPrincipal = ((SecurityConfiguration)earContext.getSecurityConfiguration()).getDefaultPrincipal();
+                DefaultPrincipal defaultPrincipal = ((SecurityConfiguration) earContext.getSecurityConfiguration()).getDefaultPrincipal();
                 securityHolder.setDefaultPrincipal(defaultPrincipal);
                 if (defaultPrincipal != null) {
                     securityHolder.setSecurity(true);
@@ -423,7 +426,7 @@
         } catch (DeploymentException de) {
             throw de;
         } catch (Exception e) {
-            throw new DeploymentException("Unable to initialize GBean for web app "+module.getName(), e);
+            throw new DeploymentException("Unable to initialize GBean for web app " + module.getName(), e);
         }
     }
 
@@ -443,20 +446,12 @@
 
 
     private Map buildComponentContext(EARContext earContext, Module webModule, WebAppType webApp, TomcatWebAppType tomcatWebApp, ClassLoader cl) throws DeploymentException {
-        return ENCConfigBuilder.buildComponentContext(earContext,
-                earContext.getConfiguration(),
-                webModule,
-                null,
-                webApp.getEnvEntryArray(),
-                webApp.getEjbRefArray(), tomcatWebApp.getEjbRefArray(),
-                webApp.getEjbLocalRefArray(), tomcatWebApp.getEjbLocalRefArray(),
-                webApp.getResourceRefArray(), tomcatWebApp.getResourceRefArray(),
-                webApp.getResourceEnvRefArray(), tomcatWebApp.getResourceEnvRefArray(),
-                webApp.getMessageDestinationRefArray(),
-                webApp.getServiceRefArray(), tomcatWebApp.getServiceRefArray(),
-                tomcatWebApp.getGbeanRefArray(),
-                cl);
+        Map componentContext = new HashMap();
+        Configuration earConfiguration = earContext.getConfiguration();
+        getNamingBuilders().buildNaming(webApp, tomcatWebApp, earConfiguration, earConfiguration, webModule, componentContext);
+        return componentContext;
     }
+
     public static final GBeanInfo GBEAN_INFO;
 
     static {
@@ -466,16 +461,18 @@
         infoBuilder.addReference("WebServiceBuilder", WebServiceBuilder.class, NameFactory.MODULE_BUILDER);
         infoBuilder.addReference("SecurityBuilders", NamespaceDrivenBuilder.class, NameFactory.MODULE_BUILDER);
         infoBuilder.addReference("ServiceBuilders", NamespaceDrivenBuilder.class, NameFactory.MODULE_BUILDER);
+        infoBuilder.addReference("NamingBuilders", NamingBuilder.class, NameFactory.MODULE_BUILDER);
         infoBuilder.addAttribute("kernel", Kernel.class, false);
         infoBuilder.addInterface(ModuleBuilder.class);
 
         infoBuilder.setConstructor(new String[]{
-            "defaultEnvironment",
-            "tomcatContainerName",
-            "WebServiceBuilder",
-            "SecurityBuilders",
-            "ServiceBuilders",
-            "kernel"});
+                "defaultEnvironment",
+                "tomcatContainerName",
+                "WebServiceBuilder",
+                "SecurityBuilders",
+                "ServiceBuilders",
+                "NamingBuilders",
+                "kernel"});
         GBEAN_INFO = infoBuilder.getBeanInfo();
     }
 

Modified: geronimo/server/branches/sachin/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/deployment/PlanParsingTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/sachin/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/deployment/PlanParsingTest.java?view=diff&rev=442665&r1=442664&r2=442665
==============================================================================
--- geronimo/server/branches/sachin/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/deployment/PlanParsingTest.java (original)
+++ geronimo/server/branches/sachin/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/deployment/PlanParsingTest.java Tue Sep 12 11:15:24 2006
@@ -8,11 +8,11 @@
 import org.apache.geronimo.deployment.xbeans.ArtifactType;
 import org.apache.geronimo.deployment.xbeans.EnvironmentType;
 import org.apache.geronimo.deployment.xmlbeans.XmlBeansUtil;
-import org.apache.geronimo.deployment.service.ServiceConfigBuilder;
 import org.apache.geronimo.deployment.service.GBeanBuilder;
 import org.apache.geronimo.gbean.AbstractName;
 import org.apache.geronimo.gbean.AbstractNameQuery;
 import org.apache.geronimo.j2ee.deployment.WebServiceBuilder;
+import org.apache.geronimo.j2ee.deployment.NamingBuilderCollection;
 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
 import org.apache.geronimo.kernel.Jsr77Naming;
 import org.apache.geronimo.kernel.Naming;
@@ -38,7 +38,7 @@
     private TomcatModuleBuilder builder;
 
     protected void setUp() throws Exception {
-        builder = new TomcatModuleBuilder(defaultEnvironment, tomcatContainerObjectName, Collections.singleton(webServiceBuilder), Collections.singleton(new GeronimoSecurityBuilderImpl()), Collections.singleton(new GBeanBuilder(null, null)), null);
+        builder = new TomcatModuleBuilder(defaultEnvironment, tomcatContainerObjectName, Collections.singleton(webServiceBuilder), Collections.singleton(new GeronimoSecurityBuilderImpl()), Collections.singleton(new GBeanBuilder(null, null)), new NamingBuilderCollection(null, null), null);
     }
 
     public void testResourceRef() throws Exception {

Modified: geronimo/server/branches/sachin/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilderTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/sachin/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilderTest.java?view=diff&rev=442665&r1=442664&r2=442665
==============================================================================
--- geronimo/server/branches/sachin/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilderTest.java (original)
+++ geronimo/server/branches/sachin/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilderTest.java Tue Sep 12 11:15:24 2006
@@ -19,7 +19,6 @@
 import java.io.File;
 import java.io.IOException;
 import java.net.MalformedURLException;
-import java.net.URI;
 import java.net.URL;
 import java.security.PermissionCollection;
 import java.security.Permissions;
@@ -27,20 +26,14 @@
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import javax.management.ObjectName;
-import javax.naming.Reference;
-import javax.xml.namespace.QName;
-
 import org.apache.geronimo.testsupport.TestSupport;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.geronimo.common.DeploymentException;
 import org.apache.geronimo.connector.outbound.connectiontracking.ConnectionTrackingCoordinatorGBean;
-import org.apache.geronimo.deployment.DeploymentContext;
 import org.apache.geronimo.deployment.ModuleIDBuilder;
 import org.apache.geronimo.deployment.service.GBeanBuilder;
 import org.apache.geronimo.deployment.util.UnpackedJarFile;
@@ -50,13 +43,10 @@
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
 import org.apache.geronimo.j2ee.deployment.EARContext;
-import org.apache.geronimo.j2ee.deployment.EJBReferenceBuilder;
 import org.apache.geronimo.j2ee.deployment.Module;
-import org.apache.geronimo.j2ee.deployment.RefContext;
-import org.apache.geronimo.j2ee.deployment.ResourceReferenceBuilder;
-import org.apache.geronimo.j2ee.deployment.ServiceReferenceBuilder;
 import org.apache.geronimo.j2ee.deployment.UnavailableWebServiceBuilder;
 import org.apache.geronimo.j2ee.deployment.WebServiceBuilder;
+import org.apache.geronimo.j2ee.deployment.NamingBuilderCollection;
 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
 import org.apache.geronimo.j2ee.management.impl.J2EEServerImpl;
 import org.apache.geronimo.kernel.Jsr77Naming;
@@ -166,6 +156,7 @@
         earContext.addGBean(jaccBeanData);
         earContext.setJaccManagerName(jaccBeanName);
         module.setEarContext(earContext);
+        module.setRootEarContext(earContext);
         builder.initContext(earContext, module, cl);
         builder.addGBeans(earContext, module, cl, null);
         ConfigurationData configurationData = earContext.getConfigurationData();
@@ -202,59 +193,8 @@
                 new AbstractNameQuery(ctcName),
                 null,
                 null,
-                null,
-                new RefContext(new EJBReferenceBuilder() {
-
-
-                    public Reference createCORBAReference(Configuration configuration, AbstractNameQuery containerNameQuery, URI nsCorbaloc, String objectName, String home) {
-                        return null;
-                    }
-
-                    public Reference createEJBRemoteRef(String refName, Configuration configuration, String name, String requiredModule, String optionalModule, Artifact targetConfigId, AbstractNameQuery query, boolean isSession, String home, String remote) {
-                        return null;
-                    }
-
-                    public Reference createEJBLocalRef(String refName, Configuration configuration, String name, String requiredModule, String optionalModule, Artifact targetConfigId, AbstractNameQuery query, boolean isSession, String localHome, String local) {
-                        return null;
-                    }
-
-                },
-                        new ResourceReferenceBuilder() {
-
-                            public Reference createResourceRef(AbstractNameQuery containerId, Class iface, Configuration configuration) {
-                                return null;
-                            }
-
-                            public Reference createAdminObjectRef(AbstractNameQuery containerId, Class iface, Configuration configuration) {
-                                return null;
-                            }
-
-                            public ObjectName locateResourceName(ObjectName query) {
-                                return null;
-                            }
-
-                            public GBeanData locateActivationSpecInfo(AbstractNameQuery nameQuery, String messageListenerInterface, Configuration configuration) {
-                                return null;
-                            }
-
-                            public GBeanData locateResourceAdapterGBeanData(GBeanData resourceAdapterModuleData) {
-                                return null;
-                            }
-
-                            public GBeanData locateAdminObjectInfo(GBeanData resourceAdapterModuleData, String adminObjectInterfaceName) {
-                                return null;
-                            }
-
-                            public GBeanData locateConnectionFactoryInfo(GBeanData resourceAdapterModuleData, String connectionFactoryInterfaceName) {
-                                return null;
-                            }
-                        },
-                        new ServiceReferenceBuilder() {
-                            //it could return a Service or a Reference, we don't care
-                            public Object createService(Class serviceInterface, URI wsdlURI, URI jaxrpcMappingURI, QName serviceQName, Map portComponentRefMap, List handlerInfos, Object serviceRefType, DeploymentContext deploymentContext, Module module, ClassLoader classLoader) {
-                                return null;
-                            }
-                        }));
+                null
+        );
     }
 
     private void recursiveDelete(File path) {
@@ -376,7 +316,7 @@
 
         defaultEnvironment.addDependency(baseId, ImportType.ALL);
         defaultEnvironment.setConfigId(webModuleArtifact);
-        builder = new TomcatModuleBuilder(defaultEnvironment, new AbstractNameQuery(containerName), Collections.singleton(webServiceBuilder), Collections.singleton(new GeronimoSecurityBuilderImpl()), Collections.singleton(new GBeanBuilder(null, null)), null);
+        builder = new TomcatModuleBuilder(defaultEnvironment, new AbstractNameQuery(containerName), Collections.singleton(webServiceBuilder), Collections.singleton(new GeronimoSecurityBuilderImpl()), Collections.singleton(new GBeanBuilder(null, null)), new NamingBuilderCollection(null, null), null);
     }
 
     protected void tearDown() throws Exception {

Modified: geronimo/server/branches/sachin/modules/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionImpl.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/sachin/modules/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionImpl.java?view=diff&rev=442665&r1=442664&r2=442665
==============================================================================
--- geronimo/server/branches/sachin/modules/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionImpl.java (original)
+++ geronimo/server/branches/sachin/modules/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionImpl.java Tue Sep 12 11:15:24 2006
@@ -18,12 +18,14 @@
 package org.apache.geronimo.transaction.manager;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.IdentityHashMap;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+
 import javax.transaction.HeuristicMixedException;
 import javax.transaction.HeuristicRollbackException;
 import javax.transaction.RollbackException;
@@ -34,6 +36,7 @@
 import javax.transaction.xa.XAException;
 import javax.transaction.xa.XAResource;
 import javax.transaction.xa.Xid;
+import javax.ejb.EJBException;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -57,6 +60,10 @@
     private int status = Status.STATUS_NO_TRANSACTION;
     private Object logMark;
 
+    private final Map resources = new HashMap();
+    private Synchronization interposedSynchronization;
+    private final Map entityManagers = new HashMap();
+
     TransactionImpl(XidFactory xidFactory, TransactionLog txnLog, long transactionTimeoutMilliseconds) throws SystemException {
         this(xidFactory.createXid(), xidFactory, txnLog, transactionTimeoutMilliseconds);
     }
@@ -87,11 +94,38 @@
         this.timeout = Long.MAX_VALUE;
     }
 
-    public synchronized int getStatus() throws SystemException {
+    public synchronized int getStatus() {
         return status;
     }
 
-    public synchronized void setRollbackOnly() throws IllegalStateException, SystemException {
+    public Object getResource(Object key) {
+        return resources.get(key);
+    }
+
+    public boolean getRollbackOnly() {
+        return status == Status.STATUS_MARKED_ROLLBACK;
+    }
+
+    public Object getTransactionKey() {
+        return xid;
+    }
+
+    public int getTransactionStatus() {
+        return status;
+    }
+
+    public void putResource(Object key, Object value) {
+        if (key == null) {
+            throw new NullPointerException("You must supply a non-null key for putResource");
+        }
+        resources.put(key, value);
+    }
+
+    public void registerInterposedSynchronization(Synchronization synchronization) {
+        interposedSynchronization = synchronization;
+    }
+
+    public synchronized void setRollbackOnly() throws IllegalStateException {
         switch (status) {
             case Status.STATUS_ACTIVE:
             case Status.STATUS_PREPARING:
@@ -171,7 +205,7 @@
             //we know nothing about this XAResource or resource manager
             Xid branchId = xidFactory.createBranch(xid, resourceManagers.size() + 1);
             xaRes.start(branchId, XAResource.TMNOFLAGS);
-            activeXaResources.put(xaRes, addBranchXid(xaRes,  branchId));
+            activeXaResources.put(xaRes, addBranchXid(xaRes, branchId));
             return true;
         } catch (XAException e) {
             log.warn("Unable to enlist XAResource " + xaRes + ", errorCode: " + e.errorCode, e);
@@ -222,23 +256,19 @@
         beforePrepare();
 
         try {
-                      boolean timedout = false;
-                      if (TransactionTimer.getCurrentTime() > timeout)
-                      {
-                          status = Status.STATUS_MARKED_ROLLBACK;
-                          timedout = true;
-                      }
+            boolean timedout = false;
+            if (TransactionTimer.getCurrentTime() > timeout) {
+                status = Status.STATUS_MARKED_ROLLBACK;
+                timedout = true;
+            }
 
             if (status == Status.STATUS_MARKED_ROLLBACK) {
                 rollbackResources(resourceManagers);
-                              if(timedout)
-                              {
-                                  throw new RollbackException("Transaction timout");
-                              }
-                              else
-                              {
-                                  throw new RollbackException("Unable to commit: transaction marked for rollback");
-                              }
+                if (timedout) {
+                    throw new RollbackException("Transaction timout");
+                } else {
+                    throw new RollbackException("Unable to commit: transaction marked for rollback");
+                }
             }
             synchronized (this) {
                 if (status == Status.STATUS_ACTIVE) {
@@ -256,7 +286,6 @@
                 // resourceManagers is now immutable
             }
 
-
             // no-phase
             if (resourceManagers.size() == 0) {
                 synchronized (this) {
@@ -400,7 +429,6 @@
             }
         }
 
-
         // decision time...
         boolean willCommit;
         synchronized (this) {
@@ -471,9 +499,17 @@
             Synchronization synch;
             synchronized (this) {
                 if (i == syncList.size()) {
+                    if (interposedSynchronization != null) {
+                        synch = interposedSynchronization;
+                        i++;
+                    } else {
+                        return;
+                    }
+                } else if (i == syncList.size() + 1) {
                     return;
+                } else {
+                    synch = (Synchronization) syncList.get(i++);
                 }
-                synch = (Synchronization) syncList.get(i++);
             }
             try {
                 synch.beforeCompletion();
@@ -488,6 +524,13 @@
 
     private void afterCompletion() {
         // this does not synchronize because nothing can modify our state at this time
+        if (interposedSynchronization != null) {
+            try {
+                interposedSynchronization.afterCompletion(status);
+            } catch (Exception e) {
+                log.warn("Unexpected exception from afterCompletion; continuing", e);
+            }
+        }
         for (Iterator i = syncList.iterator(); i.hasNext();) {
             Synchronization synch = (Synchronization) i.next();
             try {
@@ -497,6 +540,10 @@
                 continue;
             }
         }
+        for (Iterator i = entityManagers.values().iterator(); i.hasNext();) {
+            Closeable entityManager = (Closeable) i.next();
+            entityManager.close();
+        }
     }
 
     private void endResources() {
@@ -579,7 +626,7 @@
                 txnLog.commit(xid, logMark);
             } catch (LogException e) {
                 log.error("Unexpected exception logging commit completion for xid " + xid, e);
-                throw (SystemException)new SystemException("Unexpected error logging commit completion for xid " + xid).initCause(e);
+                throw (SystemException) new SystemException("Unexpected error logging commit completion for xid " + xid).initCause(e);
             }
         }
         synchronized (this) {
@@ -634,6 +681,17 @@
         return manager;
     }
 
+    public Object getEntityManager(String persistenceUnit) {
+        return entityManagers.get(persistenceUnit);
+    }
+
+    public void setEntityManager(String persistenceUnit, Object entityManager) {
+        Object oldEntityManager = entityManagers.put(persistenceUnit, entityManager);
+        if (oldEntityManager != null) {
+            throw new EJBException("EntityManager " + oldEntityManager + " for persistenceUnit " + persistenceUnit + " already associated with this transaction " + xid);
+        }
+    }
+
     private static class TransactionBranch implements TransactionBranchInfo {
         private final XAResource committer;
         private final Xid branchId;
@@ -653,7 +711,7 @@
 
         public String getResourceName() {
             if (committer instanceof NamedXAResource) {
-            return ((NamedXAResource)committer).getName();
+                return ((NamedXAResource) committer).getName();
             } else {
                 throw new IllegalStateException("Cannot log transactions unles XAResources are named! " + committer);
             }

Modified: geronimo/server/branches/sachin/modules/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionManagerImpl.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/sachin/modules/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionManagerImpl.java?view=diff&rev=442665&r1=442664&r2=442665
==============================================================================
--- geronimo/server/branches/sachin/modules/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionManagerImpl.java (original)
+++ geronimo/server/branches/sachin/modules/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionManagerImpl.java Tue Sep 12 11:15:24 2006
@@ -23,12 +23,14 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+
 import javax.transaction.HeuristicMixedException;
 import javax.transaction.HeuristicRollbackException;
 import javax.transaction.InvalidTransactionException;
 import javax.transaction.NotSupportedException;
 import javax.transaction.RollbackException;
 import javax.transaction.Status;
+import javax.transaction.Synchronization;
 import javax.transaction.SystemException;
 import javax.transaction.Transaction;
 import javax.transaction.TransactionManager;
@@ -121,7 +123,7 @@
         return new ArrayList(resourceManagers);
     }
 
-    public Transaction getTransaction() throws SystemException {
+    public Transaction getTransaction() {
         return (Transaction) threadTx.get();
     }
 
@@ -136,7 +138,7 @@
         fireThreadAssociated(tx);
     }
 
-    private void unassociate() throws SystemException {
+    private void unassociate() {
         Transaction tx = getTransaction();
         if (tx != null) {
             associatedTransactions.remove(tx);
@@ -200,8 +202,53 @@
         associate((TransactionImpl) tx);
     }
 
-    public void setRollbackOnly() throws IllegalStateException, SystemException {
-        Transaction tx = getTransaction();
+    public Object getResource(Object key) {
+        TransactionImpl tx = getActiveTransactionImpl();
+        return tx.getResource(key);
+    }
+
+    private TransactionImpl getActiveTransactionImpl() {
+        TransactionImpl tx = (TransactionImpl)threadTx.get();
+        if (tx == null) {
+            throw new IllegalStateException("No tx on thread");
+        }
+        if (tx.getStatus() != Status.STATUS_ACTIVE) {
+            throw new IllegalStateException("Transaction " + tx + " is not active");
+        }
+        return tx;
+    }
+
+    public boolean getRollbackOnly() {
+        TransactionImpl tx = getActiveTransactionImpl();
+        return tx.getRollbackOnly();
+    }
+
+    public Object getTransactionKey() {
+        TransactionImpl tx = getActiveTransactionImpl();
+        return tx.getTransactionKey();
+    }
+
+    public int getTransactionStatus() {
+        TransactionImpl tx = getActiveTransactionImpl();
+        return tx.getTransactionStatus();
+    }
+
+    public void putResource(Object key, Object value) {
+        TransactionImpl tx = getActiveTransactionImpl();
+        tx.putResource(key, value);
+    }
+
+    /**
+     * jta 1.1 method so the jpa implementations can be told to flush their caches.
+     * @param synchronization
+     */
+    public void registerInterposedSynchronization(Synchronization synchronization) {
+        TransactionImpl tx = getActiveTransactionImpl();
+        tx.registerInterposedSynchronization(synchronization);
+    }
+
+    public void setRollbackOnly() throws IllegalStateException {
+        TransactionImpl tx = (TransactionImpl) threadTx.get();
         if (tx == null) {
             throw new IllegalStateException("No transaction associated with current thread");
         }
@@ -301,7 +348,7 @@
     }
 
     protected void recoverResourceManager(ResourceManager resourceManager) {
-        NamedXAResource namedXAResource = null;
+        NamedXAResource namedXAResource;
         try {
             namedXAResource = resourceManager.getRecoveryXAResources();
         } catch (SystemException e) {

Modified: geronimo/server/branches/sachin/modules/geronimo-web-builder/src/main/java/org/apache/geronimo/web/deployment/AbstractWebModuleBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/sachin/modules/geronimo-web-builder/src/main/java/org/apache/geronimo/web/deployment/AbstractWebModuleBuilder.java?view=diff&rev=442665&r1=442664&r2=442665
==============================================================================
--- geronimo/server/branches/sachin/modules/geronimo-web-builder/src/main/java/org/apache/geronimo/web/deployment/AbstractWebModuleBuilder.java (original)
+++ geronimo/server/branches/sachin/modules/geronimo-web-builder/src/main/java/org/apache/geronimo/web/deployment/AbstractWebModuleBuilder.java Tue Sep 12 11:15:24 2006
@@ -56,6 +56,7 @@
 import org.apache.geronimo.j2ee.deployment.EARContext;
 import org.apache.geronimo.j2ee.deployment.Module;
 import org.apache.geronimo.j2ee.deployment.ModuleBuilder;
+import org.apache.geronimo.j2ee.deployment.NamingBuilder;
 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
 import org.apache.geronimo.kernel.Kernel;
 import org.apache.geronimo.kernel.Naming;
@@ -95,6 +96,9 @@
     protected final Kernel kernel;
     protected final NamespaceDrivenBuilderCollection securityBuilders;
     protected final NamespaceDrivenBuilderCollection serviceBuilders;
+
+    protected final NamingBuilder namingBuilders;
+
     private static final QName SECURITY_QNAME = GerSecurityDocument.type.getDocumentElementName();
     private static final QName SERVICE_QNAME = ServiceDocument.type.getDocumentElementName();
 
@@ -105,10 +109,11 @@
      */
     private static final URI RELATIVE_MODULE_BASE_URI = URI.create("../");
 
-    protected AbstractWebModuleBuilder(Kernel kernel, Collection securityBuilders, Collection serviceBuilders) {
+    protected AbstractWebModuleBuilder(Kernel kernel, Collection securityBuilders, Collection serviceBuilders, NamingBuilder namingBuilders) {
         this.kernel = kernel;
         this.securityBuilders = new NamespaceDrivenBuilderCollection(securityBuilders);
         this.serviceBuilders = new NamespaceDrivenBuilderCollection(serviceBuilders);
+        this.namingBuilders = namingBuilders;
 
     }
 
@@ -121,6 +126,10 @@
 
     }
 
+    public NamingBuilder getNamingBuilders() {
+        return namingBuilders;
+    }
+
     //TODO configid these need to be converted to ReferencePatterns
     protected Set findGBeanDependencies(EARContext earContext) {
         Set dependencies = new HashSet();
@@ -224,6 +233,7 @@
             }
         }
         module.setEarContext(moduleContext);
+        module.setRootEarContext(earContext);
 
         try {
             // add the warfile's content to the configuration

Modified: geronimo/server/branches/sachin/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/branches/sachin/pom.xml?view=diff&rev=442665&r1=442664&r2=442665
==============================================================================
--- geronimo/server/branches/sachin/pom.xml (original)
+++ geronimo/server/branches/sachin/pom.xml Tue Sep 12 11:15:24 2006
@@ -202,7 +202,13 @@
             <dependency>
                 <groupId>backport-util-concurrent</groupId>
                 <artifactId>backport-util-concurrent</artifactId>
-                <version>2.0_01_pd</version>
+                <version>2.2</version>
+            </dependency>
+
+            <dependency>
+                <groupId>concurrent</groupId>
+                <artifactId>concurrent</artifactId>
+                <version>1.3.4</version>
             </dependency>
 
             <dependency>
@@ -228,13 +234,7 @@
                 <artifactId>commons-logging</artifactId>
                 <version>1.0.4</version>
             </dependency>
-
-            <dependency>
-                <groupId>concurrent</groupId>
-                <artifactId>concurrent</artifactId>
-                <version>1.3.4</version>
-            </dependency>
-
+            
             <dependency>
                 <groupId>org.objectweb.howl</groupId>
                 <artifactId>howl</artifactId>