You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by jl...@apache.org on 2012/11/08 00:27:33 UTC

svn commit: r1406863 - in /openejb/trunk/openejb: arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/ arquillian/arquillian-tomee-webapp-remote/src/test/java/org/apache/openejb/arquillian/ arquillian/arquillian-t...

Author: jlmonteiro
Date: Wed Nov  7 23:27:32 2012
New Revision: 1406863

URL: http://svn.apache.org/viewvc?rev=1406863&view=rev
Log:
TOMEE-561 Rethink remote webapp adpater to make it similar to what users do when installing using the online installer servlet.

Added:
    openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/test/java/org/apache/openejb/arquillian/TomEEContainerWithInstallerServletTest.java
Modified:
    openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappConfiguration.java
    openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java
    openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/test/java/org/apache/openejb/arquillian/session/SessionScopeTest.java
    openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/test/resources/arquillian.xml
    openejb/trunk/openejb/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Installer.java
    openejb/trunk/openejb/tomee/tomee-common/src/main/java/org/apache/tomee/installer/InstallerServlet.java

Modified: openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappConfiguration.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappConfiguration.java?rev=1406863&r1=1406862&r2=1406863&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappConfiguration.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappConfiguration.java Wed Nov  7 23:27:32 2012
@@ -38,6 +38,7 @@ public class TomEEWebappConfiguration ex
     private String version = "LATEST";
     private String type = "war";
     private boolean removeUnusedWebapps = true;
+    private boolean useInstallerServlet = false;
     private int ajpPort = 8009;
 
     public String getGroupId() {
@@ -72,6 +73,14 @@ public class TomEEWebappConfiguration ex
         this.type = type;
     }
 
+    public boolean isUseInstallerServlet() {
+        return useInstallerServlet;
+    }
+
+    public void setUseInstallerServlet(boolean useInstallerServlet) {
+        this.useInstallerServlet = useInstallerServlet;
+    }
+
     public String getArtifactName() {
 
         return String.format("%s:%s:%s:%s", getGroupId(), getArtifactId(), getVersion(), getType());

Modified: openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java?rev=1406863&r1=1406862&r2=1406863&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java Wed Nov  7 23:27:32 2012
@@ -22,6 +22,7 @@ import org.apache.openejb.arquillian.com
 import org.apache.openejb.arquillian.common.TomEEContainer;
 import org.apache.openejb.arquillian.common.Zips;
 import org.apache.openejb.config.RemoteServer;
+import org.apache.openejb.util.Base64;
 import org.apache.tomee.installer.Installer;
 import org.apache.tomee.installer.Paths;
 import org.jboss.arquillian.container.spi.client.container.LifecycleException;
@@ -30,6 +31,7 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
+import java.net.URLConnection;
 import java.util.Map;
 import java.util.TreeMap;
 import java.util.logging.Level;
@@ -45,6 +47,7 @@ public class TomEEWebappContainer extend
     private RemoteServer container;
     private boolean shutdown = false;
     private File openejbHome;
+    private boolean wereOpenejbHomeSet = true;
 
     @Override
     public void start() throws LifecycleException {
@@ -76,6 +79,7 @@ public class TomEEWebappContainer extend
             Files.writable(workingDirectory);
 
             openejbHome = Setup.findHome(workingDirectory);
+            Installer installer = null;
 
             if (openejbHome == null) {
 
@@ -96,8 +100,13 @@ public class TomEEWebappContainer extend
                 System.setProperty("openejb.deploymentId.format", "{appId}/{ejbJarId}/{ejbName}");
 
                 Paths paths = new Paths(webapp);
-                Installer installer = new Installer(paths, true);
-                installer.installAll();
+                installer = new Installer(paths, true);
+                if (!configuration.isUseInstallerServlet()) {
+                    installer.installAll();
+
+                }
+
+                wereOpenejbHomeSet = false;
             }
 
             Files.assertDir(openejbHome);
@@ -127,6 +136,32 @@ public class TomEEWebappContainer extend
 
             Setup.installArquillianBeanDiscoverer(openejbHome);
 
+            if (!wereOpenejbHomeSet && configuration.isUseInstallerServlet()) {
+                // instead of calling the Installer, let's just do like users do
+                // call the servlet installer instead
+                StringBuilder baseUrl = new StringBuilder("http://")
+                        .append(configuration.getHost())
+                        .append(":")
+                        .append(configuration.getHttpPort())
+                        .append("/tomee/installer?action=install&auto=true");
+
+                installer.addTomEEAdminConfInTomcatUsers(true);
+
+                RemoteServer tmpContainer = new RemoteServer();
+                tmpContainer.start();
+
+                URL url = new URL(baseUrl.toString());
+                URLConnection uc = url.openConnection();
+                // dG9tZWU6dG9tZWU= --> Base64 of tomee:tomee
+                String authorizationString = "Basic dG9tZWU6dG9tZWU=";
+                uc.setRequestProperty ("Authorization", authorizationString);
+                InputStream is = uc.getInputStream();
+                org.apache.openejb.loader.IO.slurp(is);
+                is.close();
+
+                tmpContainer.stop();
+            }
+
             container = new RemoteServer();
             container.start();
         } catch (Exception e) {

Added: openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/test/java/org/apache/openejb/arquillian/TomEEContainerWithInstallerServletTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/test/java/org/apache/openejb/arquillian/TomEEContainerWithInstallerServletTest.java?rev=1406863&view=auto
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/test/java/org/apache/openejb/arquillian/TomEEContainerWithInstallerServletTest.java (added)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/test/java/org/apache/openejb/arquillian/TomEEContainerWithInstallerServletTest.java Wed Nov  7 23:27:32 2012
@@ -0,0 +1,62 @@
+/**
+ * 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.arquillian;
+
+import junit.framework.Assert;
+import org.apache.openejb.loader.IO;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.container.test.api.RunAsClient;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.arquillian.test.api.ArquillianResource;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.StringAsset;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.jboss.shrinkwrap.descriptor.api.Descriptors;
+import org.jboss.shrinkwrap.descriptor.api.webapp30.WebAppDescriptor;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.ejb.EJB;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.net.URL;
+
+@RunWith(Arquillian.class)
+@RunAsClient
+public class TomEEContainerWithInstallerServletTest {
+
+    @Deployment
+    public static WebArchive createDeployment() {
+        return ShrinkWrap.create(WebArchive.class, "test.war")
+        		.addClass(TestServlet.class).addClass(TestEjb.class).addClass(TomEEContainerWithInstallerServletTest.class)
+                .setWebXML(new StringAsset(
+                		Descriptors.create(WebAppDescriptor.class)
+                			.version("3.0")
+                                .createServlet().servletName("servlet-ejb").servletClass(TestServlet.class.getName()).up()
+                                .createServletMapping().servletName("servlet-ejb").urlPattern("/ejb").up()
+                                .exportAsString()));
+    }
+
+    @ArquillianResource private URL url;
+
+    @Test
+    public void testShouldBeAbleToAccessServletAndEjb() throws Exception {
+        URL ejbServletUrl = new URL(url.toExternalForm() + "ejb");
+        Assert.assertTrue(IO.slurp(ejbServletUrl).contains("Hello, OpenEJB"));
+    }
+
+}

Modified: openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/test/java/org/apache/openejb/arquillian/session/SessionScopeTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/test/java/org/apache/openejb/arquillian/session/SessionScopeTest.java?rev=1406863&r1=1406862&r2=1406863&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/test/java/org/apache/openejb/arquillian/session/SessionScopeTest.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/test/java/org/apache/openejb/arquillian/session/SessionScopeTest.java Wed Nov  7 23:27:32 2012
@@ -53,7 +53,6 @@ public class SessionScopeTest {
     }
 
     @Test
-    @Ignore
     public void testShouldBeAbleToAccessServletAndEjb() throws Exception {
         String[] sessionResult = new String[2];
         for (int i = 0; i < sessionResult.length; i++) {

Modified: openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/test/resources/arquillian.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/test/resources/arquillian.xml?rev=1406863&r1=1406862&r2=1406863&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/test/resources/arquillian.xml (original)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/test/resources/arquillian.xml Wed Nov  7 23:27:32 2012
@@ -22,19 +22,20 @@
       http://jboss.org/schema/arquillian
       http://jboss.org/schema/arquillian/arquillian_1_0.xsd">
 
-    <container qualifier="tomee"
-               default="true">
-        <configuration>
-            <property name="httpPort">-1</property>
-            <property name="ajpPort">-1</property>
-            <property name="stopPort">-1</property>
-            <property name="tomcatVersion">7.0.30</property>
-            <property name="version">${tomee.version}</property>
-            <property name="dir">target/apache-tomee-remote</property>
-            <property name="appWorkingDir">target/arquillian-test-working-dir</property>
-            <property name="properties">
-              openejb.classloader.forced-load=org.apache.openejb
-            </property>
-        </configuration>
-    </container>
+  <container qualifier="tomee"
+             default="true">
+    <configuration>
+      <property name="httpPort">-1</property>
+      <property name="ajpPort">-1</property>
+      <property name="stopPort">-1</property>
+      <property name="tomcatVersion">7.0.30</property>
+      <property name="useInstallerServlet">true</property>
+      <property name="version">${tomee.version}</property>
+      <property name="dir">target/apache-tomee-remote</property>
+      <property name="appWorkingDir">target/arquillian-test-working-dir</property>
+      <property name="properties">
+        openejb.classloader.forced-load=org.apache.openejb
+      </property>
+    </configuration>
+  </container>
 </arquillian>

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=1406863&r1=1406862&r2=1406863&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 Wed Nov  7 23:27:32 2012
@@ -109,6 +109,10 @@ public class Installer {
     }
 
     public void addTomEEAdminConfInTomcatUsers() {
+        addTomEEAdminConfInTomcatUsers(false);
+    }
+
+    public void addTomEEAdminConfInTomcatUsers(boolean securityActivated) {
         // read server.xml
         String tomcatUsersXml = Installers.readAll(paths.getTomcatUsersXml(), alerts);
 
@@ -128,12 +132,25 @@ public class Installer {
         }
 
         // add our listener
-        final String newTomcatUsers = tomcatUsersXml.replace("</tomcat-users>",
-                "  <!-- Activate those lines to get access to TomEE GUI\n" +
+        final String roleUserTags =
                 "  <role rolename=\"tomee-admin\" />\n" +
-                "  <user username=\"tomee\" password=\"tomee\" roles=\"tomee-admin,manager-gui\" />\n" +
+                "  <user username=\"tomee\" password=\"tomee\" roles=\"tomee-admin,manager-gui\" />\n";
+        String content = null;
+        if (!securityActivated) {
+            content =
+                "  <!-- Activate those lines to get access to TomEE GUI -->\n" +
+                "  <!--\n" +
+                roleUserTags +
                 "  -->\n" +
-                "</tomcat-users>\n");
+                "</tomcat-users>\n";
+        } else {
+            content =
+                "  <!-- Activate those lines to get access to TomEE GUI\n -->" +
+                roleUserTags +
+                "</tomcat-users>\n";
+
+        }
+        final String newTomcatUsers = tomcatUsersXml.replace("</tomcat-users>", content);
 
         // overwrite server.xml
         if (Installers.writeAll(paths.getTomcatUsersXml(), newTomcatUsers, alerts)) {
@@ -313,8 +330,8 @@ public class Installer {
         if (annotationApi.exists()) {
             if (!annotationApi.delete()) {
                 annotationApi.deleteOnExit();
-                System.err.println("Please restart the server or delete manually " + name);
             }
+            alerts.addInfo("Please restart the server or delete manually " + name);
         }
     }
 

Modified: openejb/trunk/openejb/tomee/tomee-common/src/main/java/org/apache/tomee/installer/InstallerServlet.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-common/src/main/java/org/apache/tomee/installer/InstallerServlet.java?rev=1406863&r1=1406862&r2=1406863&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-common/src/main/java/org/apache/tomee/installer/InstallerServlet.java (original)
+++ openejb/trunk/openejb/tomee/tomee-common/src/main/java/org/apache/tomee/installer/InstallerServlet.java Wed Nov  7 23:27:32 2012
@@ -28,6 +28,7 @@ import javax.servlet.http.HttpServletReq
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.File;
+import java.io.Writer;
 
 /**
  * Installs OpenEJB into Tomcat.
@@ -72,9 +73,17 @@ public class InstallerServlet extends Ht
                 paths.reset();
                 installer.reset();
 
-                paths.setCatalinaHomeDir(req.getParameter("catalinaHome"));
-                paths.setCatalinaBaseDir(req.getParameter("catalinaBase"));
-                paths.setServerXmlFile(req.getParameter("serverXml"));
+                if ("true".equalsIgnoreCase(req.getParameter("auto"))) {
+                    paths.setCatalinaHomeDir(System.getProperty("catalina.home"));
+                    paths.setCatalinaBaseDir(System.getProperty("catalina.base"));
+                    paths.setServerXmlFile(System.getProperty("catalina.base") + "/conf/server.xml");
+
+                } else {
+                    paths.setCatalinaHomeDir(req.getParameter("catalinaHome"));
+                    paths.setCatalinaBaseDir(req.getParameter("catalinaBase"));
+                    paths.setServerXmlFile(req.getParameter("serverXml"));
+
+                }
 
                 if (paths.verify()) {
                     installer.installAll();
@@ -88,7 +97,22 @@ public class InstallerServlet extends Ht
             req.setAttribute("installer", installer);
             req.setAttribute("paths", paths);
             RequestDispatcher rd = servletConfig.getServletContext().getRequestDispatcher("/installer-view.jsp");
-            rd.forward(req,res);
+            try {
+                rd.forward(req,res);
+
+            } catch (Exception e) {
+                res.setContentType("text/plain");
+                Writer writer = res.getWriter();
+                for (String s : installer.getAlerts().getErrors()) {
+                    writer.write("[ERROR] " + s);
+                }
+                for (String s : installer.getAlerts().getWarnings()) {
+                    writer.write("[WARN] " + s);
+                }
+                for (String s : installer.getAlerts().getInfos()) {
+                    writer.write("[INFO] " + s);
+                }
+            }
         }
     }