Author: dain
Date: Fri Sep 7 16:19:41 2007
New Revision: 573752
URL: http://svn.apache.org/viewvc?rev=573752&view=rev
Log:
First pass at an automated tomcat installer
Added:
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/ServerServlet.java
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/installer/
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/installer/InstallerServlet.java
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/resources/index.html
Modified:
openejb/trunk/openejb3/assembly/openejb-tomcat/maven.xml
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/assembly/bin.xml
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/resources/WEB-INF/web.xml
openejb/trunk/openejb3/container/openejb-loader/src/main/java/org/apache/openejb/loader/OpenEJBListener.java
openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/TomcatRemoteTestServer.java
Modified: openejb/trunk/openejb3/assembly/openejb-tomcat/maven.xml
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/maven.xml?rev=573752&r1=573751&r2=573752&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/maven.xml (original)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/maven.xml Fri Sep 7
16:19:41 2007
@@ -97,9 +97,9 @@
</j:if>
<!-- Add OpenEJBListener -->
- <replace file="${tomcat.home}/conf/server.xml"
token='shutdown="SHUTDOWN">' value='shutdown="SHUTDOWN" > <Listener
className="org.apache.openejb.loader.OpenEJBListener" />'/>
+ <!--<replace file="${tomcat.home}/conf/server.xml"
token='shutdown="SHUTDOWN">' value='shutdown="SHUTDOWN" > <Listener
className="org.apache.openejb.loader.OpenEJBListener" />'/>-->
<!-- Add openejb loader jar -->
- <copy
file="${user.home}/.m2/repository/org/apache/openejb/openejb-loader/${openejb.version}/openejb-loader-${openejb.version}.jar"
todir="${tomcat.lib}" />
+ <!--<copy
file="${user.home}/.m2/repository/org/apache/openejb/openejb-loader/${openejb.version}/openejb-loader-${openejb.version}.jar"
todir="${tomcat.lib}" />-->
</goal>
<goal name="setup:tomcat-src">
@@ -130,13 +130,15 @@
<j:choose>
<j:when test="${systemScope['os.name'].startsWith('Windows')}">
<exec executable="${tomcat.home}/bin/startup.bat" os="Windows
NT,Windows 2000,Windows XP">
- <env key="JAVA_OPTS"
value="-javaagent:${tomcat.webapps}\openejb\lib\openejb-javaagent-${openejb.version}.jar"/>
+ <!--<env key="JAVA_OPTS"
value="-javaagent:${tomcat.webapps}\openejb\lib\openejb-javaagent-${openejb.version}.jar
-Dcom.sun.management.jmxremote"/>-->
+ <env key="JAVA_OPTS" value="-Dcom.sun.management.jmxremote"/>
<env key="CATALINA_HOME" value="${tomcat.home}"/>
</exec>
</j:when>
<j:otherwise>
<exec executable="${tomcat.home}/bin/startup.sh">
- <env key="JAVA_OPTS"
value="-javaagent:${tomcat.webapps}/openejb/lib/openejb-javaagent-${openejb.version}.jar"/>
+ <!--<env key="JAVA_OPTS"
value="-javaagent:${tomcat.webapps}/openejb/lib/openejb-javaagent-${openejb.version}.jar
-Dcom.sun.management.jmxremote"/>-->
+ <env key="JAVA_OPTS" value="-Dcom.sun.management.jmxremote"/>
</exec>
</j:otherwise>
</j:choose>
@@ -146,13 +148,15 @@
<j:choose>
<j:when test="${systemScope['os.name'].startsWith('Windows')}">
<exec executable="${tomcat.home}/bin/startup.bat" os="Windows
NT,Windows 2000,Windows XP">
- <env key="JAVA_OPTS" value="-Dopenejb.home=${openejb.home} -Xdebug
-Xnoagent -Djava.compiler=NONE
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
-javaagent:${tomcat.webapps}\openejb\lib\openejb-javaagent-${openejb.version}.jar"/>
+ <!--<env key="JAVA_OPTS" value="-Dopenejb.home=${openejb.home}
-Xdebug -Xnoagent -Djava.compiler=NONE
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
-javaagent:${tomcat.webapps}\openejb\lib\openejb-javaagent-${openejb.version}.jar
-Dcom.sun.management.jmxremote"/>-->
+ <env key="JAVA_OPTS" value="-Dopenejb.home=${openejb.home} -Xdebug
-Xnoagent -Djava.compiler=NONE
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
-Dcom.sun.management.jmxremote"/>
<env key="CATALINA_HOME" value="${tomcat.home}"/>
</exec>
</j:when>
<j:otherwise>
<exec executable="${tomcat.home}/bin/startup.sh">
- <env key="JAVA_OPTS" value="-Dopenejb.home=${openejb.home} -Xdebug
-Xnoagent -Djava.compiler=NONE
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
-javaagent:${tomcat.webapps}/openejb/lib/openejb-javaagent-${openejb.version}.jar"/>
+ <!--<env key="JAVA_OPTS" value="-Dopenejb.home=${openejb.home}
-Xdebug -Xnoagent -Djava.compiler=NONE
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
-javaagent:${tomcat.webapps}/openejb/lib/openejb-javaagent-${openejb.version}.jar
-Dcom.sun.management.jmxremote"/>-->
+ <env key="JAVA_OPTS" value="-Dopenejb.home=${openejb.home} -Xdebug
-Xnoagent -Djava.compiler=NONE
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
-Dcom.sun.management.jmxremote"/>
</exec>
</j:otherwise>
</j:choose>
@@ -180,7 +184,7 @@
<goal name="setup:loader-webapp">
<!-- Unzip webapp and set openejb.home -->
<unjar src="${basedir}/target/openejb-tomcat-${openejb.version}-bin.zip"
dest="${tomcat.webapps}"/>
- <delete file="${tomcat.home}/lib/annotations-api.jar"/>
+ <!--<delete file="${tomcat.home}/lib/annotations-api.jar"/>-->
<!--<u:file var="fileAsFile"
name="${tomcat.dist}/conf/Catalina/localhost"/>-->
<!--<j:if test="${!(fileAsFile.exists())}">-->
Modified:
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/assembly/bin.xml
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/assembly/bin.xml?rev=573752&r1=573751&r2=573752&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/assembly/bin.xml
(original)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/assembly/bin.xml
Fri Sep 7 16:19:41 2007
@@ -39,6 +39,13 @@
</excludes>
</fileSet>
<fileSet>
+ <directory>target/classes</directory>
+ <outputDirectory>openejb/WEB-INF/classes</outputDirectory>
+ <includes>
+ <include>org/apache/openejb/tomcat/installer/**</include>
+ </includes>
+ </fileSet>
+ <fileSet>
<directory>target</directory>
<outputDirectory>openejb/lib</outputDirectory>
<includes>
@@ -63,6 +70,7 @@
<scope>runtime</scope>
<includes>
<include>org.apache.openejb:openejb-loader</include>
+ <include>org.codehaus.swizzle:swizzle-stream</include>
</includes>
</dependencySet>
</dependencySets>
Added:
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/ServerServlet.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/ServerServlet.java?rev=573752&view=auto
==============================================================================
---
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/ServerServlet.java
(added)
+++
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/ServerServlet.java
Fri Sep 7 16:19:41 2007
@@ -0,0 +1,51 @@
+/**
+ *
+ * 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.openejb.tomcat;
+
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.server.ServiceException;
+import org.apache.openejb.server.ejbd.EjbServer;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletInputStream;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+public class ServerServlet extends HttpServlet {
+ private EjbServer ejbServer;
+
+ public void init(ServletConfig config) {
+ ejbServer = SystemInstance.get().getComponent(EjbServer.class);
+ }
+
+ protected void service(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
+ System.out.println(request.getContextPath() + " | " +
request.getServletPath() + " | " + request.getPathInfo());
+ ServletInputStream in = request.getInputStream();
+ ServletOutputStream out = response.getOutputStream();
+ try {
+ ejbServer.service(in, out);
+ } catch (ServiceException e) {
+ e.printStackTrace();
+ throw new ServletException("ServerService error: " +
ejbServer.getClass().getName() + " -- " + e.getMessage(), e);
+ }
+ }
+}
Added:
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/installer/InstallerServlet.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/installer/InstallerServlet.java?rev=573752&view=auto
==============================================================================
---
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/installer/InstallerServlet.java
(added)
+++
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/installer/InstallerServlet.java
Fri Sep 7 16:19:41 2007
@@ -0,0 +1,491 @@
+/**
+ *
+ * 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.openejb.tomcat.installer;
+
+import org.codehaus.swizzle.stream.DelimitedTokenReplacementInputStream;
+import org.codehaus.swizzle.stream.StringTokenHandler;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.ByteArrayInputStream;
+import java.io.Closeable;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.lang.reflect.Method;
+import java.util.LinkedList;
+import java.util.Properties;
+
+/**
+ * Installs OpenEJB into Tomcat.
+ * <p/>
+ * NOTE: This servlet can not use any classes from OpenEJB since it is
installing OpenEJB itself.
+ */
+public class InstallerServlet extends HttpServlet {
+ private ServletContext servletContext;
+
+ public void init(ServletConfig servletConfig) throws ServletException {
+ servletContext = servletConfig.getServletContext();
+ }
+
+ protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
+ res.setContentType("text/plain");
+ ServletOutputStream out = res.getOutputStream();
+ out.println("Running Verifier...");
+
+ try {
+ boolean agentInstalled =
invokeStaticNoArgMethod("org.apache.openejb.javaagent.Agent",
"getInstrumentation") != null;
+
+ Boolean listenerInstalled = (Boolean)
invokeStaticNoArgMethod("org.apache.openejb.loader.OpenEJBListener",
"isInstalled");
+ if (listenerInstalled == null) listenerInstalled = false;
+
+ boolean annotationJarRemoved;
+ try {
+ // Tomcat persistence context class is missing the properties
method
+ Class<?> persistenceContextClass =
Class.forName("javax.persistence.PersistenceContext");
+ persistenceContextClass.getMethod("properties", (Class[])
null);
+ annotationJarRemoved = true;
+ } catch (Exception e) {
+ annotationJarRemoved = false;
+ }
+
+ out.println("Agent " + (agentInstalled ? "" : "NOT ") +
"Installed");
+ out.println("Listener " + (listenerInstalled ? "" : "NOT ") +
"Installed");
+ out.println("Annotation Jar " + (annotationJarRemoved ? "" : "NOT
") + "Removed");
+
+ String tomcatVersion = getTomcatVersion();
+ out.println("TomcatVersion = " + tomcatVersion);
+
+ // find catalina home directory
+ String catalinaHome = System.getProperty("catalina.home");
+ out.println("catalina.home=" + catalinaHome);
+ File catalinaHomeDir = new File(catalinaHome);
+ if (!catalinaHomeDir.exists()) {
+ out.println("Catalina home does not exist");
+ return;
+ }
+ if (!catalinaHomeDir.isDirectory()) {
+ out.println("Catalina home does not a directory");
+ return;
+ }
+
+ // find catalina base directory
+ String catalinaBase = System.getProperty("catalina.base");
+ out.println("catalina.base=" + catalinaBase);
+ File catalinaBaseDir = new File(catalinaBase);
+ if (!catalinaBaseDir.exists()) {
+ out.println("Catalina base does not exist");
+ return;
+ }
+ if (!catalinaBaseDir.isDirectory()) {
+ out.println("Catalina base does not a directory");
+ return;
+ }
+
+ // find tomcat lib directory
+ File libDir = new File(catalinaHomeDir, "lib");
+ out.println("lib=" + libDir.getAbsolutePath());
+ if (!libDir.exists()) {
+ out.println("lib dir does not exist");
+ return;
+ }
+ if (!libDir.isDirectory()) {
+ out.println("lib dir is not a directory");
+ return;
+ }
+
+ // find tomcat conf directory
+ File confDir = new File(catalinaBaseDir, "conf");
+ out.println("conf=" + confDir.getAbsolutePath());
+ if (!confDir.exists()) {
+ out.println("conf dir does not exist");
+ return;
+ }
+ if (!confDir.isDirectory()) {
+ out.println("conf dir is not a directory");
+ return;
+ }
+
+ // find tomcat server.xml file
+ File serverXml = new File(confDir, "server.xml");
+ out.println("serverXml=" + serverXml.getAbsolutePath());
+ if (!serverXml.exists()) {
+ out.println("server.xml file does not exist");
+ return;
+ }
+ if (!serverXml.canWrite()) {
+ out.println("server.xml file is not writable");
+ return;
+ }
+ if (!serverXml.isFile()) {
+ out.println("server.xml file is not a file");
+ return;
+ }
+
+ // find the tomcat bin directory
+ File binDir = new File(catalinaHomeDir, "bin");
+ out.println("bin=" + binDir.getAbsolutePath());
+ if (!binDir.exists()) {
+ out.println("bin dir does not exist");
+ return;
+ }
+ if (!binDir.isDirectory()) {
+ out.println("bin dir is not a directory");
+ return;
+ }
+
+ // find tomcat catalina.sh file
+ File catalinaSh = new File(binDir, "catalina.sh");
+ out.println("catalinaSh=" + catalinaSh.getAbsolutePath());
+ if (!catalinaSh.exists()) {
+ out.println("catalina.sh file does not exist");
+ return;
+ }
+ if (!catalinaSh.canWrite()) {
+ out.println("catalina.sh file is not writable");
+ return;
+ }
+ if (!catalinaSh.isFile()) {
+ out.println("catalina.sh file is not a file");
+ return;
+ }
+
+ // find openejb lib dir
+ String openejbLib = servletContext.getRealPath("lib");
+ if (openejbLib == null) {
+ out.println("Can not find OpenEJB lib directory");
+ return;
+ }
+ File openejbLibDir = new File(openejbLib);
+ out.println("OpenEJB lib=" + openejbLibDir.getAbsolutePath());
+ if (!openejbLibDir.exists()) {
+ out.println("OpenEJB lib dir does not exist");
+ return;
+ }
+ if (!openejbLibDir.isDirectory()) {
+ out.println("OpenEJB lib dir is not a directory");
+ return;
+ }
+
+ // find openejb-loader jar
+ File openejbLoaderJar = null;
+ for (File file : openejbLibDir.listFiles()) {
+ if (file.getName().startsWith("openejb-loader-") &&
file.getName().endsWith(".jar")) {
+ openejbLoaderJar = file;
+ }
+ }
+ if (openejbLoaderJar == null) {
+ out.println("Can not find OpenEJB loader jar");
+ return;
+ }
+ out.println("openejbLoaderJar=" +
openejbLoaderJar.getAbsolutePath());
+
+
+ // find openejb-javaagent jar
+ File openejbJavaagentJar = null;
+ for (File file : openejbLibDir.listFiles()) {
+ if (file.getName().startsWith("openejb-javaagent-") &&
file.getName().endsWith(".jar")) {
+ openejbJavaagentJar = file;
+ }
+ }
+ if (openejbJavaagentJar == null) {
+ out.println("Can not find OpenEJB javaagent jar");
+ return;
+ }
+ out.println("openejbJavaagentJar=" +
openejbJavaagentJar.getAbsolutePath());
+
+ String openejbJavaagentPath =
catalinaBaseDir.toURI().relativize(openejbJavaagentJar.toURI()).getPath();
+ out.println("openejbJavaagentPath=" + openejbJavaagentPath);
+
+
+ out.println();
+ if (annotationJarRemoved) {
+ out.println("Annotation Jar already removed");
+ } else {
+ // copy loader jar to lib
+ File destination = new File(libDir, "annotations-api.jar");
+ if (destination.exists()) {
+ out.flush();
+
+ if (destination.delete()) {
+ out.println("Deleted non-compliant (invalid) Tomcat
annotation jar.");
+ } else {
+ out.println("Can not delete non-compliant (invalid)
Tomcat annotation jar. Jar havs been marked to be deleted on a normal VM
exit.");
+ }
+ }
+ }
+
+// out.println();
+ if (listenerInstalled) {
+ out.println("OpenEJB Listener already installed");
+ } else {
+
+ boolean copyOpenEJBLoader = true;
+
+ // copy loader jar to lib
+ File destination = new File(libDir,
openejbLoaderJar.getName());
+ if (destination.exists()) {
+ out.flush();
+
+ if (openejbLoaderJar.length() != destination.length()) {
+ // md5 diff the files
+ } else {
+ out.println("OpenEJB loader jar already installed in
Tomcat lib directory.");
+ copyOpenEJBLoader = false;
+ }
+ }
+
+ if (copyOpenEJBLoader) {
+ copyFile(openejbLoaderJar, destination);
+ out.println("Coppied " + openejbLoaderJar.getName() + " to
the Tomcat lib directory.");
+ }
+
+ // add listener to server.xml
+ String serverXmlOriginal = readAll(serverXml);
+
+ // write backup
+ {
+ File backupFile = new File(confDir, "server.xml.original");
+ if (!backupFile.exists()) {
+ FileOutputStream fileOutputStream = new
FileOutputStream(backupFile);
+ try {
+ writeAll(new
ByteArrayInputStream(serverXmlOriginal.getBytes()), fileOutputStream);
+ } finally {
+ close(fileOutputStream);
+ }
+ }
+ }
+
+// out.println();
+// out.println("====== ORIGINAL SERVER XML =====");
+// out.println(serverXmlOriginal);
+
+ if
(serverXmlOriginal.contains("org.apache.openejb.loader.OpenEJBListener")) {
+ out.println("OpenEJB Listener already declared in Tomcat
server.xml file.");
+ } else {
+ String newServerXml = replace(serverXmlOriginal,
+ "<Server",
+ "<Server",
+ ">",
+ ">\r\n" +
+ " <!-- OpenEJB plugin for Tomcat -->\r\n"
+
+ " <Listener
className=\"org.apache.openejb.loader.OpenEJBListener\" />");
+
+// out.println();
+// out.println("====== NEW SERVER XML =====");
+// out.println(newServerXml);
+
+ // overwrite server.xml
+ FileOutputStream fileOutputStream = new
FileOutputStream(serverXml);
+ try {
+ writeAll(new
ByteArrayInputStream(newServerXml.getBytes()), fileOutputStream);
+ } finally {
+ close(fileOutputStream);
+ }
+
+ out.println("Added OpenEJB listener to Tomcat server.xml
file.");
+ }
+ }
+
+// out.println();
+ if (agentInstalled) {
+ out.println("OpenEJB Agent already installed");
+ } else {
+
+ // add agent to catalina.sh
+ String catalinaShOriginal = readAll(catalinaSh);
+
+ // write backup
+ {
+ File backupFile = new File(binDir, "catalina.sh.original");
+ if (!backupFile.exists()) {
+ FileOutputStream fileOutputStream = new
FileOutputStream(backupFile);
+ try {
+ writeAll(new
ByteArrayInputStream(catalinaShOriginal.getBytes()), fileOutputStream);
+ } finally {
+ close(fileOutputStream);
+ }
+ }
+ }
+
+// out.println();
+// out.println("====== ORIGINAL CATALINA SH =====");
+// out.println(catalinaShOriginal);
+
+ if (catalinaShOriginal.contains("Add OpenEJB javaagent")) {
+ out.println("OpenEJB javaagent already declared in Tomcat
catalina.sh file.");
+ } else {
+ String newCatalinaSh = catalinaShOriginal.replace("# -----
Execute The Requested Command",
+ "# Add OpenEJB javaagent\n" +
+ "if [ -r \"$CATALINA_BASE\"/" +
openejbJavaagentPath + " ]; then\n" +
+ " JAVA_OPTS=\"\"-javaagent:$CATALINA_BASE/" +
openejbJavaagentPath + "\" $JAVA_OPTS\"\n" +
+ "fi\n" +
+ "\n" +
+ "# ----- Execute The Requested Command");
+// out.println();
+// out.println("====== NEW CATALINA SH =====");
+// out.println(newServerXml);
+
+ // overwrite server.xml
+ FileOutputStream fileOutputStream = new
FileOutputStream(catalinaSh);
+ try {
+ writeAll(new
ByteArrayInputStream(newCatalinaSh.getBytes()), fileOutputStream);
+ } finally {
+ close(fileOutputStream);
+ }
+
+ out.println("Added OpenEJB javaagent to Tomcat catalina.sh
file.");
+ }
+ }
+
+ } catch (Throwable e) {
+ PrintStream printStream = new PrintStream(out, true);
+ e.printStackTrace(printStream);
+ printStream.flush();
+ }
+ }
+
+ private String replace(String inputText, String begin, String newBegin,
String end, String newEnd) throws IOException {
+ BeginEndTokenHandler tokenHandler = new BeginEndTokenHandler(newBegin,
newEnd);
+
+ ByteArrayInputStream in = new
ByteArrayInputStream(inputText.getBytes());
+
+ InputStream replacementStream = new
DelimitedTokenReplacementInputStream(in, begin, end, tokenHandler, true);
+ String newServerXml = readAll(replacementStream);
+ close(replacementStream);
+ return newServerXml;
+ }
+
+ private void copyFile(File source, File destination) throws IOException {
+ File destinationDir = destination.getParentFile();
+ if (!destinationDir.exists() && !destinationDir.mkdirs()) {
+ throw new java.io.IOException("Cannot create directory : " +
destinationDir);
+ }
+
+ InputStream in = null;
+ OutputStream out = null;
+ try {
+ in = new FileInputStream(source);
+ out = new FileOutputStream(destination);
+ writeAll(in, out);
+ } finally {
+ close(in);
+ close(out);
+ }
+ }
+
+ private void writeAll(InputStream in, OutputStream out) throws IOException
{
+ byte[] buffer = new byte[4096];
+ int count;
+ while ((count = in.read(buffer)) > 0) {
+ out.write(buffer, 0, count);
+ }
+ out.flush();
+ }
+
+ private String readAll(File file) throws IOException {
+ FileInputStream in = new FileInputStream(file);
+ try {
+ String text = readAll(in);
+ return text;
+ } finally {
+ close(in);
+ }
+ }
+
+ private String readAll(InputStream in) throws IOException {
+ // SwizzleStream block read methods are broken so read byte at a time
+ StringBuilder sb = new StringBuilder();
+ int i = in.read();
+ while (i != -1) {
+ sb.append((char) i);
+ i = in.read();
+ }
+ return sb.toString();
+ }
+
+ private String getTomcatVersion() {
+ String tomcatVersion = null;
+ try {
+ Properties properties = new Properties();
+
properties.load(getClass().getClassLoader().getResourceAsStream("org/apache/catalina/util/ServerInfo.properties"));
+ tomcatVersion = properties.getProperty("server.number");
+ } catch (IOException e) {
+ }
+ return tomcatVersion;
+ }
+
+ private Object invokeStaticNoArgMethod(String className, String
propertyName) {
+ try {
+ Class<?> clazz = loadClass(className, getClass().getClassLoader());
+ Method method = clazz.getMethod(propertyName);
+ Object result = method.invoke(null, (Object[]) null);
+ return result;
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ private Class<?> loadClass(String className, ClassLoader classLoader)
throws ClassNotFoundException {
+ LinkedList<ClassLoader> loaders = new LinkedList<ClassLoader>();
+ for (ClassLoader loader = classLoader; loader != null; loader =
loader.getParent()) {
+ loaders.addFirst(loader);
+ }
+ for (ClassLoader loader : loaders) {
+ try {
+ Class<?> clazz = Class.forName(className, true, loader);
+ return clazz;
+ } catch (ClassNotFoundException e) {
+ }
+ }
+ return null;
+ }
+
+ private void close(Closeable thing) {
+ if (thing != null) {
+ try {
+ thing.close();
+ } catch (Exception ignored) {
+ }
+ }
+ }
+
+ private static class BeginEndTokenHandler extends StringTokenHandler {
+ private final String begin;
+ private final String end;
+
+ public BeginEndTokenHandler(String begin, String end) {
+ this.begin = begin;
+ this.end = end;
+ }
+
+ public String handleToken(String token) throws IOException {
+ String result = begin + token + end;
+ return result;
+ }
+ }
+}
Modified:
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/resources/WEB-INF/web.xml
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/resources/WEB-INF/web.xml?rev=573752&r1=573751&r2=573752&view=diff
==============================================================================
---
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/resources/WEB-INF/web.xml
(original)
+++
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/resources/WEB-INF/web.xml
Fri Sep 7 16:19:41 2007
@@ -25,21 +25,23 @@
<display-name>OpenEJB Loader Application</display-name>
<servlet>
- <servlet-name>loader</servlet-name>
- <servlet-class>org.apache.openejb.loader.LoaderServlet</servlet-class>
-
- <init-param>
- <param-name>openejb.loader</param-name>
- <param-value>tomcat-system</param-value>
- </init-param>
-
- <load-on-startup>0</load-on-startup>
+ <servlet-name>ServerServlet</servlet-name>
+ <servlet-class>org.apache.openejb.tomcat.ServerServlet</servlet-class>
+ </servlet>
+ <servlet>
+ <servlet-name>InstallerServlet</servlet-name>
+
<servlet-class>org.apache.openejb.tomcat.installer.InstallerServlet</servlet-class>
</servlet>
<servlet-mapping>
- <servlet-name>loader</servlet-name>
- <url-pattern>/*</url-pattern>
+ <servlet-name>ServerServlet</servlet-name>
+ <url-pattern>/ejb/*</url-pattern>
+ </servlet-mapping>
+
+ <servlet-mapping>
+ <servlet-name>InstallerServlet</servlet-name>
+ <url-pattern>/installer</url-pattern>
</servlet-mapping>
</web-app>
Added:
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/resources/index.html
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/resources/index.html?rev=573752&view=auto
==============================================================================
---
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/resources/index.html
(added)
+++
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/resources/index.html
Fri Sep 7 16:19:41 2007
@@ -0,0 +1,5 @@
+<html>
+<body>
+<h1>Welcome to OpenEJB</h1>
+</body>
+</html>
\ No newline at end of file
Modified:
openejb/trunk/openejb3/container/openejb-loader/src/main/java/org/apache/openejb/loader/OpenEJBListener.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-loader/src/main/java/org/apache/openejb/loader/OpenEJBListener.java?rev=573752&r1=573751&r2=573752&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-loader/src/main/java/org/apache/openejb/loader/OpenEJBListener.java
(original)
+++
openejb/trunk/openejb3/container/openejb-loader/src/main/java/org/apache/openejb/loader/OpenEJBListener.java
Fri Sep 7 16:19:41 2007
@@ -29,6 +29,12 @@
import java.util.Properties;
public class OpenEJBListener implements LifecycleListener {
+ static private boolean installed;
+
+
+ public static boolean isInstalled() {
+ return installed;
+ }
public OpenEJBListener() {
}
@@ -36,6 +42,7 @@
public void lifecycleEvent(LifecycleEvent event) {
Object source = event.getSource();
if (source instanceof StandardServer) {
+ installed = true;
StandardServer standardServer = (StandardServer) source;
init(standardServer);
}
Modified:
openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/TomcatRemoteTestServer.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/TomcatRemoteTestServer.java?rev=573752&r1=573751&r2=573752&view=diff
==============================================================================
---
openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/TomcatRemoteTestServer.java
(original)
+++
openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/TomcatRemoteTestServer.java
Fri Sep 7 16:19:41 2007
@@ -16,11 +16,6 @@
*/
package org.apache.openejb.test;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
import java.net.URL;
import java.util.Properties;
@@ -29,28 +24,31 @@
*/
public class TomcatRemoteTestServer implements TestServer {
private Properties properties;
- private String servletUrl;
- private File tomcatHome;
-
- private boolean serverHasAlreadyBeenStarted = true;
+ private String serverUri;
+// private File tomcatHome;
+//
+// private boolean serverHasAlreadyBeenStarted = true;
public void init(Properties props) {
properties = props;
- servletUrl = System.getProperty("remote.serlvet.url",
"http://127.0.0.1:8080/openejb/remote");
+ serverUri = System.getProperty("openejb.server.uri",
"http://127.0.0.1:8080/openejb/ejb");
+ if (!serverUri.startsWith("http:")) {
+ throw new IllegalStateException("TomcatRemoteTestServer requires
that openejb.server.uri property starts with http:");
+ }
// props.put("test.server.class",
TomcatRemoteTestServer.class.getName());
props.put("java.naming.factory.initial",
"org.apache.openejb.client.RemoteInitialContextFactory");
- props.put("java.naming.provider.url", servletUrl);
-
- String homeProperty = System.getProperty("tomcat.home");
- if (homeProperty == null) {
- throw new IllegalStateException("The system property tomcat.home
must be defined.");
- }
+ props.put("java.naming.provider.url", serverUri);
- tomcatHome = new File(homeProperty);
-
- if (!tomcatHome.exists()) {
- throw new IllegalStateException("The tomcat.home directory does
not exist: " + tomcatHome.getAbsolutePath());
- }
+// String homeProperty = System.getProperty("tomcat.home");
+// if (homeProperty == null) {
+// throw new IllegalStateException("The system property tomcat.home
must be defined.");
+// }
+
+// tomcatHome = new File(homeProperty);
+//
+// if (!tomcatHome.exists()) {
+// throw new IllegalStateException("The tomcat.home directory does
not exist: " + tomcatHome.getAbsolutePath());
+// }
}
public void start() {
@@ -58,21 +56,21 @@
return;
}
- try {
- System.out.println("[] START TOMCAT SERVER");
- System.out.println("CATALINA_HOME = " +
tomcatHome.getAbsolutePath());
-
- String systemInfo = "Java " + System.getProperty("java.version") +
"; " + System.getProperty("os.name") + "/" + System.getProperty("os.version");
- System.out.println("SYSTEM_INFO = " + systemInfo);
-
- serverHasAlreadyBeenStarted = false;
-
-
- execBootstrap("start");
- } catch (Exception e) {
- e.printStackTrace();
- throw new RuntimeException("Cannot start the server: " +
e.getClass().getName() + ": " + e.getMessage(), e);
- }
+// try {
+// System.out.println("[] START TOMCAT SERVER");
+// System.out.println("CATALINA_HOME = " +
tomcatHome.getAbsolutePath());
+//
+// String systemInfo = "Java " + System.getProperty("java.version")
+ "; " + System.getProperty("os.name") + "/" + System.getProperty("os.version");
+// System.out.println("SYSTEM_INFO = " + systemInfo);
+//
+// serverHasAlreadyBeenStarted = false;
+//
+//
+// execBootstrap("start");
+// } catch (Exception e) {
+// e.printStackTrace();
+// throw new RuntimeException("Cannot start the server: " +
e.getClass().getName() + ": " + e.getMessage(), e);
+// }
connect(10);
// Wait a wee bit longer for good measure
try {
@@ -83,60 +81,60 @@
}
public void stop() {
- if (!serverHasAlreadyBeenStarted) {
- try {
- System.out.println("[] STOP TOMCAT SERVER");
- execBootstrap("stop");
-
- disconnect(10);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
-
- private void execBootstrap(String command) throws IOException {
- String[] bootstrapCommand = getBootstrapCommand(tomcatHome, command);
- Process server = Runtime.getRuntime().exec(bootstrapCommand);
-
- FilePathBuilder tomcat = new FilePathBuilder(tomcatHome);
- OutputStream catalinaOut = new
FileOutputStream(tomcat.l("logs").f("catalina.out"));
-
- // Pipe the processes STDOUT to ours
- InputStream out = server.getInputStream();
- Thread serverOut = new Thread(new Pipe(out, catalinaOut));
-
- serverOut.setDaemon(true);
- serverOut.start();
-
- // Pipe the processes STDERR to ours
- InputStream err = server.getErrorStream();
- Thread serverErr = new Thread(new Pipe(err, catalinaOut));
-
- serverErr.setDaemon(true);
- serverErr.start();
- }
+// if (!serverHasAlreadyBeenStarted) {
+// try {
+// System.out.println("[] STOP TOMCAT SERVER");
+// execBootstrap("stop");
+//
+// disconnect(10);
+// } catch (Exception e) {
+// e.printStackTrace();
+// }
+// }
+ }
+
+// private void execBootstrap(String command) throws IOException {
+// String[] bootstrapCommand = getBootstrapCommand(tomcatHome, command);
+// Process server = Runtime.getRuntime().exec(bootstrapCommand);
+//
+// FilePathBuilder tomcat = new FilePathBuilder(tomcatHome);
+// OutputStream catalinaOut = new
FileOutputStream(tomcat.l("logs").f("catalina.out"));
+//
+// // Pipe the processes STDOUT to ours
+// InputStream out = server.getInputStream();
+// Thread serverOut = new Thread(new Pipe(out, catalinaOut));
+//
+// serverOut.setDaemon(true);
+// serverOut.start();
+//
+// // Pipe the processes STDERR to ours
+// InputStream err = server.getErrorStream();
+// Thread serverErr = new Thread(new Pipe(err, catalinaOut));
+//
+// serverErr.setDaemon(true);
+// serverErr.start();
+// }
public Properties getContextEnvironment() {
return (Properties) properties.clone();
}
- private boolean disconnect(int tries) {
- if (connect()) {
- tries--;
- if (tries < 1) {
- return false;
- } else {
- try {
- Thread.sleep(5000);
- } catch (InterruptedException e) {
- }
- disconnect(tries);
- }
- }
-
- return true;
- }
+// private boolean disconnect(int tries) {
+// if (connect()) {
+// tries--;
+// if (tries < 1) {
+// return false;
+// } else {
+// try {
+// Thread.sleep(5000);
+// } catch (InterruptedException e) {
+// }
+// disconnect(tries);
+// }
+// }
+//
+// return true;
+// }
private boolean connect() {
return connect(1);
@@ -145,7 +143,7 @@
private boolean connect(int tries) {
//System.out.println("CONNECT "+ tries);
try {
- URL url = new URL(servletUrl);
+ URL url = new URL(serverUri);
url.openStream();
} catch (Exception e) {
tries--;
@@ -165,109 +163,109 @@
return true;
}
- private String[] getBootstrapCommand(File tomcatHome, String command) {
- FilePathBuilder tomcat = new FilePathBuilder(tomcatHome);
- FilePathBuilder tomcatBin = tomcat.l("bin");
-
- FilePathBuilder javaHome = new
FilePathBuilder(System.getProperty("java.home"));
- String path = tomcatHome.getAbsolutePath();
-
- String s = File.pathSeparator;
-
- if (path.indexOf("tomcat-6") != -1) {
- return new String[]{javaHome.l("bin").s("java"),
-
"-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager",
- "-Djava.util.logging.config.file=" +
tomcat.l("conf").l("logging.properties"),
- "-Djava.endorsed.dirs=" + tomcat.l("common").l("endorsed"),
- "-classpath", tomcatBin.l("bootstrap.jar") + s +
tomcatBin.l("commons-logging-api.jar"),
- "-Dcatalina.base=" + tomcat,
- "-Dcatalina.home=" + tomcat,
- "-Djava.io.tmpdir=" + tomcat.l("temp"),
- "org.apache.catalina.startup.Bootstrap", command};
- } else if (path.indexOf("tomcat-5.5") != -1) {
- return new String[]{javaHome.l("bin").s("java"),
-
"-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager",
- "-Djava.util.logging.config.file=" +
tomcat.l("conf").l("logging.properties"),
- "-Djava.endorsed.dirs=" + tomcat.l("common").l("endorsed"),
- "-classpath", tomcatBin.l("bootstrap.jar") + s +
tomcatBin.l("commons-logging-api.jar"),
- "-Dcatalina.base=" + tomcat,
- "-Dcatalina.home=" + tomcat,
- "-Djava.io.tmpdir=" + tomcat.l("temp"),
- "org.apache.catalina.startup.Bootstrap", command};
- } else if (path.indexOf("tomcat-5.0") != -1) {
- return new String[]{javaHome.l("bin").s("java"),
- "-Djava.endorsed.dirs=" + tomcat.l("common").l("endorsed"),
- "-classpath", tomcatBin.l("bootstrap.jar") + s +
tomcatBin.l("commons-logging-api.jar") + s + javaHome.l("lib").s("tools.jar"),
- "-Dcatalina.base=" + tomcat,
- "-Dcatalina.home=" + tomcat,
- "-Djava.io.tmpdir=" + tomcat.l("temp"),
- "org.apache.catalina.startup.Bootstrap", command};
- } else if (path.indexOf("tomcat-4.1") != -1) {
- return new String[]{javaHome.l("bin").s("java"),
- "-Djava.endorsed.dirs=" + tomcat.l("common").l("endorsed"),
- "-classpath", tomcatBin.s("bootstrap.jar") + s +
javaHome.l("lib").s("tools.jar"),
- "-Dcatalina.base=" + tomcat,
- "-Dcatalina.home=" + tomcat,
- "-Djava.io.tmpdir=" + tomcat.l("temp"),
- "org.apache.catalina.startup.Bootstrap", command};
- } else {
- throw new IllegalArgumentException("Unsupported Tomcat version: "
+ tomcatHome.getName());
- }
- }
-
- public static class FilePathBuilder {
- private final File file;
-
- public FilePathBuilder(File file) {
- this.file = file;
- }
-
- public FilePathBuilder(String filePath) {
- this.file = new File(filePath);
- }
-
- public FilePathBuilder l(String name) {
- return new FilePathBuilder(f(name));
- }
-
- public File f(String name) {
- return new File(file, name);
- }
-
- public String s(String name) {
- return new File(file, name).getAbsolutePath();
- }
-
- public String toString() {
- return file.getAbsolutePath();
- }
- }
-
- private static final class Pipe implements Runnable {
- private final InputStream is;
- private final OutputStream out;
-
- private Pipe(InputStream is, OutputStream out) {
- super();
- this.is = is;
- this.out = out;
- }
-
- public void run() {
- try {
- int i = is.read();
- out.write(i);
-
- while (i != -1) {
- i = is.read();
- out.write(i);
- }
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
+// private String[] getBootstrapCommand(File tomcatHome, String command) {
+// FilePathBuilder tomcat = new FilePathBuilder(tomcatHome);
+// FilePathBuilder tomcatBin = tomcat.l("bin");
+//
+// FilePathBuilder javaHome = new
FilePathBuilder(System.getProperty("java.home"));
+// String path = tomcatHome.getAbsolutePath();
+//
+// String s = File.pathSeparator;
+//
+// if (path.indexOf("tomcat-6") != -1) {
+// return new String[]{javaHome.l("bin").s("java"),
+//
"-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager",
+// "-Djava.util.logging.config.file=" +
tomcat.l("conf").l("logging.properties"),
+// "-Djava.endorsed.dirs=" +
tomcat.l("common").l("endorsed"),
+// "-classpath", tomcatBin.l("bootstrap.jar") + s +
tomcatBin.l("commons-logging-api.jar"),
+// "-Dcatalina.base=" + tomcat,
+// "-Dcatalina.home=" + tomcat,
+// "-Djava.io.tmpdir=" + tomcat.l("temp"),
+// "org.apache.catalina.startup.Bootstrap", command};
+// } else if (path.indexOf("tomcat-5.5") != -1) {
+// return new String[]{javaHome.l("bin").s("java"),
+//
"-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager",
+// "-Djava.util.logging.config.file=" +
tomcat.l("conf").l("logging.properties"),
+// "-Djava.endorsed.dirs=" +
tomcat.l("common").l("endorsed"),
+// "-classpath", tomcatBin.l("bootstrap.jar") + s +
tomcatBin.l("commons-logging-api.jar"),
+// "-Dcatalina.base=" + tomcat,
+// "-Dcatalina.home=" + tomcat,
+// "-Djava.io.tmpdir=" + tomcat.l("temp"),
+// "org.apache.catalina.startup.Bootstrap", command};
+// } else if (path.indexOf("tomcat-5.0") != -1) {
+// return new String[]{javaHome.l("bin").s("java"),
+// "-Djava.endorsed.dirs=" +
tomcat.l("common").l("endorsed"),
+// "-classpath", tomcatBin.l("bootstrap.jar") + s +
tomcatBin.l("commons-logging-api.jar") + s + javaHome.l("lib").s("tools.jar"),
+// "-Dcatalina.base=" + tomcat,
+// "-Dcatalina.home=" + tomcat,
+// "-Djava.io.tmpdir=" + tomcat.l("temp"),
+// "org.apache.catalina.startup.Bootstrap", command};
+// } else if (path.indexOf("tomcat-4.1") != -1) {
+// return new String[]{javaHome.l("bin").s("java"),
+// "-Djava.endorsed.dirs=" +
tomcat.l("common").l("endorsed"),
+// "-classpath", tomcatBin.s("bootstrap.jar") + s +
javaHome.l("lib").s("tools.jar"),
+// "-Dcatalina.base=" + tomcat,
+// "-Dcatalina.home=" + tomcat,
+// "-Djava.io.tmpdir=" + tomcat.l("temp"),
+// "org.apache.catalina.startup.Bootstrap", command};
+// } else {
+// throw new IllegalArgumentException("Unsupported Tomcat version:
" + tomcatHome.getName());
+// }
+// }
+//
+// public static class FilePathBuilder {
+// private final File file;
+//
+// public FilePathBuilder(File file) {
+// this.file = file;
+// }
+//
+// public FilePathBuilder(String filePath) {
+// this.file = new File(filePath);
+// }
+//
+// public FilePathBuilder l(String name) {
+// return new FilePathBuilder(f(name));
+// }
+//
+// public File f(String name) {
+// return new File(file, name);
+// }
+//
+// public String s(String name) {
+// return new File(file, name).getAbsolutePath();
+// }
+//
+// public String toString() {
+// return file.getAbsolutePath();
+// }
+// }
+//
+// private static final class Pipe implements Runnable {
+// private final InputStream is;
+// private final OutputStream out;
+//
+// private Pipe(InputStream is, OutputStream out) {
+// super();
+// this.is = is;
+// this.out = out;
+// }
+//
+// public void run() {
+// try {
+// int i = is.read();
+// out.write(i);
+//
+// while (i != -1) {
+// i = is.read();
+// out.write(i);
+// }
+//
+// } catch (Exception e) {
+// e.printStackTrace();
+// }
+// }
+// }
/**