You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jg...@apache.org on 2005/02/06 12:22:49 UTC

svn commit: r151575 - geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java

Author: jgenender
Date: Sun Feb  6 03:22:48 2005
New Revision: 151575

URL: http://svn.apache.org/viewcvs?view=rev&rev=151575
Log:
Add the componentContext and transaction objects for web context management.

Modified:
    geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java

Modified: geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java?view=diff&r1=151574&r2=151575
==============================================================================
--- geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java (original)
+++ geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java Sun Feb  6 03:22:48 2005
@@ -26,6 +26,7 @@
 
 import org.apache.catalina.Context;
 import org.apache.catalina.Realm;
+import org.apache.catalina.core.StandardContext;
 import org.apache.catalina.deploy.LoginConfig;
 import org.apache.catalina.deploy.SecurityConstraint;
 import org.apache.commons.logging.Log;
@@ -35,6 +36,18 @@
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
 import org.apache.geronimo.gbean.GBeanLifecycle;
 import org.apache.geronimo.security.deploy.Security;
+import org.apache.geronimo.naming.reference.KernelAwareReference;
+import org.apache.geronimo.naming.reference.ClassLoaderAwareReference;
+import org.apache.geronimo.naming.java.SimpleReadOnlyContext;
+import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.tomcat.valve.ComponentContextValve;
+import org.apache.geronimo.tomcat.valve.TransactionContextValve;
+import org.apache.geronimo.tomcat.valve.PolicyContextValve;
+import org.apache.geronimo.transaction.OnlineUserTransaction;
+import org.apache.geronimo.transaction.TrackedConnectionAssociator;
+import org.apache.geronimo.transaction.context.TransactionContextManager;
+
+import javax.naming.NamingException;
 
 
 /**
@@ -52,10 +65,15 @@
     private final URI webAppRoot;
     private String path = null;
     private String docBase = null;
+
     private final LoginConfig loginConfig;
     private final Realm tomcatRealm;
     private final Set securityConstraints;
     private final Set securityRoles;
+    private final Map componentContext;
+    private final Kernel kernel;
+    private final TransactionContextManager transactionContextManager;
+    private final String policyContextID;
 
     public TomcatWebAppContext(URI webAppRoot,
                                URI[] webClassPath,
@@ -71,12 +89,19 @@
                                PermissionCollection uncheckedPermissions,
                                PermissionCollection excludedPermissions,
                                Map rolePermissions,
-
-                               TomcatContainer container) {
+                               Map componentContext,
+                               OnlineUserTransaction userTransaction,
+                               TransactionContextManager transactionContextManager,
+                               TrackedConnectionAssociator trackedConnectionAssociator,
+                               TomcatContainer container,
+                               Kernel kernel) throws NamingException {
 
         assert webAppRoot != null;
         assert webClassPath != null;
         assert configurationBaseUrl != null;
+        assert transactionContextManager != null;
+        assert trackedConnectionAssociator != null;
+        assert componentContext != null;
         assert container != null;
 
         this.webAppRoot = webAppRoot;
@@ -84,9 +109,17 @@
 
         this.setDocBase(this.webAppRoot.getPath());
         this.tomcatRealm = tomcatRealm;
+        this.policyContextID = policyContextID;
         this.securityConstraints = securityConstraints;
         this.securityRoles = securityRoles;
         this.loginConfig = loginConfig;
+
+        this.componentContext = componentContext;
+        this.transactionContextManager = transactionContextManager;
+        this.kernel = kernel;
+
+        userTransaction.setUp(transactionContextManager, trackedConnectionAssociator);
+
     }
 
     public String getDocBase() {
@@ -128,6 +161,41 @@
                 context.addSecurityRole((String) secIterator.next());
             }
         }
+
+        // create ReadOnlyContext
+        javax.naming.Context enc = null;
+        try {
+            if (componentContext != null) {
+                for (Iterator iterator = componentContext.values().iterator(); iterator.hasNext();) {
+                    Object value = iterator.next();
+                    if (value instanceof KernelAwareReference) {
+                        ((KernelAwareReference) value).setKernel(kernel);
+                    }
+                    if (value instanceof ClassLoaderAwareReference) {
+                        ((ClassLoaderAwareReference) value).setClassLoader(context.getLoader().getClassLoader());
+                    }
+                }
+                enc = new SimpleReadOnlyContext(componentContext);
+            }
+        } catch (NamingException ne) {
+            log.error(ne);
+        }
+
+        //Set the valves for the context
+        if (enc != null){
+            ComponentContextValve contextValve = new ComponentContextValve(enc);
+            ((StandardContext) context).addValve(contextValve);
+        }
+
+        if (transactionContextManager != null){
+            TransactionContextValve transactionValve = new TransactionContextValve(transactionContextManager);
+            ((StandardContext) context).addValve(transactionValve);
+        }
+
+        if (policyContextID != null){
+            PolicyContextValve policyValve = new PolicyContextValve(policyContextID);
+            ((StandardContext) context).addValve(policyValve);
+        }
     }
 
     public Context getContext() {
@@ -192,7 +260,13 @@
         infoFactory.addAttribute("excludedPermissions", PermissionCollection.class, true);
         infoFactory.addAttribute("rolePermissions", Map.class, true);
 
+        infoFactory.addAttribute("componentContext", Map.class, true);
+        infoFactory.addAttribute("userTransaction", OnlineUserTransaction.class, true);
+        infoFactory.addReference("TransactionContextManager", TransactionContextManager.class);
+        infoFactory.addReference("TrackedConnectionAssociator", TrackedConnectionAssociator.class);
+
         infoFactory.addReference("Container", TomcatContainer.class);
+        infoFactory.addAttribute("kernel", Kernel.class, false);
 
         infoFactory.setConstructor(new String[]{
             "webAppRoot",
@@ -208,7 +282,12 @@
             "uncheckedPermissions",
             "excludedPermissions",
             "rolePermissions",
-            "Container"
+            "componentContext",
+            "userTransaction",
+            "TransactionContextManager",
+            "TrackedConnectionAssociator",
+            "Container",
+            "kernel"
         });
 
         GBEAN_INFO = infoFactory.getBeanInfo();