Author: dblevins
Date: Sat Jan 30 18:13:15 2010
New Revision: 904840

URL: http://svn.apache.org/viewvc?rev=904840&view=rev
Log:
Javadoc'ed the magical loading process

Modified:
    
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/LoaderServlet.java
    
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/OpenEJBListener.java
    
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/TomcatEmbedder.java
    
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/TomcatHook.java

Modified: 
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/LoaderServlet.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/LoaderServlet.java?rev=904840&r1=904839&r2=904840&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/LoaderServlet.java
 (original)
+++ 
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/LoaderServlet.java
 Sat Jan 30 18:13:15 2010
@@ -24,6 +24,15 @@
 import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServlet;
 
+/**
+ * The sole purpose of this class is to call the {...@link 
TomcatEmbedder#embed} method
+ *
+ * This class gets the location of this webapp and assumes that it is
+ * the openejb.war file then calls the embedder.
+ *
+ * This method of bootstrapping is mutually exclussive to the {...@link 
OpenEJBListener} approach
+ */
+//@Generic
 public class LoaderServlet extends HttpServlet {
     private static boolean embedded = false;
 
@@ -38,8 +47,10 @@
 
         properties.setProperty("openejb.embedder.source", 
getClass().getSimpleName());
 
+        //@Tomcat
         TomcatEmbedder.embed(properties, config.getClass().getClassLoader());
     }
+    
     /**
      * Retrieves all intialization parameters for this servlet and stores them 
in a java.util.Properties object.
      * @param config javax.servlet.ServletConfig
@@ -48,6 +59,7 @@
     private Properties initParamsToProperties(ServletConfig config) {
         Properties properties = new Properties();
 
+        //@Tomcat
         // Set some defaults
         properties.setProperty("openejb.loader", "tomcat");
 

Modified: 
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/OpenEJBListener.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/OpenEJBListener.java?rev=904840&r1=904839&r2=904840&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/OpenEJBListener.java
 (original)
+++ 
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/OpenEJBListener.java
 Sat Jan 30 18:13:15 2010
@@ -20,8 +20,6 @@
 import java.io.File;
 import java.util.Properties;
 
-import javax.management.ObjectName;
-
 import org.apache.catalina.Container;
 import org.apache.catalina.LifecycleEvent;
 import org.apache.catalina.LifecycleListener;
@@ -32,6 +30,19 @@
 import org.apache.catalina.core.StandardHost;
 import org.apache.catalina.core.StandardServer;
 
+/**
+ * The sole purpose of this class is to call the {...@link 
TomcatEmbedder#embed} method
+ *
+ * This is an alternate way to load the Tomcat integration
+ * This approach is mutually exclussive to the {...@link LoaderServlet}
+ *
+ * This class does nothing more than scrape around in
+ * Tomcat and look for the openejb.war so it can call the embedder
+ *
+ * This class can be installed in the Tomcat server.xml as an alternate
+ * way to bootstrap OpenEJB into Tomcat.  The benefit of this is that
+ * OpenEJB is guaranteed to start before all webapps. 
+ */
 public class OpenEJBListener implements LifecycleListener {
     static private boolean listenerInstalled;
 

Modified: 
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/TomcatEmbedder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/TomcatEmbedder.java?rev=904840&r1=904839&r2=904840&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/TomcatEmbedder.java
 (original)
+++ 
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/TomcatEmbedder.java
 Sat Jan 30 18:13:15 2010
@@ -24,6 +24,21 @@
 import java.net.URLDecoder;
 import java.util.Properties;
 
+/**
+ * Ultimately this class does nothing lasting and just calls {...@link 
TomcatHook#hook}
+ * 
+ * This class needs to know the path to the openejb.war file.
+ *
+ * With that information this class finds the openejb-loader jar in the 
openejb.war
+ * essentially creates a "mini-webapp" which is to say it creates a new 
WebappClassloader
+ * that contains the openejb-loader jar and then uses that classloader to 
reflectively
+ * call the {...@link TomcatHook#hook} method which does all the work to load 
OpenEJB into Tomcat
+ *
+ * This messing around is required so that it doesn't matter if the {...@link 
OpenEJBListener},
+ * which does not execute in a webapp classloader, or the {...@link 
LoaderServlet}, which does,
+ * calls the TomcatEmbedder.  Either way the embedding process starts inside a 
WebappClassloader
+ * and keeps that very complex code just a little simpler.
+ */
 public class TomcatEmbedder {
        /**
         * 

Modified: 
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/TomcatHook.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/TomcatHook.java?rev=904840&r1=904839&r2=904840&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/TomcatHook.java
 (original)
+++ 
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-loader/src/main/java/org/apache/openejb/tomcat/loader/TomcatHook.java
 Sat Jan 30 18:13:15 2010
@@ -17,35 +17,63 @@
  */
 package org.apache.openejb.tomcat.loader;
 
-import java.io.File;
-import java.util.Properties;
-
 import org.apache.openejb.loader.Embedder;
 import org.apache.openejb.loader.SystemInstance;
 
+import java.io.File;
+import java.util.Properties;
+
 /**
- * This class should only be loadded and used via reflection from 
TomcatEmbedder. 
+ * This class should only be loadded and used via reflection from 
TomcatEmbedder.
+ *
+ * Everything that happens up to the point of calling this particular method
+ * (except setting openejb.war) ultimately means nothing and does not matter
+ * to the integration.
+ *
+ * Requires openejb.war to be set, the sets the following properties:
+ *
+ * set openejb.loader -> tomcat-system
+ * set openejb.home -> catalina.home
+ * set openejb.base -> catalina.base
+ * set openejb.libs -> $openejb.war/lib
+ *
+ * set tomcat.version if not set
+ * set tomcat.built if not set
+ *
+ * With these properties setup, this class with construct an {...@link 
Embedder}
+ * using the "org.apache.openejb.tomcat.catalina.TomcatLoader" as the loader.
+ *
+ * The Embedder will use the openejb.libs property to find all the jars to be 
loaded
+ * then it will use the openejb.loader property to find out *how* to add them 
into
+ * the classpath of the right classloader.  Once all the jars are in the 
required
+ * class loader, it loads the {...@link org.apache.openejb.loader.Loader} 
implementation
+ * and calls it's {...@link org.apache.openejb.loader.Loader#init} method.
+ *
+ * See org.apache.openejb.tomcat.catalina.TomcatLoader for the next part of 
the story
  */
 class TomcatHook {
     @SuppressWarnings({"UnusedDeclaration"})
     private static void hook(Properties properties) {
         // verify properties and make sure it contains the openejb.war property
         if (properties == null) throw new NullPointerException("properties is 
null");
-                if (!properties.containsKey("openejb.war")) {
-            throw new IllegalArgumentException("properties must contain the 
openejb.war property");
-        }
+
+        if (!properties.containsKey("openejb.war")) throw new 
IllegalArgumentException("properties must contain the openejb.war property");
+
+        
         // get the openejb directory (under webapps) using the openejb.war 
property
         File openejbWar = new File(properties.getProperty("openejb.war"));
         if (!openejbWar.isDirectory()) {
             throw new IllegalArgumentException("openejb.war is not a 
directory: " + openejbWar);
         }
+
         // if SystemInstance is already initialized, then return
         if (SystemInstance.isInitialized()) {
             return;
         }
+
         // set the openejb.loader property to tomcat-system
         properties.setProperty("openejb.loader", "tomcat-system");
-        
+
         // get the value of catalina.home and set it to openejb.home
         String catalinaHome = System.getProperty("catalina.home");
         properties.setProperty("openejb.home", catalinaHome);
@@ -55,7 +83,7 @@
         String catalinaBase = System.getProperty("catalina.base");
         properties.setProperty("openejb.base", catalinaBase);
         System.setProperty("openejb.base", catalinaBase);
-        
+
         //TODO: why do we need this, this was already set. Thats how we create 
the File openejbWar
         System.setProperty("openejb.war", openejbWar.getAbsolutePath());
         // set the property openejb.libs to contain the absolute path of the 
lib directory of openejb webapp


Reply via email to