You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by da...@apache.org on 2008/09/11 05:52:03 UTC

svn commit: r694102 - in /openejb/trunk/openejb3: assembly/openejb-itests-standalone-client/src/main/assembly/ assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/ assembly/test/ examples/webapps/ejb-example...

Author: dain
Date: Wed Sep 10 20:52:02 2008
New Revision: 694102

URL: http://svn.apache.org/viewvc?rev=694102&view=rev
Log:
Fixed broken isCallerInRole when using Tomcat JAASRealm with the TomcatSecurityService
Added basic security and runas tests to Tomcat itests

Added:
    openejb/trunk/openejb3/examples/webapps/ejb-examples/build.xml
    openejb/trunk/openejb3/examples/webapps/ejb-examples/src/main/webapp/WEB-INF/tomcat-users.xml
    openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/servlet/RunAsServletTests.java
    openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/servlet/SecureServletTests.java
      - copied, changed from r689690, openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/servlet/EjbServletTests.java
    openejb/trunk/openejb3/itests/openejb-itests-servlets/src/main/java/org/apache/openejb/test/servlet/RunAsServlet.java
    openejb/trunk/openejb3/itests/openejb-itests-servlets/src/main/java/org/apache/openejb/test/servlet/SecureEJB.java
      - copied, changed from r689690, openejb/trunk/openejb3/examples/webapps/ejb-examples/src/main/java/org/superbiz/servlet/SecureEJB.java
    openejb/trunk/openejb3/itests/openejb-itests-servlets/src/main/java/org/apache/openejb/test/servlet/SecureEJBLocal.java
      - copied, changed from r689690, openejb/trunk/openejb3/examples/webapps/ejb-examples/src/main/java/org/superbiz/servlet/SecureEJBLocal.java
    openejb/trunk/openejb3/itests/openejb-itests-servlets/src/main/java/org/apache/openejb/test/servlet/SecureServlet.java
      - copied, changed from r689690, openejb/trunk/openejb3/examples/webapps/ejb-examples/src/main/java/org/superbiz/servlet/SecureServlet.java
    openejb/trunk/openejb3/itests/openejb-itests-web/src/main/webapp/META-INF/
    openejb/trunk/openejb3/itests/openejb-itests-web/src/main/webapp/META-INF/context.xml
    openejb/trunk/openejb3/itests/openejb-itests-web/src/main/webapp/WEB-INF/tomcat-users.xml
Modified:
    openejb/trunk/openejb3/assembly/openejb-itests-standalone-client/src/main/assembly/client.xml
    openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBValve.java
    openejb/trunk/openejb3/assembly/test/build.xml
    openejb/trunk/openejb3/examples/webapps/ejb-examples/src/main/webapp/META-INF/context.xml
    openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/servlet/ServletTestClient.java
    openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/servlet/ServletTestSuite.java
    openejb/trunk/openejb3/itests/openejb-itests-web/src/main/webapp/WEB-INF/web.xml

Modified: openejb/trunk/openejb3/assembly/openejb-itests-standalone-client/src/main/assembly/client.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-itests-standalone-client/src/main/assembly/client.xml?rev=694102&r1=694101&r2=694102&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-itests-standalone-client/src/main/assembly/client.xml (original)
+++ openejb/trunk/openejb3/assembly/openejb-itests-standalone-client/src/main/assembly/client.xml Wed Sep 10 20:52:02 2008
@@ -54,8 +54,7 @@
       <unpack>true</unpack>
       <includes>
           <include>org.apache.openejb:javaee-api</include>
-          <include>org.apache.openejb:xbean-finder</include>
-          <include>asm:asm</include>
+          <include>org.apache.openejb:asm-finder</include>
           <include>junit:junit</include>
           <include>org.apache.openejb:openejb-itests-beans</include>
           <include>org.apache.openejb:openejb-itests-servlets</include>

Modified: openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBValve.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBValve.java?rev=694102&r1=694101&r2=694102&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBValve.java (original)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBValve.java Wed Sep 10 20:52:02 2008
@@ -38,7 +38,7 @@
     public void invoke(Request request, Response response) throws IOException, ServletException {
         Object oldState = null;
         if (securityService != null && request.getWrapper() != null) {
-            oldState = securityService.enterWebApp(request.getWrapper().getRealm(), request.getUserPrincipal(), request.getWrapper().getRunAs());
+            oldState = securityService.enterWebApp(request.getWrapper().getRealm(), request.getPrincipal(), request.getWrapper().getRunAs());
         }
 
         try {

Modified: openejb/trunk/openejb3/assembly/test/build.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/test/build.xml?rev=694102&r1=694101&r2=694102&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/test/build.xml (original)
+++ openejb/trunk/openejb3/assembly/test/build.xml Wed Sep 10 20:52:02 2008
@@ -315,7 +315,7 @@
         <property name="itests.war.url" value="${maven.repo}/org/apache/openejb/openejb-itests-web/${openejb.version}/openejb-itests-web-${openejb.version}.war"/>
         <property name="itests.war.file" value="${repo}/openejb/distributions/${openejb.version}/itests.war"/>
 
-        <property name="itests.client.url" value="${maven.repo}/org/apache/openejb/openejb-itests-client/${openejb.version}/openejb-itests-client-${openejb.version}.jar"/>
+        <property name="itests.client.url" value="${maven.repo}/org/apache/openejb/openejb-itests-standalone-client/${openejb.version}/openejb-itests-standalone-client-${openejb.version}.jar"/>
         <property name="itests.client.file" value="${repo}/openejb/distributions/${openejb.version}/openejb-itests-standalone-client.jar"/>
 
         <condition property="tomcat.url" value="http://archive.apache.org/dist/tomcat/tomcat-6/v${tomcat.version}/bin/apache-tomcat-${tomcat.version}.zip">

Added: openejb/trunk/openejb3/examples/webapps/ejb-examples/build.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/webapps/ejb-examples/build.xml?rev=694102&view=auto
==============================================================================
--- openejb/trunk/openejb3/examples/webapps/ejb-examples/build.xml (added)
+++ openejb/trunk/openejb3/examples/webapps/ejb-examples/build.xml Wed Sep 10 20:52:02 2008
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+-->
+<!-- $Revision: 579817 $ $Date: 2007-09-26 14:56:30 -0700 (Wed, 26 Sep 2007) $ -->
+
+<project name="Test OpenEJB" default="test" basedir=".">
+    <property name="openejb.version" value="3.1-SNAPSHOT"/>
+    <property name="repo" location="${basedir}/repo"/>
+    <property name="target.dir" location="${basedir}/target"/>
+    <property name="windows.sleep" value="5"/>
+    <property name="unix.sleep" value="1"/>
+
+
+    <target name="clean">
+        <delete dir="${basedir}/activemq-data"/>
+        <delete dir="${target.dir}"/>
+    </target>
+
+    <target name="test">
+        <antcall target="test:tomcat6"/>
+        <antcall target="test:tomcat55"/>
+    </target>
+
+    <target name="test:all">
+        <antcall target="test:tomcat6:all"/>
+        <antcall target="test:tomcat55:all"/>
+    </target>
+
+    <target name="test:tomcat6">
+        <antcall target="tomcat.test">
+            <param name="tomcat.version" value="6.0.14"/>
+        </antcall>
+    </target>
+
+    <target name="test:tomcat6:all">
+        <antcall target="tomcat.test">
+            <param name="tomcat.version" value="6.0.14"/>
+        </antcall>
+        <antcall target="tomcat.test">
+            <param name="tomcat.version" value="6.0.13"/>
+        </antcall>
+        <antcall target="tomcat.test">
+            <param name="tomcat.version" value="6.0.10"/>
+        </antcall>
+        <antcall target="tomcat.test">
+            <param name="tomcat.version" value="6.0.9"/>
+        </antcall>
+    </target>
+
+    <target name="test:tomcat55">
+        <antcall target="tomcat.test">
+            <param name="tomcat.version" value="5.5.26"/>
+        </antcall>
+    </target>
+
+    <target name="test:tomcat55:all">
+        <antcall target="tomcat.test">
+            <param name="tomcat.version" value="5.5.26"/>
+        </antcall>
+        <antcall target="tomcat.test">
+            <param name="tomcat.version" value="5.5.25"/>
+        </antcall>
+        <antcall target="tomcat.test">
+            <param name="tomcat.version" value="5.5.23"/>
+        </antcall>
+        <antcall target="tomcat.test">
+            <param name="tomcat.version" value="5.5.20"/>
+        </antcall>
+    </target>
+
+    <target name="tomcat.test" depends="tomcat.test.setup">
+        <!-- unpack tomcat -->
+        <antcall target="tomcat.unpack"/>
+
+        <!-- copy openejb.war to webapps dir -->
+        <copy file="${openejb.war.file}" todir="${tomcat.home}/webapps"/>
+
+        <!-- install ejb-examples.war -->
+        <copy file="${basedir}/target/ejb-examples-1.1-SNAPSHOT.war" tofile="${tomcat.home}/webapps/ejb-examples.war"/>
+
+        <!-- start tomcat -->
+        <antcall target="tomcat.start"/>
+
+        <!-- run itests (Servlet started mode) -->
+        <antcall target="itests.tomcat.run"/>
+
+        <!-- stop tomcat -->
+        <antcall target="tomcat.stop"/>
+
+        <!-- Make sure all resources are collected on windows -->
+        <condition property="sleep" value="1" else="30">
+            <os family="unix"/>
+        </condition>
+        <echo message="Sleeping for ${sleep} sec to avoid Windows failures"/>
+        <sleep seconds="${sleep}"/>
+    </target>
+
+    <target name="tomcat.unpack">
+        <delete dir="${tomcat.home}"/>
+        <mkdir dir="${target.dir}"/>
+        <unjar src="${tomcat.file}" dest="${target.dir}"/>
+        <chmod dir="${tomcat.home}/bin" perm="u+x" includes="**/*.sh"/>
+    </target>
+
+    <target name="tomcat.start">
+        <echo message="Starting Tomcat ${tomcat.version}..."/>
+        <exec executable="${tomcat.home}/bin/startup.bat" spawn="true" osfamily="windows">
+            <env key="CATALINA_HOME" value="${tomcat.home}"/>
+        </exec>
+        <exec executable="${tomcat.home}/bin/startup.sh" osfamily="unix">
+            <!--env key="JAVA_OPTS" value="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"/-->
+        </exec>
+        <waitfor maxwait="1" maxwaitunit="minute">
+            <and>
+                <socket server="localhost" port="8080"/>
+                <socket server="localhost" port="8005"/>
+                <socket server="localhost" port="8009"/>
+                <http url="http://localhost:8080/openejb/installer"/>
+            </and>
+        </waitfor>
+
+        <condition property="sleep" value="${unix.sleep}" else="${windows.sleep}">
+            <os family="unix"/>
+        </condition>
+        <echo message="                  sleeping for ${sleep} sec"/>
+        <sleep seconds="${sleep}"/>
+
+        <echo message="                  started"/>
+    </target>
+
+    <target name="tomcat.stop">
+        <echo message="Stopping Tomcat ${tomcat.version}..."/>
+        <exec executable="${tomcat.home}/bin/shutdown.bat" osfamily="windows">
+            <env key="CATALINA_HOME" value="${tomcat.home}"/>
+        </exec>
+        <exec executable="${tomcat.home}/bin/shutdown.sh" osfamily="unix"/>
+        <waitfor maxwait="1" maxwaitunit="minute">
+            <not>
+                <or>
+                    <http url="http://localhost:8080"/>
+                    <socket server="localhost" port="8080"/>
+                    <socket server="localhost" port="8005"/>
+                    <socket server="localhost" port="8009"/>
+                    <socket server="localhost" port="61616"/>
+                </or>
+            </not>
+        </waitfor>
+
+        <condition property="sleep" value="${unix.sleep}" else="${windows.sleep}">
+            <os family="unix"/>
+        </condition>
+        <echo message="                  sleeping for ${sleep} sec"/>
+        <sleep seconds="${sleep}"/>
+
+        <echo message="                  stopped"/>
+    </target>
+
+    <target name="itests.tomcat.run">
+        <input>Press Return key to continue...</input>
+    </target>
+
+    <target name="tomcat.test.setup">
+        <property name="openejb.war.file" value="${user.home}/.m2/repository/org/apache/openejb/openejb-tomcat-webapp/${openejb.version}/openejb-tomcat-webapp-${openejb.version}.war"/>
+
+        <condition property="tomcat.url" value="http://archive.apache.org/dist/tomcat/tomcat-6/v${tomcat.version}/bin/apache-tomcat-${tomcat.version}.zip">
+            <matches pattern="^6\." string="${tomcat.version}"/>
+        </condition>
+        <condition property="tomcat.url" value="http://archive.apache.org/dist/tomcat/tomcat-5/v${tomcat.version}/bin/apache-tomcat-${tomcat.version}.zip">
+            <matches pattern="^5\.5" string="${tomcat.version}"/>
+        </condition>
+        <fail message="Unknown Tomcat version ${tomcat.version}" unless="tomcat.url"/>
+        <property name="tomcat.file" value="${repo}/tomcat/distributions/${tomcat.version}/tomcat.zip"/>
+
+        <property name="tomcat.home" value="${target.dir}/apache-tomcat-${tomcat.version}"/>
+
+        <antcall target="download.file">
+            <param name="download.url" value="${tomcat.url}"/>
+            <param name="download.file" value="${tomcat.file}"/>
+        </antcall>
+    </target>
+
+    <target name="download.uptodate">
+        <available file="${download.file}" property="download.uptodate"/>
+    </target>
+
+    <target name="download.file" depends="download.uptodate" unless="download.uptodate">
+        <dirname property="download.dir" file="${download.file}"/>
+        <mkdir dir="${download.dir}"/>
+        <get src="${download.url}" dest="${download.file}"/>
+    </target>
+</project>

Modified: openejb/trunk/openejb3/examples/webapps/ejb-examples/src/main/webapp/META-INF/context.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/webapps/ejb-examples/src/main/webapp/META-INF/context.xml?rev=694102&r1=694101&r2=694102&view=diff
==============================================================================
--- openejb/trunk/openejb3/examples/webapps/ejb-examples/src/main/webapp/META-INF/context.xml (original)
+++ openejb/trunk/openejb3/examples/webapps/ejb-examples/src/main/webapp/META-INF/context.xml Wed Sep 10 20:52:02 2008
@@ -20,6 +20,10 @@
 <!-- $Rev$ $Date$ -->
 
 <Context>
+  <!-- This only works if the context is installed under the correct name -->
+  <Realm className="org.apache.catalina.realm.MemoryRealm"
+      pathname="webapps/ejb-examples/WEB-INF/tomcat-users.xml"/>
+
   <Environment
       name="context.xml/environment"
       value="ContextString"

Added: openejb/trunk/openejb3/examples/webapps/ejb-examples/src/main/webapp/WEB-INF/tomcat-users.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/webapps/ejb-examples/src/main/webapp/WEB-INF/tomcat-users.xml?rev=694102&view=auto
==============================================================================
--- openejb/trunk/openejb3/examples/webapps/ejb-examples/src/main/webapp/WEB-INF/tomcat-users.xml (added)
+++ openejb/trunk/openejb3/examples/webapps/ejb-examples/src/main/webapp/WEB-INF/tomcat-users.xml Wed Sep 10 20:52:02 2008
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+
+<!-- $Rev: 597221 $ $Date: 2007-11-21 22:51:05 +0100 (Wed, 21 Nov 2007) $ -->
+
+<tomcat-users>
+    <user name="manager" password="manager" roles="manager,user" />
+    <user name="user" password="user" roles="user" />
+</tomcat-users>

Added: openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/servlet/RunAsServletTests.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/servlet/RunAsServletTests.java?rev=694102&view=auto
==============================================================================
--- openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/servlet/RunAsServletTests.java (added)
+++ openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/servlet/RunAsServletTests.java Wed Sep 10 20:52:02 2008
@@ -0,0 +1,36 @@
+/**
+ *
+ * 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.test.servlet;
+
+public class RunAsServletTests extends ServletTestClient {
+    public RunAsServletTests(){
+        super("RunAsServlet");
+    }
+
+    public void test01_invokeGetCallerPrincipal() {
+        invoke("invokeGetCallerPrincipal");
+    }
+
+    public void test02_invokeIsCallerInRole() {
+        invoke("invokeIsCallerInRole");
+    }
+
+    public void test03_invokeIsAllowed() {
+        invoke("invokeIsAllowed");
+    }
+}
\ No newline at end of file

Copied: openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/servlet/SecureServletTests.java (from r689690, openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/servlet/EjbServletTests.java)
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/servlet/SecureServletTests.java?p2=openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/servlet/SecureServletTests.java&p1=openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/servlet/EjbServletTests.java&r1=689690&r2=694102&rev=694102&view=diff
==============================================================================
--- openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/servlet/EjbServletTests.java (original)
+++ openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/servlet/SecureServletTests.java Wed Sep 10 20:52:02 2008
@@ -17,12 +17,20 @@
  */
 package org.apache.openejb.test.servlet;
 
-public class EjbServletTests extends ServletTestClient {
-    public EjbServletTests(){
-        super("EjbServlet");
+public class SecureServletTests extends ServletTestClient {
+    public SecureServletTests(){
+        super("SecureServlet");
     }
 
-    public void test01_invokeBusinessMethod() {
-        invoke("invokeBusinessMethod");
+    public void test01_invokeGetCallerPrincipal() {
+        invoke("invokeGetCallerPrincipal");
     }
-}
+
+    public void test02_invokeIsCallerInRole() {
+        invoke("invokeIsCallerInRole");
+    }
+
+    public void test03_invokeIsAllowed() {
+        invoke("invokeIsAllowed");
+    }
+}
\ No newline at end of file

Modified: openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/servlet/ServletTestClient.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/servlet/ServletTestClient.java?rev=694102&r1=694101&r2=694102&view=diff
==============================================================================
--- openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/servlet/ServletTestClient.java (original)
+++ openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/servlet/ServletTestClient.java Wed Sep 10 20:52:02 2008
@@ -24,6 +24,8 @@
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLConnection;
+import java.net.Authenticator;
+import java.net.PasswordAuthentication;
 import java.util.Properties;
 import javax.naming.InitialContext;
 
@@ -43,6 +45,15 @@
         } catch (MalformedURLException e) {
             throw new RuntimeException(e);
         }
+
+        // install authenticator for protected urls
+        Authenticator.setDefault(new StaticAuthenticator());
+    }
+
+    private static class StaticAuthenticator extends Authenticator {
+        protected PasswordAuthentication getPasswordAuthentication() {
+            return new PasswordAuthentication("user", "user".toCharArray());
+        }
     }
 
     /**

Modified: openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/servlet/ServletTestSuite.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/servlet/ServletTestSuite.java?rev=694102&r1=694101&r2=694102&view=diff
==============================================================================
--- openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/servlet/ServletTestSuite.java (original)
+++ openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/servlet/ServletTestSuite.java Wed Sep 10 20:52:02 2008
@@ -29,6 +29,8 @@
         TestSuite suite = new FilteredTestSuite();
         suite.addTest(new AnnotatedServletTests());
         suite.addTest(new EjbServletTests());
+        suite.addTest(new SecureServletTests());
+        suite.addTest(new RunAsServletTests());
         suite.addTest(new WebserviceServletTests());
         return suite;
     }

Added: openejb/trunk/openejb3/itests/openejb-itests-servlets/src/main/java/org/apache/openejb/test/servlet/RunAsServlet.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-servlets/src/main/java/org/apache/openejb/test/servlet/RunAsServlet.java?rev=694102&view=auto
==============================================================================
--- openejb/trunk/openejb3/itests/openejb-itests-servlets/src/main/java/org/apache/openejb/test/servlet/RunAsServlet.java (added)
+++ openejb/trunk/openejb3/itests/openejb-itests-servlets/src/main/java/org/apache/openejb/test/servlet/RunAsServlet.java Wed Sep 10 20:52:02 2008
@@ -0,0 +1,132 @@
+/**
+ *
+ * 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.test.servlet;
+
+import javax.ejb.EJB;
+import javax.ejb.EJBAccessException;
+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.IOException;
+import java.io.PrintStream;
+import java.security.Principal;
+import java.lang.reflect.Method;
+
+import junit.framework.Assert;
+
+public class RunAsServlet extends HttpServlet {
+    @EJB
+    private SecureEJBLocal secureEJBLocal;
+
+    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+        response.setContentType("text/plain");
+        ServletOutputStream out = response.getOutputStream();
+        PrintStream printStream = new PrintStream(out);
+
+        String methodName = request.getParameter("method");
+        if (methodName == null) {
+            testAll(request, printStream);
+        } else {
+            try {
+                Method method = getClass().getMethod(methodName, HttpServletRequest.class);
+                method.invoke(this, request);
+            } catch (Throwable e) {
+                // response.setStatus(580);
+                printStream.println("FAILED");
+                e.printStackTrace(printStream);
+            }
+        }
+        printStream.flush();
+    }
+
+    public void testAll(HttpServletRequest request, PrintStream printStream) {
+        for (Method method : EjbServlet.class.getMethods()) {
+            if (!method.getName().startsWith("invoke")) continue;
+
+            try {
+                method.invoke(this);
+                printStream.println(method.getName() + " PASSED");
+            } catch (Throwable e) {
+                printStream.println(method.getName() + " FAILED");
+                e.printStackTrace(printStream);
+                printStream.flush();
+            }
+            printStream.println();
+        }
+    }
+
+    public void invokeGetCallerPrincipal(HttpServletRequest request) {
+        // Servlet environment - running as "user"
+        Principal principal = request.getUserPrincipal();
+        Assert.assertNotNull(principal);
+        Assert.assertEquals("user", principal.getName());
+
+        // EJB environment - running as "runas"
+        principal = secureEJBLocal.getCallerPrincipal();
+        Assert.assertNotNull(principal);
+        Assert.assertEquals("runas", principal.getName());
+    }
+
+    public void invokeIsCallerInRole(HttpServletRequest request) {
+        // Servlet environment - running as "user"
+        Assert.assertTrue(request.isUserInRole("user"));
+        Assert.assertFalse(request.isUserInRole("manager"));
+        Assert.assertFalse(request.isUserInRole("UNKNOWN"));
+        Assert.assertFalse(request.isUserInRole("runas"));
+
+        // EJB environment - running as "runas"
+        Assert.assertFalse(secureEJBLocal.isCallerInRole("user"));
+        Assert.assertFalse(secureEJBLocal.isCallerInRole("manager"));
+        Assert.assertFalse(secureEJBLocal.isCallerInRole("UNKNOWN"));
+        Assert.assertTrue(secureEJBLocal.isCallerInRole("runas"));
+    }
+
+    public void invokeIsAllowed(HttpServletRequest request) {
+        try {
+            secureEJBLocal.allowUserMethod();
+            Assert.fail("Method allowUserMethod() ALLOWED");
+        } catch(EJBAccessException expected) {
+        }
+
+        try {
+            secureEJBLocal.allowManagerMethod();
+            Assert.fail("Method allowManagerMethod() ALLOWED");
+        } catch(EJBAccessException expected) {
+        }
+
+        try {
+            secureEJBLocal.allowUnknownMethod();
+            Assert.fail("Method allowUnknownMethod() ALLOWED");
+        } catch(EJBAccessException expected) {
+        }
+
+        try {
+            secureEJBLocal.allowRunasMethod();
+        } catch(EJBAccessException e) {
+            Assert.fail("Method allowRunasMethod() NOT ALLOWED");
+        }
+
+        try {
+            secureEJBLocal.denyAllMethod();
+            Assert.fail("Method denyAllMethod() ALLOWED");
+        } catch(EJBAccessException expected) {
+        }
+    }
+}
\ No newline at end of file

Copied: openejb/trunk/openejb3/itests/openejb-itests-servlets/src/main/java/org/apache/openejb/test/servlet/SecureEJB.java (from r689690, openejb/trunk/openejb3/examples/webapps/ejb-examples/src/main/java/org/superbiz/servlet/SecureEJB.java)
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-servlets/src/main/java/org/apache/openejb/test/servlet/SecureEJB.java?p2=openejb/trunk/openejb3/itests/openejb-itests-servlets/src/main/java/org/apache/openejb/test/servlet/SecureEJB.java&p1=openejb/trunk/openejb3/examples/webapps/ejb-examples/src/main/java/org/superbiz/servlet/SecureEJB.java&r1=689690&r2=694102&rev=694102&view=diff
==============================================================================
--- openejb/trunk/openejb3/examples/webapps/ejb-examples/src/main/java/org/superbiz/servlet/SecureEJB.java (original)
+++ openejb/trunk/openejb3/itests/openejb-itests-servlets/src/main/java/org/apache/openejb/test/servlet/SecureEJB.java Wed Sep 10 20:52:02 2008
@@ -15,7 +15,7 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.superbiz.servlet;
+package org.apache.openejb.test.servlet;
 
 import javax.annotation.Resource;
 import javax.annotation.security.DeclareRoles;
@@ -26,7 +26,7 @@
 import java.security.Principal;
 
 @Stateless
-@DeclareRoles({"user", "manager", "fake"})
+@DeclareRoles({"user", "manager", "UNKNOWN", "runas"})
 public class SecureEJB implements SecureEJBLocal {
     @Resource
     private SessionContext context;
@@ -47,8 +47,12 @@
     public void allowManagerMethod() {
     }
 
-    @RolesAllowed("fake")
-    public void allowFakeMethod() {
+    @RolesAllowed("UNKNOWN")
+    public void allowUnknownMethod() {
+    }
+
+    @RolesAllowed("runas")
+    public void allowRunasMethod() {
     }
 
     @DenyAll
@@ -58,4 +62,4 @@
     public String toString() {
         return "SecureEJB[userName=" + getCallerPrincipal() + "]";
     }
-}
+}
\ No newline at end of file

Copied: openejb/trunk/openejb3/itests/openejb-itests-servlets/src/main/java/org/apache/openejb/test/servlet/SecureEJBLocal.java (from r689690, openejb/trunk/openejb3/examples/webapps/ejb-examples/src/main/java/org/superbiz/servlet/SecureEJBLocal.java)
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-servlets/src/main/java/org/apache/openejb/test/servlet/SecureEJBLocal.java?p2=openejb/trunk/openejb3/itests/openejb-itests-servlets/src/main/java/org/apache/openejb/test/servlet/SecureEJBLocal.java&p1=openejb/trunk/openejb3/examples/webapps/ejb-examples/src/main/java/org/superbiz/servlet/SecureEJBLocal.java&r1=689690&r2=694102&rev=694102&view=diff
==============================================================================
--- openejb/trunk/openejb3/examples/webapps/ejb-examples/src/main/java/org/superbiz/servlet/SecureEJBLocal.java (original)
+++ openejb/trunk/openejb3/itests/openejb-itests-servlets/src/main/java/org/apache/openejb/test/servlet/SecureEJBLocal.java Wed Sep 10 20:52:02 2008
@@ -15,7 +15,7 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.superbiz.servlet;
+package org.apache.openejb.test.servlet;
 
 import javax.ejb.Local;
 import java.security.Principal;
@@ -30,7 +30,9 @@
 
     void allowManagerMethod();
 
-    void allowFakeMethod();
+    void allowUnknownMethod();
+
+    void allowRunasMethod();
 
     void denyAllMethod();
-}
+}
\ No newline at end of file

Copied: openejb/trunk/openejb3/itests/openejb-itests-servlets/src/main/java/org/apache/openejb/test/servlet/SecureServlet.java (from r689690, openejb/trunk/openejb3/examples/webapps/ejb-examples/src/main/java/org/superbiz/servlet/SecureServlet.java)
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-servlets/src/main/java/org/apache/openejb/test/servlet/SecureServlet.java?p2=openejb/trunk/openejb3/itests/openejb-itests-servlets/src/main/java/org/apache/openejb/test/servlet/SecureServlet.java&p1=openejb/trunk/openejb3/examples/webapps/ejb-examples/src/main/java/org/superbiz/servlet/SecureServlet.java&r1=689690&r2=694102&rev=694102&view=diff
==============================================================================
--- openejb/trunk/openejb3/examples/webapps/ejb-examples/src/main/java/org/superbiz/servlet/SecureServlet.java (original)
+++ openejb/trunk/openejb3/itests/openejb-itests-servlets/src/main/java/org/apache/openejb/test/servlet/SecureServlet.java Wed Sep 10 20:52:02 2008
@@ -15,7 +15,7 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.superbiz.servlet;
+package org.apache.openejb.test.servlet;
 
 import javax.ejb.EJB;
 import javax.ejb.EJBAccessException;
@@ -25,68 +25,108 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.io.PrintStream;
 import java.security.Principal;
+import java.lang.reflect.Method;
+
+import junit.framework.Assert;
 
 public class SecureServlet extends HttpServlet {
     @EJB
     private SecureEJBLocal secureEJBLocal;
 
-    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         response.setContentType("text/plain");
         ServletOutputStream out = response.getOutputStream();
+        PrintStream printStream = new PrintStream(out);
 
-        out.println("Servlet");
-        Principal principal = request.getUserPrincipal();
-        if (principal != null) {
-            out.println("Servlet.getUserPrincipal()=" + principal + " [" + principal.getName() + "]");
+        String methodName = request.getParameter("method");
+        if (methodName == null) {
+            testAll(request, printStream);
         } else {
-            out.println("Servlet.getUserPrincipal()=<null>" );
-        }
-        out.println("Servlet.isCallerInRole(\"user\")=" + request.isUserInRole("user"));
-        out.println("Servlet.isCallerInRole(\"manager\")=" + request.isUserInRole("manager"));
-        out.println("Servlet.isCallerInRole(\"fake\")=" + request.isUserInRole("fake"));
-        out.println();
-        
-        out.println("@EJB=" + secureEJBLocal);
-        if (secureEJBLocal != null) {
-            principal = secureEJBLocal.getCallerPrincipal();
-            if (principal != null) {
-                out.println("@EJB.getCallerPrincipal()=" + principal + " [" + principal.getName() + "]");
-            } else {
-                out.println("@EJB.getCallerPrincipal()=<null>" );
-            }
-            out.println("@EJB.isCallerInRole(\"user\")=" + secureEJBLocal.isCallerInRole("user"));
-            out.println("@EJB.isCallerInRole(\"manager\")=" + secureEJBLocal.isCallerInRole("manager"));
-            out.println("@EJB.isCallerInRole(\"fake\")=" + secureEJBLocal.isCallerInRole("fake"));
-
             try {
-                secureEJBLocal.allowUserMethod();
-                out.println("@EJB.allowUserMethod() ALLOWED");
-            } catch(EJBAccessException e) {
-                out.println("@EJB.allowUserMethod() DENIED");                                
+                Method method = getClass().getMethod(methodName, HttpServletRequest.class);
+                method.invoke(this, request);
+            } catch (Throwable e) {
+                // response.setStatus(580);
+                printStream.println("FAILED");
+                e.printStackTrace(printStream);
             }
+        }
+        printStream.flush();
+    }
 
-            try {
-                secureEJBLocal.allowManagerMethod();
-                out.println("@EJB.allowManagerMethod() ALLOWED");
-            } catch(EJBAccessException e) {
-                out.println("@EJB.allowManagerMethod() DENIED");
-            }
+    public void testAll(HttpServletRequest request, PrintStream printStream) {
+        for (Method method : EjbServlet.class.getMethods()) {
+            if (!method.getName().startsWith("invoke")) continue;
 
             try {
-                secureEJBLocal.allowFakeMethod();
-                out.println("@EJB.allowFakeMethod() ALLOWED");
-            } catch(EJBAccessException e) {
-                out.println("@EJB.allowFakeMethod() DENIED");                                
+                method.invoke(this);
+                printStream.println(method.getName() + " PASSED");
+            } catch (Throwable e) {
+                printStream.println(method.getName() + " FAILED");
+                e.printStackTrace(printStream);
+                printStream.flush();
             }
+            printStream.println();
+        }
+    }
 
-            try {
-                secureEJBLocal.denyAllMethod();
-                out.println("@EJB.denyAllMethod() ALLOWED");
-            } catch(EJBAccessException e) {
-                out.println("@EJB.denyAllMethod() DENIED");
-            }
+    public void invokeGetCallerPrincipal(HttpServletRequest request) {
+        // Servlet environment
+        Principal principal = request.getUserPrincipal();
+        Assert.assertNotNull(principal);
+        Assert.assertEquals("user", principal.getName());
+
+        // EJB environment
+        principal = secureEJBLocal.getCallerPrincipal();
+        Assert.assertNotNull(principal);
+        Assert.assertEquals("user", principal.getName());
+    }
+
+    public void invokeIsCallerInRole(HttpServletRequest request) {
+        // Servlet environment
+        Assert.assertTrue(request.isUserInRole("user"));
+        Assert.assertFalse(request.isUserInRole("manager"));
+        Assert.assertFalse(request.isUserInRole("UNKNOWN"));
+        Assert.assertFalse(request.isUserInRole("runas"));
+
+        // EJB environment
+        Assert.assertTrue(secureEJBLocal.isCallerInRole("user"));
+        Assert.assertFalse(secureEJBLocal.isCallerInRole("manager"));
+        Assert.assertFalse(secureEJBLocal.isCallerInRole("UNKNOWN"));
+        Assert.assertFalse(secureEJBLocal.isCallerInRole("runas"));
+    }
+
+    public void invokeIsAllowed(HttpServletRequest request) {
+        try {
+            secureEJBLocal.allowUserMethod();
+        } catch(EJBAccessException e) {
+            Assert.fail("Method allowUserMethod() NOT ALLOWED");
+        }
+
+        try {
+            secureEJBLocal.allowManagerMethod();
+            Assert.fail("Method allowManagerMethod() ALLOWED");
+        } catch(EJBAccessException expected) {
+        }
+
+        try {
+            secureEJBLocal.allowUnknownMethod();
+            Assert.fail("Method allowUnknownMethod() ALLOWED");
+        } catch(EJBAccessException expected) {
+        }
+
+        try {
+            secureEJBLocal.allowRunasMethod();
+            Assert.fail("Method allowRunasMethod() ALLOWED");
+        } catch(EJBAccessException expected) {
+        }
+
+        try {
+            secureEJBLocal.denyAllMethod();
+            Assert.fail("Method denyAllMethod() ALLOWED");
+        } catch(EJBAccessException expected) {
         }
-        out.println();
     }
-}
+}
\ No newline at end of file

Added: openejb/trunk/openejb3/itests/openejb-itests-web/src/main/webapp/META-INF/context.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-web/src/main/webapp/META-INF/context.xml?rev=694102&view=auto
==============================================================================
--- openejb/trunk/openejb3/itests/openejb-itests-web/src/main/webapp/META-INF/context.xml (added)
+++ openejb/trunk/openejb3/itests/openejb-itests-web/src/main/webapp/META-INF/context.xml Wed Sep 10 20:52:02 2008
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+-->
+
+<!-- $Rev: 684152 $ $Date: 2008-08-08 17:02:32 -0700 (Fri, 08 Aug 2008) $ -->
+
+<Context>
+  <!-- This only works if the context is installed under the correct name -->
+  <Realm className="org.apache.catalina.realm.MemoryRealm"
+      pathname="webapps/itests/WEB-INF/tomcat-users.xml"/>
+</Context>
\ No newline at end of file

Added: openejb/trunk/openejb3/itests/openejb-itests-web/src/main/webapp/WEB-INF/tomcat-users.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-web/src/main/webapp/WEB-INF/tomcat-users.xml?rev=694102&view=auto
==============================================================================
--- openejb/trunk/openejb3/itests/openejb-itests-web/src/main/webapp/WEB-INF/tomcat-users.xml (added)
+++ openejb/trunk/openejb3/itests/openejb-itests-web/src/main/webapp/WEB-INF/tomcat-users.xml Wed Sep 10 20:52:02 2008
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+
+<!-- $Rev: 597221 $ $Date: 2007-11-21 22:51:05 +0100 (Wed, 21 Nov 2007) $ -->
+
+<tomcat-users>
+    <user name="user" password="user" roles="user" />
+</tomcat-users>

Modified: openejb/trunk/openejb3/itests/openejb-itests-web/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-web/src/main/webapp/WEB-INF/web.xml?rev=694102&r1=694101&r2=694102&view=diff
==============================================================================
--- openejb/trunk/openejb3/itests/openejb-itests-web/src/main/webapp/WEB-INF/web.xml (original)
+++ openejb/trunk/openejb3/itests/openejb-itests-web/src/main/webapp/WEB-INF/web.xml Wed Sep 10 20:52:02 2008
@@ -27,6 +27,9 @@
 
   <display-name>OpenEJB Servlet Examples</display-name>
 
+  <!-- =============== -->
+  <!-- Injection Tests -->
+  <!-- =============== -->
   <servlet>
     <servlet-name>AnnotatedServlet</servlet-name>
     <servlet-class>org.apache.openejb.test.servlet.AnnotatedServlet</servlet-class>
@@ -37,6 +40,9 @@
     <url-pattern>/AnnotatedServlet/*</url-pattern>
   </servlet-mapping>
 
+  <!-- ==================== -->
+  <!-- EJB Invocation Tests -->
+  <!-- ==================== -->
   <servlet>
     <servlet-name>EjbServlet</servlet-name>
     <servlet-class>org.apache.openejb.test.servlet.EjbServlet</servlet-class>
@@ -47,6 +53,50 @@
     <url-pattern>/EjbServlet/*</url-pattern>
   </servlet-mapping>
 
+  <!-- ============== -->
+  <!-- Security Tests -->
+  <!-- ============== -->
+  <servlet>
+    <servlet-name>SecureServlet</servlet-name>
+    <servlet-class>org.apache.openejb.test.servlet.SecureServlet</servlet-class>
+  </servlet>
+
+  <servlet-mapping>
+    <servlet-name>SecureServlet</servlet-name>
+    <url-pattern>/SecureServlet/*</url-pattern>
+  </servlet-mapping>
+
+  <servlet>
+    <servlet-name>RunAsServlet</servlet-name>
+    <servlet-class>org.apache.openejb.test.servlet.RunAsServlet</servlet-class>
+    <run-as>
+      <role-name>runas</role-name>
+    </run-as>
+  </servlet>
+
+  <servlet-mapping>
+    <servlet-name>RunAsServlet</servlet-name>
+    <url-pattern>/RunAsServlet/*</url-pattern>
+  </servlet-mapping>
+
+  <security-constraint>
+    <web-resource-collection>
+      <web-resource-name>Secure Area</web-resource-name>
+      <url-pattern>/SecureServlet/*</url-pattern>
+      <url-pattern>/RunAsServlet/*</url-pattern>
+    </web-resource-collection>
+    <auth-constraint>
+      <role-name>user</role-name>
+    </auth-constraint>
+  </security-constraint>
+
+  <login-config>
+    <auth-method>BASIC</auth-method>
+  </login-config>
+
+  <!-- ================ -->
+  <!-- Webservice Tests -->
+  <!-- ================ -->
   <servlet>
     <servlet-name>WebserviceServlet</servlet-name>
     <servlet-class>org.apache.openejb.test.servlet.WebserviceServlet</servlet-class>
@@ -58,141 +108,147 @@
   </servlet-mapping>
 
   <servlet>
-    <servlet-name>JndiServlet</servlet-name>
-    <servlet-class>org.apache.openejb.test.servlet.JndiServlet</servlet-class>
+    <servlet-name>HelloPojoService</servlet-name>
+    <servlet-class>org.apache.openejb.test.servlet.HelloPojoService</servlet-class>
   </servlet>
 
   <servlet-mapping>
+    <servlet-name>HelloPojoService</servlet-name>
+    <url-pattern>/hello</url-pattern>
+  </servlet-mapping>
+
+  <!-- ============ -->
+  <!-- JNDI Entries -->
+  <!-- ============ -->
+  <env-entry>
+    <env-entry-name>org.apache.openejb.test.servlet.AnnotatedServlet/booolean</env-entry-name>
+    <env-entry-type>java.lang.Boolean</env-entry-type>
+    <env-entry-value>true</env-entry-value>
+  </env-entry>
+  <env-entry>
+    <env-entry-name>org.apache.openejb.test.servlet.AnnotatedServlet/striing</env-entry-name>
+    <env-entry-type>java.lang.String</env-entry-type>
+    <env-entry-value>1</env-entry-value>
+  </env-entry>
+  <env-entry>
+    <env-entry-name>org.apache.openejb.test.servlet.AnnotatedServlet/doouble</env-entry-name>
+    <env-entry-type>java.lang.Double</env-entry-type>
+    <env-entry-value>1</env-entry-value>
+  </env-entry>
+  <env-entry>
+    <env-entry-name>org.apache.openejb.test.servlet.AnnotatedServlet/loong</env-entry-name>
+    <env-entry-type>java.lang.Long</env-entry-type>
+    <env-entry-value>1</env-entry-value>
+  </env-entry>
+  <env-entry>
+    <env-entry-name>org.apache.openejb.test.servlet.AnnotatedServlet/flooat</env-entry-name>
+    <env-entry-type>java.lang.Float</env-entry-type>
+    <env-entry-value>1</env-entry-value>
+  </env-entry>
+  <env-entry>
+    <env-entry-name>org.apache.openejb.test.servlet.AnnotatedServlet/inteeger</env-entry-name>
+    <env-entry-type>java.lang.Integer</env-entry-type>
+    <env-entry-value>1</env-entry-value>
+  </env-entry>
+  <env-entry>
+    <env-entry-name>org.apache.openejb.test.servlet.AnnotatedServlet/shoort</env-entry-name>
+    <env-entry-type>java.lang.Short</env-entry-type>
+    <env-entry-value>1</env-entry-value>
+  </env-entry>
+  <env-entry>
+    <env-entry-name>org.apache.openejb.test.servlet.AnnotatedServlet/byyte</env-entry-name>
+    <env-entry-type>java.lang.Byte</env-entry-type>
+    <env-entry-value>1</env-entry-value>
+  </env-entry>
+  <env-entry>
+    <env-entry-name>org.apache.openejb.test.servlet.AnnotatedServlet/chaaracter</env-entry-name>
+    <env-entry-type>java.lang.Character</env-entry-type>
+    <env-entry-value>D</env-entry-value>
+  </env-entry>
+  <ejb-ref>
+    <ejb-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/bmpHome</ejb-ref-name>
+    <ejb-ref-type>Entity</ejb-ref-type>
+    <home>org.apache.openejb.test.entity.bmp.BasicBmpHome</home>
+    <remote>org.apache.openejb.test.entity.bmp.BasicBmpObject</remote>
+    <ejb-link>BasicBmpBean</ejb-link>
+  </ejb-ref>
+  <ejb-ref>
+    <ejb-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/statefulHome</ejb-ref-name>
+    <ejb-ref-type>Session</ejb-ref-type>
+    <home>org.apache.openejb.test.stateful.BasicStatefulHome</home>
+    <remote>org.apache.openejb.test.stateful.BasicStatefulObject</remote>
+    <ejb-link>BasicStatefulBean</ejb-link>
+  </ejb-ref>
+  <ejb-ref>
+    <ejb-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/statelessHome</ejb-ref-name>
+    <ejb-ref-type>Session</ejb-ref-type>
+    <home>org.apache.openejb.test.stateless.BasicStatelessHome</home>
+    <remote>org.apache.openejb.test.stateless.BasicStatelessObject</remote>
+    <ejb-link>BasicStatelessBean</ejb-link>
+  </ejb-ref>
+  <ejb-ref>
+    <ejb-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/statelessBusinessRemote</ejb-ref-name>
+    <ejb-ref-type>Session</ejb-ref-type>
+    <remote>org.apache.openejb.test.stateless.BasicStatelessBusinessRemote</remote>
+    <ejb-link>BasicStatelessPojoBean</ejb-link>
+  </ejb-ref>
+  <ejb-ref>
+    <ejb-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/statefulBusinessRemote</ejb-ref-name>
+    <ejb-ref-type>Session</ejb-ref-type>
+    <remote>org.apache.openejb.test.stateful.BasicStatefulBusinessRemote</remote>
+    <ejb-link>BasicStatefulPojoBean</ejb-link>
+  </ejb-ref>
+  <ejb-local-ref>
+    <ejb-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/statelessBusinessLocal</ejb-ref-name>
+    <ejb-ref-type>Session</ejb-ref-type>
+    <local>org.apache.openejb.test.stateless.BasicStatelessBusinessLocal</local>
+    <ejb-link>BasicStatelessPojoBean</ejb-link>
+  </ejb-local-ref>
+  <ejb-local-ref>
+    <ejb-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/statefulBusinessLocal</ejb-ref-name>
+    <ejb-ref-type>Session</ejb-ref-type>
+    <local>org.apache.openejb.test.stateful.BasicStatefulBusinessLocal</local>
+    <ejb-link>BasicStatefulPojoBean</ejb-link>
+  </ejb-local-ref>
+  <resource-ref>
+    <res-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/daataSource</res-ref-name>
+    <res-type>javax.sql.DataSource</res-type>
+    <res-auth>Container</res-auth>
+  </resource-ref>
+  <resource-ref>
+    <res-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/coonnectionFactory</res-ref-name>
+    <res-type>javax.jms.ConnectionFactory</res-type>
+    <res-auth>Container</res-auth>
+  </resource-ref>
+  <resource-ref>
+    <res-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/queueCoonnectionFactory</res-ref-name>
+    <res-type>javax.jms.QueueConnectionFactory</res-type>
+    <res-auth>Container</res-auth>
+  </resource-ref>
+  <resource-ref>
+    <res-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/topicCoonnectionFactory</res-ref-name>
+    <res-type>javax.jms.TopicConnectionFactory</res-type>
+    <res-auth>Container</res-auth>
+  </resource-ref>
+  <persistence-context-ref>
+    <persistence-context-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/em</persistence-context-ref-name>
+    <persistence-unit-name>openjpa-test-unit</persistence-unit-name>
+  </persistence-context-ref>
+  <persistence-unit-ref>
+    <persistence-unit-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/emf</persistence-unit-ref-name>
+    <persistence-unit-name>openjpa-test-unit</persistence-unit-name>
+  </persistence-unit-ref>
+
+
+  <!-- ============= -->
+  <!-- For Debugging -->
+  <!-- ============= -->
+  <servlet>
+    <servlet-name>JndiServlet</servlet-name>
+    <servlet-class>org.apache.openejb.test.servlet.JndiServlet</servlet-class>
+  </servlet>
+   <servlet-mapping>
     <servlet-name>JndiServlet</servlet-name>
     <url-pattern>/JndiServlet/*</url-pattern>
   </servlet-mapping>
-
-    <servlet>
-      <servlet-name>HelloPojoService</servlet-name>
-      <servlet-class>org.apache.openejb.test.servlet.HelloPojoService</servlet-class>
-    </servlet>
-
-    <servlet-mapping>
-      <servlet-name>HelloPojoService</servlet-name>
-      <url-pattern>/hello</url-pattern>
-    </servlet-mapping>
-
-    <env-entry>
-      <env-entry-name>org.apache.openejb.test.servlet.AnnotatedServlet/booolean</env-entry-name>
-      <env-entry-type>java.lang.Boolean</env-entry-type>
-      <env-entry-value>true</env-entry-value>
-    </env-entry>
-    <env-entry>
-      <env-entry-name>org.apache.openejb.test.servlet.AnnotatedServlet/striing</env-entry-name>
-      <env-entry-type>java.lang.String</env-entry-type>
-      <env-entry-value>1</env-entry-value>
-    </env-entry>
-    <env-entry>
-      <env-entry-name>org.apache.openejb.test.servlet.AnnotatedServlet/doouble</env-entry-name>
-      <env-entry-type>java.lang.Double</env-entry-type>
-      <env-entry-value>1</env-entry-value>
-    </env-entry>
-    <env-entry>
-      <env-entry-name>org.apache.openejb.test.servlet.AnnotatedServlet/loong</env-entry-name>
-      <env-entry-type>java.lang.Long</env-entry-type>
-      <env-entry-value>1</env-entry-value>
-    </env-entry>
-    <env-entry>
-      <env-entry-name>org.apache.openejb.test.servlet.AnnotatedServlet/flooat</env-entry-name>
-      <env-entry-type>java.lang.Float</env-entry-type>
-      <env-entry-value>1</env-entry-value>
-    </env-entry>
-    <env-entry>
-      <env-entry-name>org.apache.openejb.test.servlet.AnnotatedServlet/inteeger</env-entry-name>
-      <env-entry-type>java.lang.Integer</env-entry-type>
-      <env-entry-value>1</env-entry-value>
-    </env-entry>
-    <env-entry>
-      <env-entry-name>org.apache.openejb.test.servlet.AnnotatedServlet/shoort</env-entry-name>
-      <env-entry-type>java.lang.Short</env-entry-type>
-      <env-entry-value>1</env-entry-value>
-    </env-entry>
-    <env-entry>
-      <env-entry-name>org.apache.openejb.test.servlet.AnnotatedServlet/byyte</env-entry-name>
-      <env-entry-type>java.lang.Byte</env-entry-type>
-      <env-entry-value>1</env-entry-value>
-    </env-entry>
-    <env-entry>
-      <env-entry-name>org.apache.openejb.test.servlet.AnnotatedServlet/chaaracter</env-entry-name>
-      <env-entry-type>java.lang.Character</env-entry-type>
-      <env-entry-value>D</env-entry-value>
-    </env-entry>
-    <ejb-ref>
-      <ejb-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/bmpHome</ejb-ref-name>
-      <ejb-ref-type>Entity</ejb-ref-type>
-      <home>org.apache.openejb.test.entity.bmp.BasicBmpHome</home>
-      <remote>org.apache.openejb.test.entity.bmp.BasicBmpObject</remote>
-      <ejb-link>BasicBmpBean</ejb-link>
-    </ejb-ref>
-    <ejb-ref>
-      <ejb-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/statefulHome</ejb-ref-name>
-      <ejb-ref-type>Session</ejb-ref-type>
-      <home>org.apache.openejb.test.stateful.BasicStatefulHome</home>
-      <remote>org.apache.openejb.test.stateful.BasicStatefulObject</remote>
-      <ejb-link>BasicStatefulBean</ejb-link>
-    </ejb-ref>
-    <ejb-ref>
-      <ejb-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/statelessHome</ejb-ref-name>
-      <ejb-ref-type>Session</ejb-ref-type>
-      <home>org.apache.openejb.test.stateless.BasicStatelessHome</home>
-      <remote>org.apache.openejb.test.stateless.BasicStatelessObject</remote>
-      <ejb-link>BasicStatelessBean</ejb-link>
-    </ejb-ref>
-    <ejb-ref>
-      <ejb-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/statelessBusinessRemote</ejb-ref-name>
-      <ejb-ref-type>Session</ejb-ref-type>
-      <remote>org.apache.openejb.test.stateless.BasicStatelessBusinessRemote</remote>
-      <ejb-link>BasicStatelessPojoBean</ejb-link>
-    </ejb-ref>
-    <ejb-ref>
-      <ejb-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/statefulBusinessRemote</ejb-ref-name>
-      <ejb-ref-type>Session</ejb-ref-type>
-      <remote>org.apache.openejb.test.stateful.BasicStatefulBusinessRemote</remote>
-      <ejb-link>BasicStatefulPojoBean</ejb-link>
-    </ejb-ref>
-    <ejb-local-ref>
-      <ejb-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/statelessBusinessLocal</ejb-ref-name>
-      <ejb-ref-type>Session</ejb-ref-type>
-      <local>org.apache.openejb.test.stateless.BasicStatelessBusinessLocal</local>
-      <ejb-link>BasicStatelessPojoBean</ejb-link>
-    </ejb-local-ref>
-    <ejb-local-ref>
-      <ejb-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/statefulBusinessLocal</ejb-ref-name>
-      <ejb-ref-type>Session</ejb-ref-type>
-      <local>org.apache.openejb.test.stateful.BasicStatefulBusinessLocal</local>
-      <ejb-link>BasicStatefulPojoBean</ejb-link>
-    </ejb-local-ref>
-    <resource-ref>
-      <res-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/daataSource</res-ref-name>
-      <res-type>javax.sql.DataSource</res-type>
-      <res-auth>Container</res-auth>
-    </resource-ref>
-    <resource-ref>
-      <res-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/coonnectionFactory</res-ref-name>
-      <res-type>javax.jms.ConnectionFactory</res-type>
-      <res-auth>Container</res-auth>
-    </resource-ref>
-    <resource-ref>
-      <res-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/queueCoonnectionFactory</res-ref-name>
-      <res-type>javax.jms.QueueConnectionFactory</res-type>
-      <res-auth>Container</res-auth>
-    </resource-ref>
-    <resource-ref>
-      <res-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/topicCoonnectionFactory</res-ref-name>
-      <res-type>javax.jms.TopicConnectionFactory</res-type>
-      <res-auth>Container</res-auth>
-    </resource-ref>
-    <persistence-context-ref>
-      <persistence-context-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/em</persistence-context-ref-name>
-      <persistence-unit-name>openjpa-test-unit</persistence-unit-name>
-    </persistence-context-ref>
-    <persistence-unit-ref>
-      <persistence-unit-ref-name>org.apache.openejb.test.servlet.AnnotatedServlet/emf</persistence-unit-ref-name>
-      <persistence-unit-name>openjpa-test-unit</persistence-unit-name>
-    </persistence-unit-ref>
 </web-app>