You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2012/04/21 21:00:59 UTC

svn commit: r1328725 - in /openejb/trunk/openejb/tomee: apache-tomee/src/main/groovy/commands/ tomee-catalina/src/main/java/org/apache/tomee/catalina/ tomee-common/src/main/java/org/apache/tomee/installer/ tomee-loader/src/main/java/org/apache/tomee/lo...

Author: dblevins
Date: Sat Apr 21 19:00:59 2012
New Revision: 1328725

URL: http://svn.apache.org/viewvc?rev=1328725&view=rev
Log:
TOMEE-163: Move added libs from webapps/tomee/lib to <tomcat>/lib/ for better tooling support (e.g. Eclipse)

Added:
    openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ServerListener.java
Modified:
    openejb/trunk/openejb/tomee/apache-tomee/src/main/groovy/commands/SetupCommand.groovy
    openejb/trunk/openejb/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Installer.java
    openejb/trunk/openejb/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/LoaderServlet.java

Modified: openejb/trunk/openejb/tomee/apache-tomee/src/main/groovy/commands/SetupCommand.groovy
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/apache-tomee/src/main/groovy/commands/SetupCommand.groovy?rev=1328725&r1=1328724&r2=1328725&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/apache-tomee/src/main/groovy/commands/SetupCommand.groovy (original)
+++ openejb/trunk/openejb/tomee/apache-tomee/src/main/groovy/commands/SetupCommand.groovy Sat Apr 21 19:00:59 2012
@@ -121,7 +121,7 @@ class SetupCommand {
 		System.setProperty("catalina.base", "${catalinaHome}")
 		Paths paths = new Paths(new File("${catalinaHome}/webapps/tomee"))
 		Installer installer = new Installer(paths, true)
-		installer.installAll()
+		installer.installFull()
 
         // clean up duplicate jars since in TomEE it is useless
         // = gain of space ;)

Added: openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ServerListener.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ServerListener.java?rev=1328725&view=auto
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ServerListener.java (added)
+++ openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ServerListener.java Sat Apr 21 19:00:59 2012
@@ -0,0 +1,122 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.tomee.catalina;
+
+import org.apache.catalina.Lifecycle;
+import org.apache.catalina.LifecycleEvent;
+import org.apache.catalina.LifecycleListener;
+import org.apache.catalina.core.StandardServer;
+import org.apache.openejb.loader.IO;
+import org.apache.openejb.loader.ProvisioningUtil;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.tomee.loader.TomcatHelper;
+import org.apache.tomee.loader.TomcatHook;
+
+import java.io.IOException;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class ServerListener implements LifecycleListener {
+    private static final Logger LOGGER = Logger.getLogger(ServerListener.class.getName());
+
+    static private boolean listenerInstalled;
+
+    public void lifecycleEvent(LifecycleEvent event) {
+        // only install once
+        if (listenerInstalled || !Lifecycle.AFTER_INIT_EVENT.equals(event.getType())) return;
+        if (!(event.getSource() instanceof StandardServer)) return;
+
+        try {
+            final StandardServer server = (StandardServer) event.getSource();
+
+            TomcatHelper.setServer(server);
+
+            final Properties properties = new Properties();
+            properties.setProperty("openejb.embedder.source", getClass().getSimpleName());
+
+
+            // 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);
+
+            //Sets system property for openejb.home
+            System.setProperty("openejb.home", catalinaHome);
+
+            //get the value of catalina.base and set it to openejb.base
+            String catalinaBase = System.getProperty("catalina.base");
+            properties.setProperty("openejb.base", catalinaBase);
+
+            //Sets system property for openejb.base
+            System.setProperty("openejb.base", catalinaBase);
+
+
+            // System.setProperty("tomcat.version", "x.y.z.w");
+            // System.setProperty("tomcat.built", "mmm dd yyyy hh:mm:ss");
+            // set the System properties, tomcat.version, tomcat.built
+            try {
+                ClassLoader classLoader = TomcatHook.class.getClassLoader();
+                Properties tomcatServerInfo = IO.readProperties(classLoader.getResourceAsStream("org/apache/catalina/util/ServerInfo.properties"), new Properties());
+
+                String serverNumber = tomcatServerInfo.getProperty("server.number");
+                if (serverNumber == null) {
+                    // Tomcat5 only has server.info
+                    String serverInfo = tomcatServerInfo.getProperty("server.info");
+                    if (serverInfo != null) {
+                        int slash = serverInfo.indexOf('/');
+                        serverNumber = serverInfo.substring(slash + 1);
+                    }
+                }
+                if (serverNumber != null) {
+                    System.setProperty("tomcat.version", serverNumber);
+                }
+
+                String serverBuilt = tomcatServerInfo.getProperty("server.built");
+                if (serverBuilt != null) {
+                    System.setProperty("tomcat.built", serverBuilt);
+                }
+            } catch (Throwable e) {
+                // no-op
+            }
+
+            // manage additional libraries
+            try {
+                ProvisioningUtil.addAdditionalLibraries();
+            } catch (IOException e) {
+                // ignored
+            }
+
+            SystemInstance.init(properties);
+            TomcatLoader loader = new TomcatLoader();
+            loader.init(properties);
+
+            listenerInstalled = true;
+        } catch (Exception e) {
+            LOGGER.log(Level.SEVERE, "TomEE Listener can't start OpenEJB", e);
+            // e.printStackTrace(System.err);
+        }
+    }
+}

Modified: openejb/trunk/openejb/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Installer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Installer.java?rev=1328725&r1=1328724&r2=1328725&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Installer.java (original)
+++ openejb/trunk/openejb/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Installer.java Sat Apr 21 19:00:59 2012
@@ -45,7 +45,7 @@ public class Installer {
 
     static {
         // is the OpenEJB listener installed
-        listenerInstalled = "OpenEJBListener".equals(SystemInstance.get().getOptions().get("openejb.embedder.source", ""));
+        listenerInstalled = "OpenEJBListener".equals(SystemInstance.get().getOptions().get("openejb.embedder.source", "")) ||  "ServerListener".equals(SystemInstance.get().getOptions().get("openejb.embedder.source", ""));
 
         // is the OpenEJB javaagent installed
         agentInstalled = invokeStaticNoArgMethod("org.apache.openejb.javaagent.Agent", "getInstrumentation") != null;
@@ -104,6 +104,40 @@ public class Installer {
         }
     }
 
+    public void installFull() {
+        installListener("org.apache.tomee.catalina.ServerListener");
+
+        installJavaagent();
+
+        installConfigFiles();
+
+        removeTomcatLibJar("annotations-api.jar");
+        removeTomcatLibJar("el-api.jar");
+        addJavaeeInEndorsed();
+        moveLibs();
+
+        if (!alerts.hasErrors()) {
+            status = Status.REBOOT_REQUIRED;
+        }
+    }
+
+    private void moveLibs() {
+
+        final File libs = paths.getCatalinaLibDir();
+        for (File file : paths.getOpenEJBLibDir().listFiles()) {
+            if (file.isDirectory()) continue;
+            if (!file.getName().endsWith(".jar")) continue;
+
+            try {
+                Installers.copyFile(file, new File(libs, file.getName()));
+                file.delete();
+                alerts.addInfo("Copy " + file.getName() + " to lib");
+            } catch (IOException e) {
+                alerts.addError("Unable to " + file.getName() + " to Tomcat lib directory.  This will need to be performed manually.", e);
+            }
+        }
+    }
+
     private void addJavaeeInEndorsed() {
 
         File endorsed = new File(paths.getCatalinaHomeDir(), "endorsed");
@@ -171,6 +205,10 @@ public class Installer {
     }
 
     public void installListener() {
+        installListener("org.apache.tomee.loader.OpenEJBListener");
+    }
+
+    public void installListener(final String listener) {
         if (listenerInstalled && !force) {
 //            addInfo("OpenEJB Listener already installed");
             return;
@@ -207,7 +245,7 @@ public class Installer {
         }
 
         // does the server.xml contain our listener name... it is possible that they commented out our listener, but that would be a PITA to detect
-        if (serverXmlOriginal.contains("org.apache.tomee.loader.OpenEJBListener")) {
+        if (serverXmlOriginal.contains(listener)) {
             alerts.addWarning("OpenEJB Listener already declared in Tomcat server.xml file.");
             return;
         }
@@ -225,8 +263,8 @@ public class Installer {
                     "<Server",
                     ">",
                     ">\r\n" +
-                            "  <!-- OpenEJB plugin for Tomcat -->\r\n" +
-                            "  <Listener className=\"org.apache.tomee.loader.OpenEJBListener\" />");
+                            "  <!-- TomEE plugin for Tomcat -->\r\n" +
+                            "  <Listener className=\"" + listener + "\" />");
         } catch (IOException e) {
             alerts.addError("Error while adding listener to server.xml file", e);
         }

Modified: openejb/trunk/openejb/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/LoaderServlet.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/LoaderServlet.java?rev=1328725&r1=1328724&r2=1328725&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/LoaderServlet.java (original)
+++ openejb/trunk/openejb/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/LoaderServlet.java Sat Apr 21 19:00:59 2012
@@ -47,7 +47,9 @@ public class LoaderServlet extends HttpS
         // only install once
         if (embedded) return;
         embedded = true;
-        
+
+        if (System.getProperties().containsKey("openejb.embedder.source")) return;
+
         //Gets parameters from servlet initialization parameter
         Properties properties = initParamsToProperties(config);