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);
+ }
+ }
}
}