geronimo-scm mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From djen...@apache.org
Subject cvs commit: incubator-geronimo/modules/jetty/src/java/org/apache/geronimo/jetty JettyWebAppContext.java
Date Wed, 01 Sep 2004 17:38:03 GMT
djencks     2004/09/01 10:38:02

  Modified:    modules/jetty/src/java/org/apache/geronimo/jetty
                        JettyWebAppContext.java
  Log:
  Provide correct classloader, tx context, and jndi context during init and destroy (?name)
of web application/servlets
  
  Revision  Changes    Path
  1.4       +87 -20    incubator-geronimo/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppContext.java
  
  Index: JettyWebAppContext.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppContext.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- JettyWebAppContext.java	18 Jul 2004 22:04:27 -0000	1.3
  +++ JettyWebAppContext.java	1 Sep 2004 17:38:02 -0000	1.4
  @@ -61,8 +61,6 @@
       private final TrackedConnectionAssociator associator;
       private final UserTransactionImpl userTransaction;
       private final ClassLoader classLoader;
  -
  -    // @todo get these from DD
       private final Set unshareableResources;
       private final Set applicationManagedSecurityResources;
   
  @@ -81,9 +79,16 @@
                                 TransactionContextManager transactionContextManager,
                                 TrackedConnectionAssociator associator,
                                 ConfigurationParent config,
  -                              JettyContainer container
  -                              ) {
  +                              JettyContainer container) {
           super();
  +
  +        assert container != null;
  +        assert compContext != null;
  +        assert transactionContextManager != null;
  +        assert associator != null;
  +        assert userTransaction != null;
  +        assert classLoader != null;
  +
           this.config = config;
           this.uri = uri;
           this.container = container;
  @@ -112,7 +117,7 @@
        * setContextPriorityClassLoader.
        *
        * @param b True if this context should give web application class in preference over
the containers
  -     * classes, as per the servlet specification recommendations.
  +     *          classes, as per the servlet specification recommendations.
        */
       public void setContextPriorityClassLoader(boolean b) {
           contextPriorityClassLoader = b;
  @@ -186,16 +191,43 @@
           } else {
               setWAR(new URL(config.getBaseURL(), uri.toString()).toString());
           }
  -        if (userTransaction != null) {
  -            userTransaction.setUp(transactionContextManager, associator);
  -            userTransaction.setOnline(true);
  -        }
  +
  +        userTransaction.setUp(transactionContextManager, associator);
           container.addContext(this);
   
           ClassLoader oldCL = Thread.currentThread().getContextClassLoader();
           try {
               Thread.currentThread().setContextClassLoader(classLoader);
  -            super.start();
  +            ReadOnlyContext oldComponentContext = RootContext.getComponentContext();
  +            InstanceContext oldInstanceContext = null;
  +            try {
  +                RootContext.setComponentContext(componentContext);
  +                // Turn on the UserTransaction
  +                userTransaction.setOnline(true);
  +
  +                //TODO should this always create an unspecified context, or might this
be executed in a tx?
  +                if (transactionContextManager.getContext() == null) {
  +                    transactionContextManager.newUnspecifiedTransactionContext();
  +                }
  +
  +                try {
  +                    oldInstanceContext = associator.enter(new DefaultInstanceContext(unshareableResources,
applicationManagedSecurityResources));
  +                } catch (ResourceException e) {
  +                    throw new RuntimeException(e);
  +                }
  +
  +                super.start();
  +            } finally {
  +                try {
  +                    associator.exit(oldInstanceContext);
  +                } catch (ResourceException e) {
  +                    throw new RuntimeException(e);
  +                } finally {
  +                    userTransaction.setOnline(false);
  +                    RootContext.setComponentContext(oldComponentContext);
  +                }
  +                //TODO should we reset the transactioncontext to null if we set it?
  +            }
           } finally {
               Thread.currentThread().setContextClassLoader(oldCL);
           }
  @@ -205,17 +237,52 @@
   
       public void doStop() throws WaitingException, Exception {
   
  -        while (true) {
  +        ClassLoader oldCL = Thread.currentThread().getContextClassLoader();
  +        try {
  +            Thread.currentThread().setContextClassLoader(classLoader);
  +            ReadOnlyContext oldComponentContext = RootContext.getComponentContext();
  +            InstanceContext oldInstanceContext = null;
               try {
  -                super.stop();
  -                break;
  -            } catch (InterruptedException e) {
  -                continue;
  +                RootContext.setComponentContext(componentContext);
  +                // Turn on the UserTransaction
  +                userTransaction.setOnline(true);
  +
  +                //TODO should this always create an unspecified context, or might this
be executed in a tx?
  +                if (transactionContextManager.getContext() == null) {
  +                    transactionContextManager.newUnspecifiedTransactionContext();
  +                }
  +
  +                try {
  +                    oldInstanceContext = associator.enter(new DefaultInstanceContext(unshareableResources,
applicationManagedSecurityResources));
  +                } catch (ResourceException e) {
  +                    throw new RuntimeException(e);
  +                }
  +
  +                while (true) {
  +                    try {
  +                        super.stop();
  +                        break;
  +                    } catch (InterruptedException e) {
  +                        continue;
  +                    }
  +                }
  +            } finally {
  +                try {
  +                    associator.exit(oldInstanceContext);
  +                } catch (ResourceException e) {
  +                    throw new RuntimeException(e);
  +                } finally {
  +                    userTransaction.setOnline(false);
  +                    RootContext.setComponentContext(oldComponentContext);
  +                }
  +                //TODO should we reset the transactioncontext to null if we set it?
               }
  -        }
  -        container.removeContext(this);
  -        if (userTransaction != null) {
  -            userTransaction.setOnline(false);
  +            container.removeContext(this);
  +            if (userTransaction != null) {
  +                userTransaction.setOnline(false);
  +            }
  +        } finally {
  +            Thread.currentThread().setContextClassLoader(oldCL);
           }
   
           log.info("JettyWebAppContext stopped");
  
  
  

Mime
View raw message