diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/build.properties b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/build.properties
deleted file mode 100644
index 0f8adf8..0000000
--- a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/build.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-<!--
-
-    Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-
-<property name="module" value="cdi"/>
-<property name="appname" value="${module}-wab"/>
-<property name="assemble" value="${build.classes.dir}/archive"/>
-<property name="contextroot" value="/test"/>
-<property name="beans.xml" value="descriptor/beans.xml"/>
-<property name="web.xml" value="descriptor/web.xml"/>
-<property name="bundle.descriptor" value="descriptor/MANIFEST.MF"/>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/README b/appserver/tests/appserv-tests/devtests/deployment/annotation/README
deleted file mode 100644
index aa903d8..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/README
+++ /dev/null
@@ -1,74 +0,0 @@
-How to add a new annotation test using Junit
-============================================
-There are two ways to add new tests to annotation:
-A. Add a new test by using golden files comparison:
---------------------------------------------------
-1. make a new dir appserv-tests/deployment/annotation/<your new directory>
-2. cp annotation/ejb/build.xml <your new directory>
-3. modify ant project name in build.xml and test name under junit
-4. create java files (ejbs, etc) for annotation testing in 
-   <your new directory>/src
-5. create a java files under devtests.util.AnnotationTest
-    import devtests.deployment.util.AnnotationTest;
-                                                                                
-    public class InheritanceAnnotationTest extends AnnotationTest {
-        public InheritanceAnnotationTest(String name) {
-            super(name);
-            // you may need override ModuleType type here
-        }
-    }
-   Please make sure that the test class name is unique among these
-   annotation test. In general, I will prepend directory name.
-6. put golden files for ejb-jar.xml, webservices.xml,etc under
-   <your new directory>/goldenfiles
-7. update build.xml if necessary for classpath in targets: compile, test
-8. update appserv-tests/deployment/annotation/build.xml to include your new test
-
-B. Add a new test by testing explicit annotation info:
-------------------------------------------------------
-1. make a new dir appserv-tests/deployment/annotation/<your new directory>
-2. cp annotation/webservice/build.xml <your new directory>
-3. modify ant project name in build.xml
-4. create java files (ejbs, etc) for annotation testing in 
-   <your new directory>/src
-5. create your new JUnit TestCase java class by
-   i) subclassing devtests.deployment.util.AnnotationTest
-   ii) include the following import statements:
-	import junit.framework.Assert;
-	import devtests.deployment.util.AnnotationTest;
-   iii) put all testing codes in one or more public methods with no parameter
-        method name starting with "test"
-        If you want your class compare golden files in addition to your
-	new tests, then please use a test name other than "testDescriptor".
-	If you don't want your class compare golden files, then please
-	have overrided the "testDescriptor" method.
-   iv) Inside the testing method, one can invoke the test assertion by
-       invoking static methods in Assert class.
-       For instance,
-		Assert.assertTrue(String errMsg, boolean condition);
-		Assert.assertNull(String errMsg, Object obj);
-		Assert.assertNotNull(String errMsg, Object obj);
-		Assert.assertEquals(int expected, int actual);
-	One find more details in junit javadoc.
-6. update build.xml
-   i) classpath in targets: compile, test
-   ii) update the name attribute in test target to your new class:
-	<test name ="<your new class"> 
-7. update appserv-tests/deployment/annotation/build.xml to include your new test
-
-How to run the test:
---------------------
-1. *** Due to an issue in ant
-	(http://ant.apache.org/faq.html#delegating-classloader),
-   we need to set CLASSPATH explicitly to include junit.jar in your environment
-   before running the test.
-2. If you are using ant 1.5.4, then please also include xalan.jar version 2.0
-   or later in your classpath.
-3. cd appserv-tests/deployment/annotation/
-4. ant
-
-How to view the result:
------------------------
-A short summary can be found in results.html.
-The detailed test results can be found in
-	appserv-tests/deployment/annotation/report/html/index.html
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/appclient/build.xml b/appserver/tests/appserv-tests/devtests/deployment/annotation/appclient/build.xml
deleted file mode 100644
index 3fd6d56..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/appclient/build.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="AppClientAnnotationTest" default="all" basedir=".">
-  &commonBuild;
-
-  <property name="src" location="src"/>
-
-  <target name="private-all">
-    <antcall target="cleanXml"/>
-    <antcall target="compile"/>
-    <antcall target="test"/>
-  </target>
-
-  <target name="cleanXml">
-    <delete dir="${basedir}/META-INF"/>
-  </target>
-
-  <target name="prepare">
-    <mkdir dir="${build}"/>
-  </target>
-
-  <target name="compile" depends="init, prepare, compile.util">
-    <javac srcdir="${src}" destdir="${build}" debug="on">
-      <classpath>
-        <path refid="gfv3.classpath"/>
-        <pathelement location="${junit.jar}"/>
-        <pathelement path="${testsRoot}/util/build"/>
-      </classpath>
-    </javac>
-  </target>
-
-  <target name="test" depends="compile">
-    <mkdir dir="${annotation.report.dir}"/>
-    <junit printsummary="yes" haltonerror="no" haltonfailure="no" fork="true">
-      <formatter type="plain" usefile="false"/>
-      <formatter type="xml"/>
-      <test name="AppClientAnnotationTest"
-          todir="${annotation.report.dir}"/>
-      <jvmarg value="-Dcom.sun.aas.installRoot=${inst}"/>
-      <jvmarg value="-DtestClasspath=${build}"/>
-      <jvmarg value="-DworkDir=${basedir}"/>
-      <classpath>
-        <path refid="test.compile.classpath"/>
-        <path refid="gfv3.classpath"/>
-        <pathelement path="${testsRoot}/util/build"/>
-        <pathelement path="${build}"/>
-        <pathelement path="${junit.jar}"/>
-      </classpath>
-    </junit>
-  </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/appclient/goldenfiles/application-client.xml b/appserver/tests/appserv-tests/devtests/deployment/annotation/appclient/goldenfiles/application-client.xml
deleted file mode 100644
index d9d9cdb..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/appclient/goldenfiles/application-client.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<application-client xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" metadata-complete="true" version="7" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/application-client_7.xsd" xmlns="http://xmlns.jcp.org/xml/ns/javaee">
-  <ejb-ref>
-    <ejb-ref-name>test.Client/sful1</ejb-ref-name>
-    <ejb-ref-type>Session</ejb-ref-type>
-    <remote>test.ejb.stateful.SFHello</remote>
-    <injection-target>
-      <injection-target-class>test.Client</injection-target-class>
-      <injection-target-name>sful1</injection-target-name>
-    </injection-target>
-  </ejb-ref>
-  <ejb-ref>
-    <ejb-ref-name>ejb/sfhello</ejb-ref-name>
-    <ejb-ref-type>Session</ejb-ref-type>
-    <remote>test.ejb.stateful.SFHello</remote>
-    <injection-target>
-      <injection-target-class>test.Client</injection-target-class>
-      <injection-target-name>sful2</injection-target-name>
-    </injection-target>
-  </ejb-ref>
-</application-client>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/appclient/src/AppClientAnnotationTest.java b/appserver/tests/appserv-tests/devtests/deployment/annotation/appclient/src/AppClientAnnotationTest.java
deleted file mode 100644
index ebf2219..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/appclient/src/AppClientAnnotationTest.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-import java.util.HashSet;
-import java.util.Set;
-import javax.enterprise.deploy.shared.ModuleType;
-
-import devtests.deployment.util.AnnotationTest;
-
-public class AppClientAnnotationTest extends AnnotationTest {
-    public AppClientAnnotationTest(String name) {
-        super(name);
-        type = ModuleType.CAR;
-        componentClassNames.add("test.Client");
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/appclient/src/Client.java b/appserver/tests/appserv-tests/devtests/deployment/annotation/appclient/src/Client.java
deleted file mode 100644
index 73c84d2..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/appclient/src/Client.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package test;
-
-import jakarta.ejb.EJB;
-
-import test.ejb.stateful.SFHello;
-
-public class Client {
-    private static @EJB SFHello sful1;
-    private static @EJB(name="ejb/sfhello") SFHello sful2;
-
-    public void main(String[] args) {
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/appclient/src/SFHello.java b/appserver/tests/appserv-tests/devtests/deployment/annotation/appclient/src/SFHello.java
deleted file mode 100644
index c50eaf2..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/appclient/src/SFHello.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package test.ejb.stateful;
-
-/**
- * @author Shing Wai Chan
- */
-public interface SFHello {
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/build.xml b/appserver/tests/appserv-tests/devtests/deployment/annotation/build.xml
deleted file mode 100644
index 6fb8aa0..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/build.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../config/common.xml">
-]>
-
-<project name="ejb" default="all" basedir=".">
-
-        &commonBuild;
-
-        <target name="private-all">
-                <delete dir="${annotation.report.dir}"/>
-
-                <ant dir="ejb" target="private-all">
-                        <property name="build" value="${build}/ejb"/>
-                </ant>
-                <ant dir="appclient" target="private-all">
-                        <property name="build" value="${build}/appclient"/>
-                </ant>
-                <ant dir="web" target="private-all">
-                        <property name="build" value="${build}/web"/>
-                </ant>
-                <ant dir="inheritance" target="private-all">
-                        <property name="build" value="${build}/inheritance"/>
-                </ant>
-
-        </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/build.xml b/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/build.xml
deleted file mode 100644
index 60df51f..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/build.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="EjbAnnotationTest" default="all" basedir=".">
-  &commonBuild;
-
-  <property name="src" location="src"/>
-
-  <target name="private-all">
-    <antcall target="cleanXml"/>
-    <antcall target="compile"/>
-    <antcall target="test"/>
-  </target>
-
-  <target name="cleanXml">
-    <delete dir="${basedir}/META-INF"/>
-  </target>
-
-  <target name="prepare">
-    <mkdir dir="${build}"/>
-  </target>
-
-  <target name="compile" depends="init, prepare, compile.util">
-    <javac srcdir="${src}" destdir="${build}" debug="on">
-      <classpath>
-        <path refid="gfv3.classpath" />
-        <pathelement location="${junit.jar}"/>
-        <pathelement path="${testsRoot}/util/build"/>
-      </classpath>
-    </javac>
-  </target>
-
-  <target name="test" depends="compile">
-    <mkdir dir="${annotation.report.dir}"/>
-    <junit printsummary="yes" haltonerror="no" haltonfailure="no" fork="true">
-      <formatter type="plain" usefile="false"/>
-      <formatter type="xml"/>
-      <test name="EjbAnnotationTest"
-          todir="${annotation.report.dir}"/>
-      <jvmarg value="-Dcom.sun.aas.installRoot=${inst}"/>
-      <jvmarg value="-DtestClasspath=${build}"/>
-      <jvmarg value="-DworkDir=${basedir}"/>
-      <classpath>
-        <path refid="test.compile.classpath"/>
-        <path refid="gfv3.classpath"/>
-        <pathelement path="${testsRoot}/util/build"/>
-        <pathelement path="${build}"/>
-        <pathelement path="${junit.jar}"/>
-      </classpath>
-    </junit>
-  </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/goldenfiles/ejb-jar.xml b/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/goldenfiles/ejb-jar.xml
deleted file mode 100644
index b349c3c..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/goldenfiles/ejb-jar.xml
+++ /dev/null
@@ -1,312 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" metadata-complete="true" version="3.2" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/ejb-jar_3_2.xsd" xmlns="http://xmlns.jcp.org/xml/ns/javaee">
-  <enterprise-beans>
-    <session>
-      <display-name>myStatefulTest1</display-name>
-      <ejb-name>myStatefulTest1</ejb-name>
-      <business-remote>test.ejb.stateful.SFHello</business-remote>
-      <ejb-class>test.ejb.stateful.StatefulTest1</ejb-class>
-      <session-type>Stateful</session-type>
-      <concurrency-management-type>Container</concurrency-management-type>
-      <transaction-type>Bean</transaction-type>
-      <ejb-local-ref>
-        <ejb-ref-name>test.ejb.stateful.StatefulTest1/slHello1</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <local>test.ejb.stateless.SLHello</local>
-        <ejb-link>myStatelessTest1</ejb-link>
-        <injection-target>
-          <injection-target-class>test.ejb.stateful.StatefulTest1</injection-target-class>
-          <injection-target-name>slHello1</injection-target-name>
-        </injection-target>
-      </ejb-local-ref>
-      <ejb-local-ref>
-        <ejb-ref-name>test.ejb.stateful.StatefulTest1/slHello2</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <local>test.ejb.stateless.SLHello</local>
-        <ejb-link>myStatelessTest1</ejb-link>
-        <injection-target>
-          <injection-target-class>test.ejb.stateful.StatefulTest1</injection-target-class>
-          <injection-target-name>slHello2</injection-target-name>
-        </injection-target>
-      </ejb-local-ref>
-      <security-identity>
-        <use-caller-identity/>
-      </security-identity>
-      <passivation-capable>true</passivation-capable>
-    </session>
-    <session>
-      <display-name>StatefulTest2</display-name>
-      <ejb-name>StatefulTest2</ejb-name>
-      <business-remote>test.ejb.stateful.SFHello</business-remote>
-      <ejb-class>StatefulTest2</ejb-class>
-      <session-type>Stateful</session-type>
-      <concurrency-management-type>Container</concurrency-management-type>
-      <transaction-type>Container</transaction-type>
-      <security-identity>
-        <use-caller-identity/>
-      </security-identity>
-      <passivation-capable>true</passivation-capable>
-    </session>
-    <session>
-      <display-name>myStatelessTest1</display-name>
-      <ejb-name>myStatelessTest1</ejb-name>
-      <business-local>test.ejb.stateless.SLHello</business-local>
-      <ejb-class>test.ejb.stateless.StatelessTest1</ejb-class>
-      <session-type>Stateless</session-type>
-      <transaction-type>Container</transaction-type>
-      <ejb-local-ref>
-        <ejb-ref-name>test.ejb.stateless.InterceptorA/slHello</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <local>test.ejb.stateless.SLHello</local>
-        <ejb-link>myStatelessTest1</ejb-link>
-        <injection-target>
-          <injection-target-class>test.ejb.stateless.InterceptorA</injection-target-class>
-          <injection-target-name>slHello</injection-target-name>
-        </injection-target>
-      </ejb-local-ref>
-      <resource-ref>
-        <res-ref-name>jdbc/myDS</res-ref-name>
-        <res-type>javax.sql.DataSource</res-type>
-        <res-auth>Container</res-auth>
-        <res-sharing-scope>Shareable</res-sharing-scope>
-        <lookup-name>java:comp/DefaultDataSource</lookup-name>
-      </resource-ref>
-      <resource-env-ref>
-        <resource-env-ref-name>test.ejb.stateless.InterceptorB/sessionCtx</resource-env-ref-name>
-        <resource-env-ref-type>jakarta.ejb.SessionContext</resource-env-ref-type>
-        <injection-target>
-          <injection-target-class>test.ejb.stateless.InterceptorB</injection-target-class>
-          <injection-target-name>sessionCtx</injection-target-name>
-        </injection-target>
-      </resource-env-ref>
-      <security-identity>
-        <run-as>
-          <role-name>user</role-name>
-        </run-as>
-      </security-identity>
-    </session>
-    <session>
-      <display-name>StatelessTest2</display-name>
-      <ejb-name>StatelessTest2</ejb-name>
-      <business-local>test.ejb.stateless.SLHello</business-local>
-      <ejb-class>test.ejb.stateless.StatelessTest2</ejb-class>
-      <session-type>Stateless</session-type>
-      <transaction-type>Container</transaction-type>
-      <security-identity>
-        <use-caller-identity/>
-      </security-identity>
-    </session>
-  </enterprise-beans>
-  <interceptors>
-    <interceptor>
-      <interceptor-class>test.ejb.stateless.InterceptorB</interceptor-class>
-      <around-invoke>
-        <class>test.ejb.stateless.InterceptorB</class>
-        <method-name>aroundInvokeB</method-name>
-      </around-invoke>
-      <around-invoke>
-        <class>test.ejb.stateless.InterceptorA</class>
-        <method-name>aroundInvokeA</method-name>
-      </around-invoke>
-      <post-construct>
-        <lifecycle-callback-class>test.ejb.stateless.InterceptorA</lifecycle-callback-class>
-        <lifecycle-callback-method>postConstruct</lifecycle-callback-method>
-      </post-construct>
-      <pre-destroy>
-        <lifecycle-callback-class>test.ejb.stateless.InterceptorB</lifecycle-callback-class>
-        <lifecycle-callback-method>preDestroy</lifecycle-callback-method>
-      </pre-destroy>
-    </interceptor>
-  </interceptors>
-  <assembly-descriptor>
-    <security-role>
-      <role-name>j2ee</role-name>
-    </security-role>
-    <security-role>
-      <role-name>staff</role-name>
-    </security-role>
-    <security-role>
-      <role-name>user</role-name>
-    </security-role>
-    <method-permission>
-      <role-name>staff</role-name>
-      <method>
-        <ejb-name>myStatelessTest1</ejb-name>
-        <method-intf>Local</method-intf>
-        <method-name>sayGoodAfternoon</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-      <method>
-        <ejb-name>myStatelessTest1</ejb-name>
-        <method-intf>Local</method-intf>
-        <method-name>sayHello</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-    </method-permission>
-    <method-permission>
-      <role-name>j2ee</role-name>
-      <method>
-        <ejb-name>myStatelessTest1</ejb-name>
-        <method-intf>Local</method-intf>
-        <method-name>sayHello</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-    </method-permission>
-    <method-permission>
-      <unchecked/>
-      <method>
-        <ejb-name>myStatelessTest1</ejb-name>
-        <method-intf>Local</method-intf>
-        <method-name>sayGoodMorning</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-    </method-permission>
-    <method-permission>
-      <role-name>staff</role-name>
-      <method>
-        <ejb-name>StatelessTest2</ejb-name>
-        <method-intf>Local</method-intf>
-        <method-name>sayHello</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-    </method-permission>
-    <method-permission>
-      <role-name>j2ee</role-name>
-      <method>
-        <ejb-name>StatelessTest2</ejb-name>
-        <method-intf>Local</method-intf>
-        <method-name>sayHello</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-    </method-permission>
-    <method-permission>
-      <unchecked/>
-      <method>
-        <ejb-name>StatelessTest2</ejb-name>
-        <method-intf>Local</method-intf>
-        <method-name>sayGoodMorning</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-    </method-permission>
-    <container-transaction>
-      <description>Required</description>
-      <method>
-        <ejb-name>myStatelessTest1</ejb-name>
-        <method-intf>Local</method-intf>
-        <method-name>sayGoodAfternoon</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-      <trans-attribute>Required</trans-attribute>
-    </container-transaction>
-    <container-transaction>
-      <description>Required</description>
-      <method>
-        <ejb-name>myStatelessTest1</ejb-name>
-        <method-intf>Local</method-intf>
-        <method-name>sayHello</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-      <trans-attribute>Required</trans-attribute>
-    </container-transaction>
-    <container-transaction>
-      <description>RequiresNew</description>
-      <method>
-        <ejb-name>myStatelessTest1</ejb-name>
-        <method-intf>Local</method-intf>
-        <method-name>sayGoodMorning</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-      <trans-attribute>RequiresNew</trans-attribute>
-    </container-transaction>
-    <container-transaction>
-      <description>Mandatory</description>
-      <method>
-        <ejb-name>StatelessTest2</ejb-name>
-        <method-intf>Local</method-intf>
-        <method-name>sayGoodAfternoon</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-      <trans-attribute>Mandatory</trans-attribute>
-    </container-transaction>
-    <container-transaction>
-      <description>Mandatory</description>
-      <method>
-        <ejb-name>StatelessTest2</ejb-name>
-        <method-intf>Local</method-intf>
-        <method-name>sayHello</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-      <trans-attribute>Mandatory</trans-attribute>
-    </container-transaction>
-    <container-transaction>
-      <description>RequiresNew</description>
-      <method>
-        <ejb-name>StatelessTest2</ejb-name>
-        <method-intf>Local</method-intf>
-        <method-name>sayGoodMorning</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-      <trans-attribute>RequiresNew</trans-attribute>
-    </container-transaction>
-    <interceptor-binding>
-      <ejb-name>myStatelessTest1</ejb-name>
-      <interceptor-order>
-        <interceptor-class>test.ejb.stateless.InterceptorB</interceptor-class>
-      </interceptor-order>
-    </interceptor-binding>
-    <exclude-list>
-      <method>
-        <ejb-name>StatelessTest2</ejb-name>
-        <method-intf>Local</method-intf>
-        <method-name>sayGoodAfternoon</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-    </exclude-list>
-  </assembly-descriptor>
-</ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/EjbAnnotationTest.java b/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/EjbAnnotationTest.java
deleted file mode 100644
index 2ed4674..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/EjbAnnotationTest.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-import devtests.deployment.util.AnnotationTest;
-
-public class EjbAnnotationTest extends AnnotationTest {
-    public EjbAnnotationTest(String name) {
-        super(name);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/InterceptorA.java b/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/InterceptorA.java
deleted file mode 100644
index 85cb042..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/InterceptorA.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package test.ejb.stateless;
-
-import jakarta.annotation.PostConstruct;
-import jakarta.annotation.Resource;
-import jakarta.ejb.EJB;
-import jakarta.interceptor.AroundInvoke;
-import jakarta.interceptor.InvocationContext;
-import javax.sql.DataSource;
-
-@Resource(name="jdbc/myDS", type=DataSource.class)
-public class InterceptorA {
-    @EJB(beanName="myStatelessTest1") private SLHello slHello;
-
-    @AroundInvoke
-    Object aroundInvokeA(InvocationContext ctx) {
-        return null;
-    }
-
-    @PostConstruct
-    void postConstruct() {
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/InterceptorB.java b/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/InterceptorB.java
deleted file mode 100644
index c8bdc0a..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/InterceptorB.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package test.ejb.stateless;
-
-import jakarta.annotation.PreDestroy;
-import jakarta.annotation.Resource;
-import jakarta.ejb.SessionContext;
-import jakarta.interceptor.AroundInvoke;
-import jakarta.interceptor.InvocationContext;
-
-public class InterceptorB extends InterceptorA {
-    @Resource SessionContext sessionCtx;
-
-    @AroundInvoke
-    Object aroundInvokeB(InvocationContext ctx) {
-        return null;
-    }
-
-    @PreDestroy
-    void preDestroy() {
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/SFHello.java b/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/SFHello.java
deleted file mode 100644
index c50eaf2..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/SFHello.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package test.ejb.stateful;
-
-/**
- * @author Shing Wai Chan
- */
-public interface SFHello {
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/SLHello.java b/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/SLHello.java
deleted file mode 100644
index 8a11bc7..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/SLHello.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package test.ejb.stateless;
-
-/**
- * @author Shing Wai Chan
- */
-public interface SLHello {
-    public String sayHello(String message);
-    public String sayGoodMorning(String message);
-    public String sayGoodAfternoon(String message);
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/StatefulTest1.java b/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/StatefulTest1.java
deleted file mode 100644
index dcca8b2..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/StatefulTest1.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package test.ejb.stateful;
-
-import jakarta.ejb.EJB;
-import jakarta.ejb.Remote;
-import jakarta.ejb.Stateful;
-import jakarta.ejb.TransactionManagement;
-import jakarta.ejb.TransactionManagementType;
-
-import test.ejb.stateless.*;
-
-/**
- * @author Shing Wai Chan
- */
-@TransactionManagement(value=TransactionManagementType.BEAN)
-@Stateful(name="myStatefulTest1")
-@Remote({SFHello.class})
-public class StatefulTest1 implements SFHello {
-    @EJB(beanName="myStatelessTest1") private SLHello slHello1;
-    @EJB(beanName="myStatelessTest1") private SLHello slHello2;
-
-    public StatefulTest1() {
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/StatefulTest2.java b/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/StatefulTest2.java
deleted file mode 100644
index c870de7..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/StatefulTest2.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-import jakarta.ejb.Stateful;
-import jakarta.ejb.Remote;
-import jakarta.ejb.TransactionManagementType;
-
-import test.ejb.stateful.SFHello;
-
-/**
- * @author Shing Wai Chan
- */
-@Remote({SFHello.class})
-@Stateful
-public class StatefulTest2 implements SFHello {
-    public StatefulTest2() {
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/StatelessTest1.java b/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/StatelessTest1.java
deleted file mode 100644
index d4708a5..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/StatelessTest1.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package test.ejb.stateless;
-
-import jakarta.annotation.security.PermitAll;
-import jakarta.annotation.security.RolesAllowed;
-import jakarta.annotation.security.RunAs;
-import jakarta.ejb.Local;
-import jakarta.ejb.Stateless;
-import jakarta.ejb.TransactionAttribute;
-import jakarta.ejb.TransactionAttributeType;
-import jakarta.ejb.TransactionManagementType;
-import jakarta.interceptor.Interceptors;
-
-/**
- * @author Shing Wai Chan
- */
-@Stateless(name="myStatelessTest1")
-@Local({SLHello.class})
-@TransactionAttribute(value=TransactionAttributeType.REQUIRED)
-@RolesAllowed(value={"staff"})
-@RunAs(value="user")
-@Interceptors(InterceptorB.class)
-public class StatelessTest1 implements SLHello {
-    public StatelessTest1() {
-    }
-
-    @RolesAllowed(value={"j2ee", "staff"})
-    public String sayHello(String message) {
-        return "Hello, " + message + "!";
-    }
-
-    @PermitAll
-    @TransactionAttribute(value=TransactionAttributeType.REQUIRES_NEW)
-    public String sayGoodMorning(String message) {
-        return "Good morning, " + message + "!";
-    }
-
-    public String sayGoodAfternoon(String message) {
-        return "Good afternoon, " + message + "!";
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/StatelessTest2.java b/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/StatelessTest2.java
deleted file mode 100644
index 79165d6..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/ejb/src/StatelessTest2.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package test.ejb.stateless;
-
-import jakarta.annotation.security.DenyAll;
-import jakarta.annotation.security.PermitAll;
-import jakarta.annotation.security.RolesAllowed;
-import jakarta.ejb.Local;
-import jakarta.ejb.Stateless;
-import jakarta.ejb.TransactionAttribute;
-import jakarta.ejb.TransactionAttributeType;
-
-/**
- * @author Shing Wai Chan
- */
-@Stateless
-@Local({SLHello.class})
-@TransactionAttribute(value=TransactionAttributeType.MANDATORY)
-public class StatelessTest2 implements SLHello {
-    public StatelessTest2() {
-    }
-
-    @RolesAllowed(value={"j2ee", "staff"})
-    public String sayHello(String message) {
-        return null;
-    }
-
-    @PermitAll
-    @TransactionAttribute(value=TransactionAttributeType.REQUIRES_NEW)
-    public String sayGoodMorning(String message) {
-        return null;
-    }
-
-    @DenyAll
-    public String sayGoodAfternoon(String message) {
-        return null;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/inheritance/build.xml b/appserver/tests/appserv-tests/devtests/deployment/annotation/inheritance/build.xml
deleted file mode 100644
index 436f082..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/inheritance/build.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="InheritanceAnnotationTest" default="all" basedir=".">
-  &commonBuild;
-
-  <property name="src" location="src"/>
-
-  <target name="private-all">
-    <antcall target="cleanXml"/>
-    <antcall target="compile"/>
-    <antcall target="test"/>
-  </target>
-
-  <target name="cleanXml">
-    <delete dir="${basedir}/META-INF"/>
-  </target>
-
-  <target name="prepare">
-    <mkdir dir="${build}"/>
-  </target>
-
-  <target name="compile" depends="init, prepare, compile.util">
-    <javac srcdir="${src}" destdir="${build}" debug="on">
-      <classpath>
-        <path refid="gfv3.classpath"/>
-        <pathelement location="${junit.jar}"/>
-        <pathelement path="${testsRoot}/util/build"/>
-      </classpath>
-    </javac>
-  </target>
-
-  <target name="test" depends="compile">
-    <mkdir dir="${annotation.report.dir}"/>
-    <junit printsummary="yes" haltonerror="no" haltonfailure="no" fork="true">
-      <formatter type="plain" usefile="false"/>
-      <formatter type="xml"/>
-      <test name="InheritanceAnnotationTest"
-          todir="${annotation.report.dir}"/>
-      <jvmarg value="-Dcom.sun.aas.installRoot=${inst}"/>
-      <jvmarg value="-DtestClasspath=${build}"/>
-      <jvmarg value="-DworkDir=${basedir}"/>
-      <classpath>
-        <path refid="gfv3.classpath"/>
-        <pathelement path="${testsRoot}/util/build"/>
-        <pathelement path="${build}"/>
-        <pathelement path="${junit.jar}"/>
-      </classpath>
-    </junit>
-  </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/inheritance/goldenfiles/ejb-jar.xml b/appserver/tests/appserv-tests/devtests/deployment/annotation/inheritance/goldenfiles/ejb-jar.xml
deleted file mode 100644
index 482ed70..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/inheritance/goldenfiles/ejb-jar.xml
+++ /dev/null
@@ -1,433 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" metadata-complete="true" version="3.2" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/ejb-jar_3_2.xsd" xmlns="http://xmlns.jcp.org/xml/ns/javaee">
-  <enterprise-beans>
-    <session>
-      <display-name>StatefulTest2</display-name>
-      <ejb-name>StatefulTest2</ejb-name>
-      <business-remote>test.ejb.SFHello1</business-remote>
-      <ejb-class>StatefulTest2</ejb-class>
-      <session-type>Stateful</session-type>
-      <concurrency-management-type>Container</concurrency-management-type>
-      <transaction-type>Container</transaction-type>
-      <ejb-local-ref>
-        <ejb-ref-name>test.ejb.StatefulTest/mySfHello</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <local>test.ejb.SFHello</local>
-        <ejb-link>StatefulTest</ejb-link>
-        <injection-target>
-          <injection-target-class>test.ejb.StatefulTest</injection-target-class>
-          <injection-target-name>mySfHello</injection-target-name>
-        </injection-target>
-      </ejb-local-ref>
-      <resource-ref>
-        <res-ref-name>myDataSource</res-ref-name>
-        <res-type>javax.sql.DataSource</res-type>
-        <res-auth>Container</res-auth>
-        <res-sharing-scope>Shareable</res-sharing-scope>
-        <lookup-name>java:comp/DefaultDataSource</lookup-name>
-      </resource-ref>
-      <resource-env-ref>
-        <description>testing</description>
-        <resource-env-ref-name>test.ejb.StatefulTest/ejbContext</resource-env-ref-name>
-        <resource-env-ref-type>jakarta.ejb.EJBContext</resource-env-ref-type>
-        <injection-target>
-          <injection-target-class>test.ejb.StatefulTest</injection-target-class>
-          <injection-target-name>ejbContext</injection-target-name>
-        </injection-target>
-      </resource-env-ref>
-      <resource-env-ref>
-        <resource-env-ref-name>sfContext</resource-env-ref-name>
-        <resource-env-ref-type>jakarta.ejb.EJBContext</resource-env-ref-type>
-        <injection-target>
-          <injection-target-class>StatefulTest2</injection-target-class>
-          <injection-target-name>ejbContext</injection-target-name>
-        </injection-target>
-      </resource-env-ref>
-      <resource-env-ref>
-        <resource-env-ref-name>test.ejb.StatefulTest/ejbContext2</resource-env-ref-name>
-        <resource-env-ref-type>jakarta.ejb.EJBContext</resource-env-ref-type>
-        <injection-target>
-          <injection-target-class>test.ejb.StatefulTest</injection-target-class>
-          <injection-target-name>ejbContext2</injection-target-name>
-        </injection-target>
-      </resource-env-ref>
-      <resource-env-ref>
-        <resource-env-ref-name>sfContext2</resource-env-ref-name>
-        <resource-env-ref-type>jakarta.ejb.EJBContext</resource-env-ref-type>
-        <injection-target>
-          <injection-target-class>StatefulTest2</injection-target-class>
-          <injection-target-name>ejbContext2</injection-target-name>
-        </injection-target>
-      </resource-env-ref>
-      <resource-env-ref>
-        <resource-env-ref-name>test.ejb.StatefulTest/ejbContext3</resource-env-ref-name>
-        <resource-env-ref-type>jakarta.ejb.EJBContext</resource-env-ref-type>
-        <injection-target>
-          <injection-target-class>test.ejb.StatefulTest</injection-target-class>
-          <injection-target-name>ejbContext3</injection-target-name>
-        </injection-target>
-      </resource-env-ref>
-      <security-identity>
-        <run-as>
-          <role-name>staff</role-name>
-        </run-as>
-      </security-identity>
-      <passivation-capable>true</passivation-capable>
-    </session>
-    <session>
-      <display-name>myStatefulTest</display-name>
-      <ejb-name>myStatefulTest</ejb-name>
-      <business-remote>test.ejb.SFHello1</business-remote>
-      <ejb-class>test.ejb.StatefulTest1</ejb-class>
-      <session-type>Stateful</session-type>
-      <concurrency-management-type>Container</concurrency-management-type>
-      <transaction-type>Container</transaction-type>
-      <ejb-local-ref>
-        <ejb-ref-name>test.ejb.StatefulTest1/sfHello</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <local>test.ejb.SFHello</local>
-        <ejb-link>StatefulTest</ejb-link>
-        <injection-target>
-          <injection-target-class>test.ejb.StatefulTest1</injection-target-class>
-          <injection-target-name>sfHello</injection-target-name>
-        </injection-target>
-      </ejb-local-ref>
-      <ejb-local-ref>
-        <ejb-ref-name>test.ejb.StatefulTest/mySfHello</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <local>test.ejb.SFHello</local>
-        <ejb-link>StatefulTest</ejb-link>
-        <injection-target>
-          <injection-target-class>test.ejb.StatefulTest</injection-target-class>
-          <injection-target-name>mySfHello</injection-target-name>
-        </injection-target>
-      </ejb-local-ref>
-      <resource-ref>
-        <res-ref-name>myDataSource</res-ref-name>
-        <res-type>javax.sql.DataSource</res-type>
-        <res-auth>Container</res-auth>
-        <res-sharing-scope>Shareable</res-sharing-scope>
-        <lookup-name>java:comp/DefaultDataSource</lookup-name>
-      </resource-ref>
-      <resource-ref>
-        <res-ref-name>myDataSource1</res-ref-name>
-        <res-type>javax.sql.DataSource</res-type>
-        <res-auth>Container</res-auth>
-        <res-sharing-scope>Shareable</res-sharing-scope>
-        <lookup-name>java:comp/DefaultDataSource</lookup-name>
-      </resource-ref>
-      <resource-env-ref>
-        <description>testing</description>
-        <resource-env-ref-name>test.ejb.StatefulTest/ejbContext</resource-env-ref-name>
-        <resource-env-ref-type>jakarta.ejb.EJBContext</resource-env-ref-type>
-        <injection-target>
-          <injection-target-class>test.ejb.StatefulTest</injection-target-class>
-          <injection-target-name>ejbContext</injection-target-name>
-        </injection-target>
-      </resource-env-ref>
-      <resource-env-ref>
-        <resource-env-ref-name>sfEjbContext</resource-env-ref-name>
-        <resource-env-ref-type>jakarta.ejb.EJBContext</resource-env-ref-type>
-        <injection-target>
-          <injection-target-class>test.ejb.StatefulTest1</injection-target-class>
-          <injection-target-name>ejbContext</injection-target-name>
-        </injection-target>
-      </resource-env-ref>
-      <resource-env-ref>
-        <resource-env-ref-name>sfEjbContext2</resource-env-ref-name>
-        <resource-env-ref-type>jakarta.ejb.EJBContext</resource-env-ref-type>
-        <injection-target>
-          <injection-target-class>test.ejb.StatefulTest1</injection-target-class>
-          <injection-target-name>ejbContext2</injection-target-name>
-        </injection-target>
-      </resource-env-ref>
-      <resource-env-ref>
-        <resource-env-ref-name>sfEjbContext3</resource-env-ref-name>
-        <resource-env-ref-type>jakarta.ejb.EJBContext</resource-env-ref-type>
-        <injection-target>
-          <injection-target-class>test.ejb.StatefulTest1</injection-target-class>
-          <injection-target-name>ejbContext3</injection-target-name>
-        </injection-target>
-      </resource-env-ref>
-      <security-identity>
-        <use-caller-identity/>
-      </security-identity>
-      <passivation-capable>true</passivation-capable>
-    </session>
-    <session>
-      <display-name>StatefulTest</display-name>
-      <ejb-name>StatefulTest</ejb-name>
-      <business-local>test.ejb.SFHello</business-local>
-      <ejb-class>test.ejb.StatefulTest</ejb-class>
-      <session-type>Stateful</session-type>
-      <concurrency-management-type>Container</concurrency-management-type>
-      <transaction-type>Container</transaction-type>
-      <ejb-local-ref>
-        <ejb-ref-name>test.ejb.StatefulTest/mySfHello</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <local>test.ejb.SFHello</local>
-        <ejb-link>StatefulTest</ejb-link>
-        <injection-target>
-          <injection-target-class>test.ejb.StatefulTest</injection-target-class>
-          <injection-target-name>mySfHello</injection-target-name>
-        </injection-target>
-      </ejb-local-ref>
-      <resource-ref>
-        <res-ref-name>myDataSource</res-ref-name>
-        <res-type>javax.sql.DataSource</res-type>
-        <res-auth>Container</res-auth>
-        <res-sharing-scope>Shareable</res-sharing-scope>
-        <lookup-name>java:comp/DefaultDataSource</lookup-name>
-      </resource-ref>
-      <resource-env-ref>
-        <description>testing</description>
-        <resource-env-ref-name>test.ejb.StatefulTest/ejbContext</resource-env-ref-name>
-        <resource-env-ref-type>jakarta.ejb.EJBContext</resource-env-ref-type>
-        <injection-target>
-          <injection-target-class>test.ejb.StatefulTest</injection-target-class>
-          <injection-target-name>ejbContext</injection-target-name>
-        </injection-target>
-      </resource-env-ref>
-      <resource-env-ref>
-        <resource-env-ref-name>test.ejb.StatefulTest/ejbContext2</resource-env-ref-name>
-        <resource-env-ref-type>jakarta.ejb.EJBContext</resource-env-ref-type>
-        <injection-target>
-          <injection-target-class>test.ejb.StatefulTest</injection-target-class>
-          <injection-target-name>ejbContext2</injection-target-name>
-        </injection-target>
-      </resource-env-ref>
-      <resource-env-ref>
-        <resource-env-ref-name>test.ejb.StatefulTest/ejbContext3</resource-env-ref-name>
-        <resource-env-ref-type>jakarta.ejb.EJBContext</resource-env-ref-type>
-        <injection-target>
-          <injection-target-class>test.ejb.StatefulTest</injection-target-class>
-          <injection-target-name>ejbContext3</injection-target-name>
-        </injection-target>
-      </resource-env-ref>
-      <security-identity>
-        <run-as>
-          <role-name>guest</role-name>
-        </run-as>
-      </security-identity>
-      <passivation-capable>true</passivation-capable>
-    </session>
-  </enterprise-beans>
-  <assembly-descriptor>
-    <security-role>
-      <role-name>staff</role-name>
-    </security-role>
-    <security-role>
-      <role-name>member</role-name>
-    </security-role>
-    <security-role>
-      <role-name>guest</role-name>
-    </security-role>
-    <method-permission>
-      <unchecked/>
-      <method>
-        <ejb-name>StatefulTest2</ejb-name>
-        <method-intf>Remote</method-intf>
-        <method-name>sayGoodAfternoon</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-      <method>
-        <ejb-name>StatefulTest2</ejb-name>
-        <method-intf>Remote</method-intf>
-        <method-name>sayGoodMorning</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-    </method-permission>
-    <method-permission>
-      <role-name>member</role-name>
-      <method>
-        <ejb-name>StatefulTest2</ejb-name>
-        <method-intf>Remote</method-intf>
-        <method-name>sayBye</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-    </method-permission>
-    <method-permission>
-      <unchecked/>
-      <method>
-        <ejb-name>myStatefulTest</ejb-name>
-        <method-intf>Remote</method-intf>
-        <method-name>sayGoodAfternoon</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-      <method>
-        <ejb-name>myStatefulTest</ejb-name>
-        <method-intf>Remote</method-intf>
-        <method-name>sayGoodMorning</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-    </method-permission>
-    <method-permission>
-      <unchecked/>
-      <method>
-        <ejb-name>StatefulTest</ejb-name>
-        <method-intf>Local</method-intf>
-        <method-name>*</method-name>
-      </method>
-    </method-permission>
-    <container-transaction>
-      <description>Required</description>
-      <method>
-        <ejb-name>StatefulTest2</ejb-name>
-        <method-intf>Remote</method-intf>
-        <method-name>sayGoodAfternoon</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-      <trans-attribute>Required</trans-attribute>
-    </container-transaction>
-    <container-transaction>
-      <description>Mandatory</description>
-      <method>
-        <ejb-name>StatefulTest2</ejb-name>
-        <method-intf>Remote</method-intf>
-        <method-name>sayHello</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-      <trans-attribute>Mandatory</trans-attribute>
-    </container-transaction>
-    <container-transaction>
-      <description>Supports</description>
-      <method>
-        <ejb-name>StatefulTest2</ejb-name>
-        <method-intf>Remote</method-intf>
-        <method-name>sayBye</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-      <trans-attribute>Supports</trans-attribute>
-    </container-transaction>
-    <container-transaction>
-      <description>Supports</description>
-      <method>
-        <ejb-name>StatefulTest2</ejb-name>
-        <method-intf>Remote</method-intf>
-        <method-name>sayGoodMorning</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-      <trans-attribute>Supports</trans-attribute>
-    </container-transaction>
-    <container-transaction>
-      <description>Required</description>
-      <method>
-        <ejb-name>myStatefulTest</ejb-name>
-        <method-intf>Remote</method-intf>
-        <method-name>sayGoodAfternoon</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-      <trans-attribute>Required</trans-attribute>
-    </container-transaction>
-    <container-transaction>
-      <description>Mandatory</description>
-      <method>
-        <ejb-name>myStatefulTest</ejb-name>
-        <method-intf>Remote</method-intf>
-        <method-name>sayHello</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-      <trans-attribute>Mandatory</trans-attribute>
-    </container-transaction>
-    <container-transaction>
-      <description>Supports</description>
-      <method>
-        <ejb-name>myStatefulTest</ejb-name>
-        <method-intf>Remote</method-intf>
-        <method-name>sayGoodMorning</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-      <trans-attribute>Supports</trans-attribute>
-    </container-transaction>
-    <container-transaction>
-      <description>Required</description>
-      <method>
-        <ejb-name>StatefulTest</ejb-name>
-        <method-intf>Local</method-intf>
-        <method-name>sayGoodAfternoon</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-      <trans-attribute>Required</trans-attribute>
-    </container-transaction>
-    <container-transaction>
-      <description>RequiresNew</description>
-      <method>
-        <ejb-name>StatefulTest</ejb-name>
-        <method-intf>Local</method-intf>
-        <method-name>sayHello</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-      <trans-attribute>RequiresNew</trans-attribute>
-    </container-transaction>
-    <container-transaction>
-      <description>Required</description>
-      <method>
-        <ejb-name>StatefulTest</ejb-name>
-        <method-intf>Local</method-intf>
-        <method-name>sayGoodNight</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-      <trans-attribute>Required</trans-attribute>
-    </container-transaction>
-    <container-transaction>
-      <description>Supports</description>
-      <method>
-        <ejb-name>StatefulTest</ejb-name>
-        <method-intf>Local</method-intf>
-        <method-name>sayGoodMorning</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-      <trans-attribute>Supports</trans-attribute>
-    </container-transaction>
-  </assembly-descriptor>
-</ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/inheritance/src/InheritanceAnnotationTest.java b/appserver/tests/appserv-tests/devtests/deployment/annotation/inheritance/src/InheritanceAnnotationTest.java
deleted file mode 100644
index 4ff866e..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/inheritance/src/InheritanceAnnotationTest.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-import devtests.deployment.util.AnnotationTest;
-
-public class InheritanceAnnotationTest extends AnnotationTest {
-    public InheritanceAnnotationTest(String name) {
-        super(name);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/inheritance/src/SFHello.java b/appserver/tests/appserv-tests/devtests/deployment/annotation/inheritance/src/SFHello.java
deleted file mode 100644
index d845a02..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/inheritance/src/SFHello.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package test.ejb;
-
-/**
- * @author Shing Wai Chan
- */
-public interface SFHello {
-    public String sayHello(String message);
-    public String sayGoodMorning(String message);
-    public String sayGoodAfternoon(String message);
-    public String sayGoodNight(String message);
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/inheritance/src/SFHello1.java b/appserver/tests/appserv-tests/devtests/deployment/annotation/inheritance/src/SFHello1.java
deleted file mode 100644
index 0a515bc..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/inheritance/src/SFHello1.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package test.ejb;
-
-/**
- * @author Shing Wai Chan
- */
-public interface SFHello1 {
-    public String sayHello(String message);
-    public String sayGoodMorning(String message);
-    public String sayGoodAfternoon(String message);
-    public String sayBye(String message);
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/inheritance/src/StatefulTest.java b/appserver/tests/appserv-tests/devtests/deployment/annotation/inheritance/src/StatefulTest.java
deleted file mode 100644
index 78c03f5..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/inheritance/src/StatefulTest.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package test.ejb;
-
-import jakarta.annotation.Resource;
-import jakarta.annotation.security.PermitAll;
-import jakarta.annotation.security.RunAs;
-import jakarta.ejb.EJB;
-import jakarta.ejb.EJBContext;
-import jakarta.ejb.Local;
-import jakarta.ejb.Local;
-import jakarta.ejb.Stateful;
-import jakarta.ejb.TransactionAttribute;
-import jakarta.ejb.TransactionAttributeType;
-import javax.sql.DataSource;
-
-/**
- * @author Shing Wai Chan
- */
-@Stateful
-@Local({SFHello.class})
-@Resource(name="myDataSource", type=DataSource.class)
-@TransactionAttribute(value=TransactionAttributeType.REQUIRED)
-@RunAs("guest")
-@PermitAll
-public class StatefulTest implements SFHello {
-    @EJB private SFHello mySfHello;
-    private EJBContext ejbContext;
-    private EJBContext ejbContext2;
-
-    public StatefulTest() {
-    }
-
-    @TransactionAttribute(value=TransactionAttributeType.REQUIRES_NEW)
-    public String sayHello(String message) {
-        return "Hello, " + message + "!";
-    }
-
-    @TransactionAttribute(value=TransactionAttributeType.SUPPORTS)
-    public String sayGoodMorning(String message) {
-        return "Good morning, " + message + "!";
-    }
-
-    public String sayGoodAfternoon(String message) {
-        return "Good afternoon, " + message + "!";
-    }
-
-    public String sayGoodNight(String message) {
-        return "Good night, " + message + "!";
-    }
-
-    @Resource(description="testing")
-    private void setEjbContext(EJBContext context) {
-        ejbContext = context;
-    }
-
-    @Resource
-    void setEjbContext2(EJBContext context) {
-        ejbContext2 = context;
-    }
-
-    @Resource
-    void setEjbContext3(EJBContext context) {
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/inheritance/src/StatefulTest1.java b/appserver/tests/appserv-tests/devtests/deployment/annotation/inheritance/src/StatefulTest1.java
deleted file mode 100644
index 8a30968..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/inheritance/src/StatefulTest1.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package test.ejb;
-
-import jakarta.annotation.Resource;
-import jakarta.ejb.EJB;
-import jakarta.ejb.EJBContext;
-import jakarta.ejb.Remote;
-import jakarta.ejb.Stateful;
-import jakarta.ejb.TransactionAttribute;
-import jakarta.ejb.TransactionAttributeType;
-import javax.sql.DataSource;
-
-/**
- * @author Shing Wai Chan
- */
-@Stateful(name="myStatefulTest")
-@Resource(name="myDataSource1", type=DataSource.class)
-@Remote({SFHello1.class})
-public class StatefulTest1 extends StatefulTest implements SFHello1 {
-    @EJB private SFHello sfHello;
-    private EJBContext ejbContext;
-    private EJBContext ejbContext2;
-
-    public StatefulTest1() {
-    }
-
-    @TransactionAttribute(value=TransactionAttributeType.MANDATORY)
-    public String sayHello(String message) {
-        return super.sayHello(message);
-    }
-
-    public String sayBye(String message) {
-        return "Good bye, " + message + "!";
-    }
-
-    @Resource(name="sfEjbContext")
-    private void setEjbContext(EJBContext context) {
-        ejbContext = context;
-    }
-
-    @Resource(name="sfEjbContext2")
-    void setEjbContext2(EJBContext context) {
-        ejbContext = context;
-    }
-
-    @Resource(name="sfEjbContext3")
-    public void setEjbContext3(EJBContext context) {
-        ejbContext = context;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/inheritance/src/StatefulTest2.java b/appserver/tests/appserv-tests/devtests/deployment/annotation/inheritance/src/StatefulTest2.java
deleted file mode 100644
index 0f804bd..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/inheritance/src/StatefulTest2.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-import jakarta.annotation.Resource;
-import jakarta.annotation.security.RolesAllowed;
-import jakarta.annotation.security.RunAs;
-import jakarta.ejb.EJBContext;
-import jakarta.ejb.Remote;
-import jakarta.ejb.Stateful;
-import jakarta.ejb.TransactionAttribute;
-import jakarta.ejb.TransactionAttributeType;
-
-import test.ejb.SFHello1;
-import test.ejb.StatefulTest;
-
-/**
- * @author Shing Wai Chan
- */
-@TransactionAttribute(value=TransactionAttributeType.SUPPORTS)
-@Stateful
-@Remote({SFHello1.class})
-@RunAs("staff")
-public class StatefulTest2 extends StatefulTest implements SFHello1 {
-    private EJBContext ejbContext;
-    private EJBContext ejbContext2;
-
-    public StatefulTest2() {
-    }
-
-    @TransactionAttribute(value=TransactionAttributeType.MANDATORY)
-    public String sayHello(String message) {
-        return super.sayHello(message);
-    }
-
-    @RolesAllowed("member")
-    public String sayBye(String message) {
-        return "Good bye, " + message + "!";
-    }
-
-    @Resource(name="sfContext")
-    private void setEjbContext(EJBContext context) {
-        ejbContext = context;
-    }
-
-    @Resource(name="sfContext2")
-    void setEjbContext2(EJBContext context) {
-        ejbContext = context;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/web/README b/appserver/tests/appserv-tests/devtests/deployment/annotation/web/README
deleted file mode 100644
index ff6f4fe..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/web/README
+++ /dev/null
@@ -1,9 +0,0 @@
-Note that we see the following in standout log:
-Line 4 Column 20 -- cvc-complex-type.2.4.a: Invalid content was found starting with element 'servlet-class'. One of '{"http://java.sun.com/xml/ns/javaee":description, "http://java.sun.com/xml/ns/javaee":display-name, "http://java.sun.com/xml/ns/javaee":icon, "http://java.sun.com/xml/ns/javaee":servlet-name}' is expected."
-
-This is due to <servlet-name> is not iLine 4 Column 16 -- cvc-complex-type.2.4.a: Invalid content was found starting with element 'servlet-class'. One of '{"http://java.sun.com/xml/ns/javaee":description, "http://java.sun.com/xml/ns/javaee":display-name, "http://java.sun.com/xml/ns/javaee":icon, "http://java.sun.com/xml/ns/javaee":servlet-name}' is expected."
-n web.xml.
-
-This is due to missing <servlet-name> in web.xml.
-This is the limitation of the test as <servlet-name> is going to be specified
-by user in web.xml.
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/web/build.xml b/appserver/tests/appserv-tests/devtests/deployment/annotation/web/build.xml
deleted file mode 100644
index b957c4e..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/web/build.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="WebAnnotationTest" default="all" basedir=".">
-  &commonBuild;
-
-  <property name="src" location="src"/>
-
-  <target name="private-all">
-    <antcall target="cleanXml"/>
-    <antcall target="compile"/>
-    <antcall target="assemble"/>
-    <antcall target="test"/>
-  </target>
-
-  <target name="cleanXml">
-    <delete dir="${basedir}/META-INF"/>
-  </target>
-
-  <target name="prepare">
-    <mkdir dir="${build}/_war/WEB-INF/classes"/>
-  </target>
-
-  <target name="compile" depends="init, prepare, compile.util">
-    <javac srcdir="${src}" destdir="${build}/_war/WEB-INF/classes" debug="on">
-      <classpath>
-        <path refid="gfv3.classpath"/>
-        <pathelement location="${inst}/lib/appserv-rt.jar"/>
-        <pathelement location="${junit.jar}"/>
-        <pathelement path="${testsRoot}/util/build"/>
-      </classpath>
-    </javac>
-  </target>
-
-  <target name="assemble" depends="init,prepare,compile">
-    <move file="${build}/_war/WEB-INF/classes/WebAnnotationTest.class"
-      todir="${build}" overwrite="true" failonerror="false"/>
-  </target>
-
-  <target name="test" depends="assemble">
-    <mkdir dir="${annotation.report.dir}"/>
-    <junit printsummary="yes" haltonerror="no" haltonfailure="no" fork="true">
-      <formatter type="plain" usefile="false"/>
-      <formatter type="xml"/>
-      <test name="WebAnnotationTest"
-          todir="${annotation.report.dir}"/>
-      <jvmarg value="-Dcom.sun.aas.installRoot=${inst}"/>
-      <jvmarg value="-DtestClasspath=${build}/_war"/>
-      <jvmarg value="-DworkDir=${basedir}"/>
-      <classpath>
-        <path refid="test.compile.classpath"/>
-        <path refid="gfv3.classpath"/>
-        <pathelement path="${testsRoot}/util/build"/>
-        <pathelement path="${build}"/>
-        <pathelement path="${junit.jar}"/>
-      </classpath>
-    </junit>
-  </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/web/goldenfiles/web.xml b/appserver/tests/appserv-tests/devtests/deployment/annotation/web/goldenfiles/web.xml
deleted file mode 100644
index 11fb31c..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/web/goldenfiles/web.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" metadata-complete="true" version="3.1" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" xmlns="http://xmlns.jcp.org/xml/ns/javaee">
-  <servlet>
-    <servlet-class>test.ServletTest</servlet-class>
-    <load-on-startup>-1</load-on-startup>
-    <enabled>true</enabled>
-    <async-supported>false</async-supported>
-  </servlet>
-  <security-role>
-    <role-name>staff</role-name>
-  </security-role>
-  <ejb-ref>
-    <ejb-ref-name>test.ServletTest/sful1</ejb-ref-name>
-    <ejb-ref-type>Session</ejb-ref-type>
-    <remote>test.ejb.stateful.SFHello</remote>
-    <injection-target>
-      <injection-target-class>test.ServletTest</injection-target-class>
-      <injection-target-name>sful1</injection-target-name>
-    </injection-target>
-  </ejb-ref>
-  <ejb-ref>
-    <ejb-ref-name>ejb/sfhello</ejb-ref-name>
-    <ejb-ref-type>Session</ejb-ref-type>
-    <remote>test.ejb.stateful.SFHello</remote>
-    <injection-target>
-      <injection-target-class>test.ServletTest</injection-target-class>
-      <injection-target-name>sful2</injection-target-name>
-    </injection-target>
-  </ejb-ref>
-  <post-construct>
-    <lifecycle-callback-class>test.ServletTest</lifecycle-callback-class>
-    <lifecycle-callback-method>preconstruct</lifecycle-callback-method>
-  </post-construct>
-  <pre-destroy>
-    <lifecycle-callback-class>test.ServletTest</lifecycle-callback-class>
-    <lifecycle-callback-method>predestroy</lifecycle-callback-method>
-  </pre-destroy>
-  <session-config/>
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/web/src/SFHello.java b/appserver/tests/appserv-tests/devtests/deployment/annotation/web/src/SFHello.java
deleted file mode 100644
index c50eaf2..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/web/src/SFHello.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package test.ejb.stateful;
-
-/**
- * @author Shing Wai Chan
- */
-public interface SFHello {
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/web/src/ServletTest.java b/appserver/tests/appserv-tests/devtests/deployment/annotation/web/src/ServletTest.java
deleted file mode 100644
index c98feba..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/web/src/ServletTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package test;
-
-import java.io.IOException;
-
-import jakarta.annotation.PostConstruct;
-import jakarta.annotation.PreDestroy;
-import jakarta.annotation.security.DeclareRoles;
-import jakarta.ejb.EJB;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-import test.ejb.stateful.SFHello;
-
-@DeclareRoles({"staff"})
-public class ServletTest {
-    private @EJB SFHello sful1;
-    private @EJB(name="ejb/sfhello") SFHello sful2;
-
-    public void doGet(HttpServletRequest req, HttpServletResponse resp)
-            throws ServletException, IOException {
-    }
-
-    @PostConstruct
-    private void preconstruct() {
-    }
-
-    @PreDestroy
-    private void predestroy() {
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/annotation/web/src/WebAnnotationTest.java b/appserver/tests/appserv-tests/devtests/deployment/annotation/web/src/WebAnnotationTest.java
deleted file mode 100644
index 09668d0..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/annotation/web/src/WebAnnotationTest.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-import java.util.HashSet;
-import java.util.Set;
-import javax.enterprise.deploy.shared.ModuleType;
-
-import devtests.deployment.util.AnnotationTest;
-
-public class WebAnnotationTest extends AnnotationTest {
-    public WebAnnotationTest(String name) {
-        super(name);
-        type = ModuleType.WAR;
-        componentClassNames.add("test.ServletTest");
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/autodeploy/build.xml b/appserver/tests/appserv-tests/devtests/deployment/autodeploy/build.xml
deleted file mode 100644
index 951c018..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/autodeploy/build.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY autodeployUtil SYSTEM "./util/util.xml">
-<!ENTITY commonBuild SYSTEM "./../config/common.xml">
-]>
-
-<project name="autodeploy" default="all" basedir=".">
-
-        &commonBuild;
-
-        <property name="autodeploy.util.build" value="${build}/util"/>
-        <property name="autodeploy.archive.name" value="servletonly.war"/>
-        <property name="autodeploy.archive" value="../../build/war/servletonly/${autodeploy.archive.name}"/>
-
-        &autodeployUtil;
-
-        <target name="private-all">
-
-            <!--
-                Build the common tools used by autodeploy tests.
-            -->
-            <ant dir="util" target="private-all">
-                <property name="build" value="${build}/util"/>
-            </ant>
-
-            <!--
-                Build the servletonly.war file used by the autodeploy tests.
-            -->
-            <ant dir="../war/servletonly" target="assemble">
-                <property name="build" value="${build}/war/servletonly"/>
-            </ant>
-
-            <ant dir="simple" target="private-all">
-                <property name="build" value="${build}/simple"/>
-            </ant>
-
-            <ant dir="slowCopy" target="private-all">
-                <property name="build" value="${build}/slowCopy"/>
-            </ant>
-
-            <!-- commented out because log search on Linux does not work as expected -->
-            <!--
-                    <ant dir="withEJB" target="private-all">
-                            <property name="build" value="${build}/withEJB"/>
-                    </ant>
-            -->
-
-        </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/autodeploy/simple/build.xml b/appserver/tests/appserv-tests/devtests/deployment/autodeploy/simple/build.xml
deleted file mode 100644
index 17cef4f..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/autodeploy/simple/build.xml
+++ /dev/null
@@ -1,134 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY autodeployUtil SYSTEM "./../util/util.xml">
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-<!--
-    This makes sure that redeployment of an autodeployed app works.  Specifically,
-    it tests that the validations (governing app refcs in particular) pass as
-    the autodeployed app is removed and then redeployed.
--->
-
-<project name="autodeploy-simple" default="all" basedir=".">
-
-         &commonBuild;
-        &autodeployUtil;
-
-    <property name="testName" value="simpleautodeploy"/>
-
-    <target name="prepare" depends="init">
-        <property name="result.property.file" value="${build}/result.properties"/>
-<echo>in simple/build.xml and build is ${build}</echo>
-        <mkdir dir="${build}" />
-
-    </target>
-
-    <target name="build" depends="prepare">
-
-        <echo>Using previously-built ${autodeploy.archive}</echo>
-        <!--
-            Some earlier tests should have run already, so the app we use for autodeploy testing
-            should already be in place in the build directory.
-        -->
-    </target>
-
-
-
-    <target name="private-all" depends="build">
-
-        <antcall target="declare-test">
-            <param name="description" value="autodeploy/simple Test autodeploy, auto-redeploy, and autoundeploy"/>
-        </antcall>
-
-        <!--
-            The next task discards any previous temporary file used to gather property settings that
-            record the results of the autodeploy directory monitoring Java class.
-        -->
-        <delete file="${result.property.file}" quiet="true"/>
-
-        <!--
-            Do the auto-deployment.
-       -->
-        <antcall target="deploy.autodeploy">
-            <param name="archive.name" value="${autodeploy.archive.name}"/>
-            <param name="archive.file" value="${autodeploy.archive}"/>
-            <param name="autodeploy.dir" value="${autodeploy.dir}"/>
-            <param name="deployResultPropertyName" value="deployResult1"/>
-        </antcall>
-
-        <!--
-            Redeploy the archive.  This used to trigger an error because the
-            app ref was not removed before the app was removed.
-        -->
-        <antcall target="deploy.autodeploy">
-            <param name="archive.name" value="${autodeploy.archive.name}"/>
-            <param name="archive.file" value="${autodeploy.archive}"/>
-            <param name="autodeploy.dir" value="${autodeploy.dir}"/>
-            <param name="deployResultPropertyName" value="deployResult2"/>
-        </antcall>
-
-        <!--
-            Now undeploy the app.
-        -->
-        <antcall target="deploy.autoundeploy">
-            <param name="archive.file" value="${autodeploy.archive}"/>
-            <param name="archive.name" value="${autodeploy.archive.name}"/>
-            <param name="autodeploy.dir" value="${autodeploy.dir}"/>
-            <param name="undeployResultPropertyName" value="undeployResult"/>
-        </antcall>
-
-        <!--
-            Make the result properties of the several substeps accessible now because we need them in
-            the next several steps.  The prefix attribute helps avoid possible collisions with other
-            property names that might already be present.
-        -->
-        <property file="${result.property.file}" prefix="simple.autodeploy"/>
-
-        <!--
-            Decide whether the test was successful or not.  Make sure that the deploy and
-            undeploy results are good.
-        -->
-        <condition property="result" value="0">
-            <and>
-                <equals arg1="${simple.autodeploy.deployResult1}" arg2="0"/>
-                <equals arg1="${simple.autodeploy.deployResult2}" arg2="0"/>
-                <equals arg1="${simple.autodeploy.undeployResult}" arg2="0"/>
-            </and>
-        </condition>
-
-        <!--
-            If the property "result" was not set by the "condition" task just above then something
-            went wrong and we set result to 1 now.
-        -->
-        <condition property="result" value="1">
-            <not>
-                <isset property="result"/>
-            </not>
-        </condition>
-
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/output.log"/>
-        </antcall>
-
-    </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/autodeploy/slowCopy/build.xml b/appserver/tests/appserv-tests/devtests/deployment/autodeploy/slowCopy/build.xml
deleted file mode 100644
index b62226b..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/autodeploy/slowCopy/build.xml
+++ /dev/null
@@ -1,211 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY autodeployUtil SYSTEM "./../util/util.xml">
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-<!--
-    Note that this currently assumes that the ear/earwithejb and ejb/statelesshello projects have run to build
-    the ear used for this test.
-
-    Also note that this test expects the 'grep' command to be present in the operating environment.
-    This is fine on Solaris and Linux systems, and should be fine on Windows systems prepared
-    according to the requirements for building the app server.
--->
-
-<project name="autodeploy-slowcopy" default="all" basedir=".">
-
-         &commonBuild;
-        &autodeployUtil;
-
-    <property name="testName" value="slowcopy"/>
-
-    <target name="prepare" depends="init">
-        <property name="inputArchive" value="${autodeploy.archive}"/>
-        <property name="outputArchive" value="${autodeploy.dir}/${autodeploy.archive.name}"/>
-        <!--
-            The next property setting represents a 4-second delay between
-            writes to the autodeployed file (by the SlowCopy test class invoked
-            below).  This is based on the 2-second
-            interval with which the autodeploy thread rechecks the files
-            in the autodeploy directory.  By using a setting significantly
-            longer than the 2-second autodeploy period, we test two code paths in the
-            autodeploy code.
-
-            One code path suppresses a retry of the file
-            if it has failed to open successfully as an archive previously
-            and has grown in size since the last check of the file.  The
-            assumption in this case is that, since the file has grown since the
-            last check, it might continue to grow and so we decide not to
-            retry it at that moment.
-
-            The other code path detects runs when the
-            size has not changed since the last check.  This set of logic
-            then tries to open the file as an archive
-            again.  (Here, the assumption is that since the file did
-            not grow since the previous check, it might be done growing and
-            therefore it makes sense to try to open it again now).
-            For most of the iterations, this code path finds that the archive
-            still will not open correctly - because the slow copy is still
-            in progress - and does not further work with the file in the
-            current iteration but leaves the file in the map of files to be
-            monitored.
-
-            At last, when the copy completes, an iteration discovers that
-            the file size has been stable since the last time through and
-            the attempt to open the file as an archive succeeds.  The file
-            is then autodeployed normally.
-        -->
-        <property name="slowcopy.delay" value="4000"/>
-
-        <property name="result.property.file" value="${build}/result.properties"/>
-
-        <mkdir dir="${build}" />
-    </target>
-
-    <target name="build" depends="prepare">
-
-        <echo>Using previously-built ${inputArchive}</echo>
-        <!--
-            Some earlier tests should have run already, so the app we use for autodeploy testing
-            should already be in place in the build directory.
-        -->
-
-    </target>
-
-    <target name="private-all" depends="build">
-
-        <antcall target="declare-test">
-            <param name="description" value="autodeploy/slow Test autodeploy with slowly-copied file"/>
-        </antcall>
-
-        <!--
-            The next task discards any previous temporary file used to gather property settings that
-            record the results of the autodeploy directory monitoring Java class.
-        -->
-        <delete file="${result.property.file}" quiet="true"/>
-
-        <tstamp prefix="slowcopy">
-            <format property="NOW" pattern="${dateFormat}"/>
-        </tstamp>
-
-        <!--
-            Do the auto-deployment but use the special tool that copies slowly.
-         -->
-         <echo>Copying ${inputArchive} slowly to the autodeploy directory</echo>
-        <javaWithResult
-                fork="true"
-                failonerror="false"
-                jvm="${JAVA}"
-                classname="autodeploy.slowtest.SlowCopy"
-                resultproperty="slow.autodeploy.deployResult"
-                output="${build}/1.output.log"
-            >
-            <arg value="timed"/>
-            <arg value="${inputArchive}"/>
-            <arg value="${outputArchive}"/>
-            <arg value="${slowcopy.delay}"/>
-
-            <classpath refid="autodeploy.compile.classpath"/>
-
-        </javaWithResult>
-
-        <antcall target="useMonitorToWaitForAutodeployCompletion">
-            <param name="log.id" value="2"/>
-        </antcall>
-
-        <!--
-            Now undeploy the app.
-        -->
-        <antcall target="deploy.autoundeploy">
-            <param name="archive.file" value="${outputArchive}"/>
-            <param name="archive.name" value="${autodeploy.archive.name}"/>
-            <param name="autodeploy.dir" value="${autodeploy.dir}"/>
-            <param name="undeployResultPropertyName" value="undeployResult"/>
-            <param name="log.id" value="3"/>
-        </antcall>
-
-        <!--
-            Make the result properties of the several substeps accessible now because we need them in
-            the next several steps.  The prefix attribute helps avoid possible collisions with other
-            property names that might already be present.
-        -->
-        <property file="${result.property.file}" prefix="slow.autodeploy"/>
-
-        <!--
-            Decide whether the test was successful or not.  Make sure that the deploy and
-            undeploy results are good.
-        -->
-        <condition property="result" value="0">
-            <and>
-                <equals arg1="${slow.autodeploy.deployResult}" arg2="0"/>
-                <equals arg1="${slow.autodeploy.undeployResult}" arg2="0"/>
-            </and>
-        </condition>
-
-        <!--
-            If the property "result" was not set by the "condition" task just above then something
-            went wrong and we set result to 1 now.
-        -->
-        <condition property="result" value="1">
-            <not>
-                <isset property="result"/>
-            </not>
-        </condition>
-
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/output.log"/>
-        </antcall>
-
-    </target>
-
-    <target name="useMonitorToWaitForAutodeployCompletion">
-        <javaWithResult
-                fork="true"
-                failonerror="false"
-                jvm="${JAVA}"
-                classname="autodeploy.test.AutoDeployMonitor"
-                resultproperty="autodeployResult"
-                output="${build}/${log.id}.output.log"
-            >
-            <jvmarg value="-Dmonitor.debug=true"/>
-
-            <classpath refid="autodeploy.compile.classpath"/>
-
-            <arg value="${autodeploy.archive.name}"/>
-            <arg value="${autodeploy.dir}"/>
-            <arg value="${dateFormat}"/>
-            <arg value="${slowcopy.NOW}"/>
-        </javaWithResult>
-
-        <!--
-            The result property name used in the next task is an argument to the called target.
-            Note that the echo is a little oddly formatted.  The </echo> is on a line by itself and left-justified so
-            that the output to the file being written will reside on a line by itself.  The
-            left-justification is not really needed but the properties file looks a bit nicer
-            if you open it in an editor.  This is because the next line in the properties file being
-            written is indented as far as the </echo> is indented here in the build.xml file.
-        -->
-        <echo file="${result.property.file}" append="true">${resultPropertyName}=${autodeployResult}
-</echo>
-    </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/autodeploy/util/AutoDeployMonitor.java b/appserver/tests/appserv-tests/devtests/deployment/autodeploy/util/AutoDeployMonitor.java
deleted file mode 100644
index 5320364..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/autodeploy/util/AutoDeployMonitor.java
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-/*
-  * AutoDeployMonitor.java
-  *
-  * Created on May 11, 2004, 3:08 PM
-  */
-
-package autodeploy.test;
-
-import java.util.Date;
-import java.text.SimpleDateFormat;
-import java.text.ParseException;
-import java.io.File;
-import java.io.FileFilter;
-import java.io.FileNotFoundException;
-
-import org.glassfish.deployment.autodeploy.AutoDeployConstants;
-
-/**
-  *Autodeploys an archive to the specified autodeploy directory.
- *<p>
- *To autodeploy the app, follow these steps:
- *1. Record the modification time of the archive file in the autodeploy directory as the start time.
- *2. Copy the archive to the autodeploy directory.
- *3. Monitor the autodeploy directory until it contains a marker file (for either success or
- *   failure) with a creation date and time later than the earlier-recorded timestamp.
- *4. Choose whether to return success or failure based on which kind of marker file has appeared
- *   in the autodeploy directory.
- *
-  * @author  tjquinn
-  */
-public class AutoDeployMonitor {
-
-    private static boolean DEBUG = Boolean.getBoolean("monitor.debug");
-
-    private static int ITERATION_LIMIT = Integer.getInteger("monitor.iterationLimit", 60 * 2 /* default = two minutes */).intValue();
-
-    private String archiveName = null;
-
-//    private String autodeployDirSpec = null;
-
-    private File autodeployDir = null;
-
-//    private String timestampFormat = null;
-
-//    private String timestampString = null;
-
-    private long timestamp;
-
-    private Date startTime = null;
-
-    private final static String LINE_SEP = System.getProperty("line.separator");
-
-    /** Creates a new instance of AutoDeployer */
-    public AutoDeployMonitor() {
-    }
-
-    /**
-      * @param args the command line arguments
-      */
-    public static void main(String[] args) {
-        int result = new AutoDeployMonitor().run(args);
-        System.exit(result);
-    }
-
-    private void processArguments(String[] args) {
-        if (args.length < 4) {
-            usage();
-            System.exit(1);
-        }
-
-        archiveName = args[0];
-        String autodeployDirSpec = args[1];
-        String timestampFormat = args[2];
-        String timestampString = args[3];
-
-        autodeployDir = new File(autodeployDirSpec);
-
-        debug("Archive to autodeploy: " + archiveName);
-        debug("Autodeploy directory: " + autodeployDir.getAbsolutePath());
-
-        StringBuffer result = new StringBuffer();
-
-        /*
-         *Check auto-deploy directory.
-         */
-        if ( ! autodeployDir.exists()) {
-            result.append(LINE_SEP).append("Autodeploy directory " + autodeployDir.getAbsolutePath() + " does not exist but should.");
-        }
-
-        /*
-         *Check archive file name.
-         */
-        if (archiveName.length() == 0) {
-            result.append(LINE_SEP).append("Archive file name must not be empty but is.");
-        }
-
-        /*
-         *Check the timestamp format and value.
-         */
-        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(timestampFormat);
-        Date timestampDate = null;
-        try {
-            timestampDate = simpleDateFormat.parse(timestampString);
-            timestamp = timestampDate.getTime();
-            debug("Timestamp to use for filtering autodeploy status files: " + timestampDate.toString());
-        } catch (ParseException pe) {
-            result.append(LINE_SEP).append("Could not interpret timestamp " + timestampString + " using format " + timestampFormat).append(LINE_SEP).append("    ").append(pe.getMessage());
-        }
-
-        if (result.length() > 0) {
-            throw new IllegalArgumentException(result.toString());
-        }
-    }
-
-    private int run(String[] args) {
-        /*
-         *The calling script should pass these command line arguments:
-         *
-         *arg[0] archive file name and type
-         *arg[1] auto-deploy directory spec
-         *arg[2] SimpleDateFormat pattern to use in parsing the timestamp string
-         *arg[3] timestamp string
-         *
-         */
-
-        try {
-            processArguments(args);
-
-            /*
-             *The timestamp handling allows the logic below to identify a marker file (..._deployed,
-             *..._undeployed, ..._deployFailed, ..._undeployFailed) that was created after the
-             *archive was deposited into (for autodeploy) or removed from (for autoundeploy) the
-             *autodeploy directory.  We need to do this to make sure we do not accidentally take
-             *action on an old marker file that is still there because the autodeployer has not
-             *yet acted on the new file.
-             */
-
-            /*
-             *For auto-deploy, the archive will have just been copied into the autodeploy directory.
-             *For auto-undeploy, the archive will have just been deleted from there.  The file filter
-             *below uses both the file name and also a timestamp to make sure it accepts
-             *marker files created after the archive itself.
-             *
-             *Note that the following is both a declaration of the filter and its initialization by
-             *invoking its init method.
-             */
-
-            FileFilter filter = new FileFilter () {
-
-                private long timestamp;
-                private String archiveName = null;
-
-                public boolean accept(File candidateFile) {
-                    /*
-                     *Make sure the name of the candidate starts with the name of the archive and that
-                     *the candidate is no older than the archive file.  Make sure it's one of the marker
-                     *file types we're interested in.
-                     */
-                    String candidateFileSpec = candidateFile.getAbsolutePath();
-                    long candidateTimestamp = candidateFile.lastModified();
-                    String candidateNameAndType = candidateFileSpec.substring(candidateFileSpec.lastIndexOf(File.separator) + 1);
-                    String candidateType = candidateFileSpec.substring(candidateFileSpec.lastIndexOf('.') + 1);
-
-                    boolean answer = (candidateTimestamp > this.timestamp)
-                        && (candidateNameAndType.equals(archiveName + AutoDeployConstants.DEPLOYED) ||
-                            candidateNameAndType.equals(archiveName + AutoDeployConstants.UNDEPLOYED) ||
-                            candidateNameAndType.equals(archiveName + AutoDeployConstants.DEPLOY_FAILED) ||
-                            candidateNameAndType.equals(archiveName + AutoDeployConstants.UNDEPLOY_FAILED)
-                           );
-                    if (DEBUG) {
-                        Date candidateTimestampDate = new Date(candidateTimestamp);
-                        debug("Result of filtering file " + candidateFileSpec + " with modification date " + candidateTimestampDate.toString() + " : " + answer);
-                    }
-                    return answer;
-                }
-
-                public FileFilter init(String archiveName, long timestamp) {
-                    this.archiveName = archiveName;
-                    this.timestamp = timestamp;
-                    return this;
-                }
-                }.init(archiveName, timestamp);
-
-            File [] matches = null;
-
-            /*
-             *Begin waiting for a new marker file to appear in the autodeploy directory.  Don't wait longer than
-             *two minutes (by default) in case there is some problem.
-             */
-            int iterationCount = 0;
-            do {
-                debug("Starting polling iteration " + iterationCount + "...");
-                Thread.currentThread().sleep(1000);
-                /*
-                 *List the files that have the same name as the archive but are not the archive itself.
-                 *This should mean we get only the marker file(s) for this archive.
-                 */
-                matches = autodeployDir.listFiles(filter);
-
-            } while ( (matches.length == 0) && (iterationCount++ < ITERATION_LIMIT));
-
-            /*
-             *Return 0 if the marker file found ends with _deployed, 1 if the marker ends with
-             *_deployFailed, and -1 otherwise.
-             */
-            if (DEBUG) {
-                System.out.println("Matched files:");
-                for (int i = 0; i < matches.length; i++) {
-                    System.out.println("  " + matches[i].getAbsolutePath());
-                }
-            }
-            String matchFileSpec = matches[0].getAbsolutePath();
-            int answer = -1;
-            if (matchFileSpec.endsWith(AutoDeployConstants.DEPLOYED) || matchFileSpec.endsWith(AutoDeployConstants.UNDEPLOYED)) {
-                answer = 0;
-                debug("Found successful marker file: " + matchFileSpec);
-            } else if (matchFileSpec.endsWith(AutoDeployConstants.DEPLOY_FAILED) || matchFileSpec.endsWith(AutoDeployConstants.UNDEPLOY_FAILED)) {
-                answer = 1;
-                debug("Found unsuccessful marker file: " + matchFileSpec);
-            } else {
-                debug("Found no marker file at all");
-            }
-            return answer;
-        } catch (Throwable thr) {
-            System.err.println("Error monitoring autodeployment/autoundeployment");
-            thr.printStackTrace();
-            return -1;
-        }
-    }
-
-    private void usage() {
-        System.err.println("Usage:");
-        System.err.println("    autodeploy.loader.client.AutoDeployMonitor <archive-name> <autodeploy-directory> <SimpleDateFormat-pattern-for-timestamp> <timestamp-value>");
-    }
-
-    private void debug(String msg) {
-        if (DEBUG) {
-            System.out.println(msg);
-        }
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/autodeploy/util/SlowCopy.java b/appserver/tests/appserv-tests/devtests/deployment/autodeploy/util/SlowCopy.java
deleted file mode 100644
index 99fe50e..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/autodeploy/util/SlowCopy.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package autodeploy.slowtest;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.Scanner;
-/*
- * SlowCopy.java
- *
- * Created on November 23, 2004, 12:39 PM
- */
-
-/**
- *Provides a way to test autodeployer's behavior when an autodeployed file is
- *copied into the autodeploy directory slowly.
- *
- *Usage:
- *
- *  java -classpath ... SlowCopy timed existing-file target-file-spec [delay-in-ms]
- *
- *where
- *<ul>
- *<le>"timed" is a keyword
- *<le>existing-file is the existing archive to be copied
- *<le>target-file-spec is the file spec of the copy to be created
- *<le>delay-in-ms is the optional time delay (in ms) to wait between writes
- *</ul>
- *
- * @author  tjquinn
- */
-public class SlowCopy {
-
-    /** Creates a new instance of SlowCopy */
-    public SlowCopy() {
-    }
-
-    /** default delay between successive writes of data to the output file */
-    private static final long DEFAULT_DELAY = 200; // milliseconds
-
-    /** size of read and write buffer */
-    private static final int BUFFER_SIZE = 1024;
-
-    public static void main(String[] args) {
-        try {
-            new SlowCopy().run(args);
-            System.exit(0);
-        } catch (Throwable thr) {
-            thr.printStackTrace(System.err);
-            System.exit(1);
-        }
-    }
-
-    private void run(String [] args) throws FileNotFoundException, IOException, InterruptedException {
-        System.out.println(Arrays.toString(args));
-        if (args.length < 3) {
-            throw new IllegalArgumentException("Command line args must specify prompt/timed, the original file, and the target file");
-        }
-
-        /*
-         *Get delay from default and override the default if the delay is
-         *specified on the command line.
-         */
-        long delay = DEFAULT_DELAY;
-        if (args.length > 3) {
-            delay = Integer.decode(args[3]);
-        }
-
-        /*
-         *For interactive use, the tool would like to let the user press a
-         *key each time a read/write is to occur.  This doesn't yet work and
-         *is not used in the devtests anyway.
-         */
-        boolean usePromptDelay = args[0].equalsIgnoreCase("prompt");
-        File oldF = new File(args[1]);
-        File newF = new File(args[2]);
-
-        System.out.println("Slow copy starting\n" +
-                "  mode: " + args[0] + "\n" +
-                "  input file: " + oldF.getAbsolutePath() + "\n" +
-                "  output file: " + newF.getAbsolutePath() + "\n" +
-                "  delay (if mode=timed): " + delay + "\n" +
-                "  starting time: " + new Date().toString()
-                );
-
-        FileOutputStream fos = new FileOutputStream(newF);
-        FileInputStream fis = new FileInputStream(oldF);
-        byte [] data = new byte [BUFFER_SIZE];
-        int bytesRead;
-
-        Scanner scanner = null;
-        boolean continuePrompting = usePromptDelay;
-        String lineSep = System.getProperty("line.separator");
-
-        if (usePromptDelay) {
-            scanner = new Scanner(System.in);
-        }
-
-        int totalBytesRead = 0;
-        /*
-         *Repeat the cycle of reading from the input file and writing to the
-         *output file, stalling for either a key press or the timed delay
-         *between successive cycles.
-         */
-        try {
-            while ((bytesRead = fis.read(data))  != -1) {
-                totalBytesRead += bytesRead;
-                fos.write(data, 0, bytesRead);
-                if (usePromptDelay) {
-                    if (scanner.hasNext(".")) {
-                        String input = scanner.next(".");
-                        continuePrompting = ! input.equals("q"); // just like Unix utilities - q ends
-                        System.out.println("Continue prompting is now set to " + continuePrompting);
-                    }
-                } else {
-                    /*
-                     *The user wants to use timed delays, so wait for the
-                     *delay period before continuing the loop.
-                     */
-                    Thread.currentThread().sleep(delay);
-                }
-            }
-            System.out.println("Finished copying " + totalBytesRead + " bytes at " + new Date().toString());
-
-        } finally {
-            if (fos != null) {
-                fos.close();
-                fos = null;
-            }
-            if (fis != null) {
-                fis.close();
-                fis = null;
-            }
-        }
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/autodeploy/util/build.xml b/appserver/tests/appserv-tests/devtests/deployment/autodeploy/util/build.xml
deleted file mode 100644
index a857bf1..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/autodeploy/util/build.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY autodeployUtil SYSTEM "./util.xml">
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="autodeploy-util" default="all" basedir=".">
-        &commonBuild;
-        &autodeployUtil;
-
-    <target name="prepare" depends="init">
-        <mkdir dir="${build}" />
-    </target>
-
-    <target name="build" depends="compile">
-
-    </target>
-
-    <target name="compile" depends="prepare">
-        <javac srcdir="."
-               destdir="${build}"
-               debug="on"
-               failonerror="true">
-            <classpath refid="autodeploy.compile.classpath"/>
-        </javac>
-    </target>
-
-    <target name="private-all" depends="build">
-        <echo>Autodeploy util common tools are ready</echo>
-    </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/autodeploy/util/util.xml b/appserver/tests/appserv-tests/devtests/deployment/autodeploy/util/util.xml
deleted file mode 100644
index f528529..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/autodeploy/util/util.xml
+++ /dev/null
@@ -1,158 +0,0 @@
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!--
-   This file should be included by all autodeployment build.xml files and
-   defines properties and tasks used by multiple auto-deploy tests.
--->
-
-    <property name="dateFormat" value="yyyy-MM-dd-HH:mm:ss"/>
-    <property name="autodeploy.dir" value="${env.S1AS_HOME}/domains/domain1/autodeploy"/>
-    <property name="autodeploy.util.build" value="${testsRoot}/build/autodeploy/util"/>
-
-    <path id="autodeploy.compile.classpath">
-        <pathelement location="${inst}/lib/javaee.jar"/>
-        <pathelement location="${java.home}/lib/tools.jar"/>
-        <pathelement location="${env.S1AS_HOME}/modules/deployment-autodeploy.jar"/>
-        <pathelement location="${autodeploy.util.build}"/>
-    </path>
-
-    <!--
-        This target runs a Java class that watches the app server's autodeploy directory and detects
-        when the app server has deployed or undeployed the app (or has reported a failure to do so) by observing
-        when the marker files appear in the directory.
-
-        The target records its results in a temporary properties file in the ${build} directory.
-        This provides a simple way (relatively simple, at least) to use the same target more than once
-        and store different result values in a way that can be retrieved and used from the main
-        target.  (This basically works around the behavior of ant in which a called target's property
-        settings are NOT propagated out to the calling target.  It also avoids the practice of creating
-        a set of marker files that, by their presence or absence, convey success or failure of a substep.)
-    -->
-    <target name="runAutoDeployMonitor">
-        <javaWithResult
-                fork="true"
-                failonerror="false"
-                jvm="${JAVA}"
-                classname="autodeploy.test.AutoDeployMonitor"
-                resultproperty="autodeployResult"
-                output="${build}/${log.id}.output.log"
-            >
-            <jvmarg value="-Dmonitor.debug=true"/>
-
-            <classpath refid="autodeploy.compile.classpath"/>
-<!--
-            <classpath>
-                <path location="${inst}/lib/j2ee.jar"/>
-                <path location="${build}"/>
-            </classpath>
--->
-            <arg line="${arg.list}"/>
-        </javaWithResult>
-
-        <!--
-            The result property name used in the next task is an argument to the called target.
-            Note that the echo is a little oddly formatted.  The </echo> is on a line by itself and left-justified so
-            that the output to the file being written will reside on a line by itself.  The
-            left-justification is not really needed but the properties file looks a bit nicer
-            if you open it in an editor.  This is because the next line in the properties file being
-            written is indented as far as the </echo> is indented here in the build.xml file.
-        -->
-        <echo file="${result.property.file}" append="true">${resultPropertyName}=${autodeployResult}
-</echo>
-
-    </target>
-
-    <target name="deploy.autodeploy">
-
-    <!--
-        To monitor auto-deployment or auto-undeployment, we start by getting the current time.
-        Then we copy the archive file into the autodeploy directory (for auto-deploy) or delete
-        it (for auto-undeploy).  All marker files created by the server during auto-deployment of
-        the newly-copied archive file will have later timestamps than the timestamp just created.
-        There could be earlier marker files for the same archive in the directory and the monitor
-        wants to ignore those, which is why we get the current time and pass it to the monitor.
-
-        The monitor will check for marker files for the copied archive file
-        and whose last modification time are after the current timestamp, returning 0 if the
-        auto-deployer creates a _deployed or _undeployed file, 1 if it creates a _deploy_failed
-        or _undeploy_failed file, and -1 if it recognized no marker file.
-    -->
-        <tstamp prefix="deploy">
-            <format property="NOW" pattern="${dateFormat}"/>
-        </tstamp>
-
-        <!-- Pause; some file systems record file rev date/time to 2-second precision -->
-        <sleep seconds="2"/>
-
-        <!--
-            Trigger the auto-deploy.
-        -->
-        <copy file="${archive.file}" todir="${autodeploy.dir}" overwrite="true"/>
-
-        <condition property="log.id" value="1">
-            <not>
-                <isset property="log.id"/>
-            </not>
-        </condition>
-        <!--
-            Use the monitor to detect when the auto-deploy has completed.
-        -->
-        <echo>Waiting for autodeployment to complete...</echo>
-        <antcall target="runAutoDeployMonitor">
-            <param name="arg.list" value="${archive.name} ${autodeploy.dir} ${dateFormat} ${deploy.NOW}"/>
-            <param name="resultPropertyName" value="${deployResultPropertyName}"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.autoundeploy">
-
-        <!--
-            This target works very much like the deploy.autodeploy target except that instead of
-            copying the archive into the autodeploy directory it deletes the previously copied
-            archive from that directory.
-        -->
-        <tstamp prefix="undeploy">
-            <format property="NOW" pattern="${dateFormat}"/>
-        </tstamp>
-
-        <!-- Pause; some file systems record file rev date/time to 2-second resolution -->
-        <sleep seconds="2"/>
-
-        <!--
-            Trigger auto-undeploy by deleting the file.
-        -->
-        <delete quiet="true">
-            <fileset dir="${autodeploy.dir}" includes="${archive.name}"/>
-        </delete>
-
-        <condition property="log.id" value="2">
-            <not>
-                <isset property="log.id"/>
-            </not>
-        </condition>
-
-        <echo>Waiting for autoundeployment to complete...</echo>
-        <antcall target="runAutoDeployMonitor">
-            <param name="arg.list" value="${archive.name} ${autodeploy.dir} ${dateFormat} ${undeploy.NOW}"/>
-            <param name="resultPropertyName" value="${undeployResultPropertyName}"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/autodeploy/withEJB/AutoDeployMonitor.java b/appserver/tests/appserv-tests/devtests/deployment/autodeploy/withEJB/AutoDeployMonitor.java
deleted file mode 100644
index c388ed6..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/autodeploy/withEJB/AutoDeployMonitor.java
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-/*
-  * AutoDeployMonitor.java
-  *
-  * Created on May 11, 2004, 3:08 PM
-  */
-
-package autodeploy.test;
-
-import java.util.Date;
-import java.text.SimpleDateFormat;
-import java.text.ParseException;
-import java.io.File;
-import java.io.FileFilter;
-import java.io.FileNotFoundException;
-
-import com.sun.enterprise.deployment.autodeploy.AutoDeployConstants;
-
-/**
-  *Autodeploys an archive to the specified autodeploy directory.
- *<p>
- *To autodeploy the app, follow these steps:
- *1. Record the modification time of the archive file in the autodeploy directory as the start time.
- *2. Copy the archive to the autodeploy directory.
- *3. Monitor the autodeploy directory until it contains a marker file (for either success or
- *   failure) with a creation date and time later than the earlier-recorded timestamp.
- *4. Choose whether to return success or failure based on which kind of marker file has appeared
- *   in the autodeploy directory.
- *
-  * @author  tjquinn
-  */
-public class AutoDeployMonitor {
-
-    private static boolean DEBUG = Boolean.getBoolean("monitor.debug");
-
-    private static int ITERATION_LIMIT = Integer.getInteger("monitor.iterationLimit", 60 * 2 /* default = two minutes */).intValue();
-
-    private String archiveName = null;
-
-//    private String autodeployDirSpec = null;
-
-    private File autodeployDir = null;
-
-//    private String timestampFormat = null;
-
-//    private String timestampString = null;
-
-    private long timestamp;
-
-    private Date startTime = null;
-
-    private final static String LINE_SEP = System.getProperty("line.separator");
-
-    /** Creates a new instance of AutoDeployer */
-    public AutoDeployMonitor() {
-    }
-
-    /**
-      * @param args the command line arguments
-      */
-    public static void main(String[] args) {
-        int result = new AutoDeployMonitor().run(args);
-        System.exit(result);
-    }
-
-    private void processArguments(String[] args) {
-        if (args.length < 4) {
-            usage();
-            System.exit(1);
-        }
-
-        archiveName = args[0];
-        String autodeployDirSpec = args[1];
-        String timestampFormat = args[2];
-        String timestampString = args[3];
-
-        autodeployDir = new File(autodeployDirSpec);
-
-        debug("Archive to autodeploy: " + archiveName);
-        debug("Autodeploy directory: " + autodeployDir.getAbsolutePath());
-
-        StringBuffer result = new StringBuffer();
-
-        /*
-         *Check auto-deploy directory.
-         */
-        if ( ! autodeployDir.exists()) {
-            result.append(LINE_SEP).append("Autodeploy directory " + autodeployDir.getAbsolutePath() + " does not exist but should.");
-        }
-
-        /*
-         *Check archive file name.
-         */
-        if (archiveName.length() == 0) {
-            result.append(LINE_SEP).append("Archive file name must not be empty but is.");
-        }
-
-        /*
-         *Check the timestamp format and value.
-         */
-        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(timestampFormat);
-        Date timestampDate = null;
-        try {
-            timestampDate = simpleDateFormat.parse(timestampString);
-            timestamp = timestampDate.getTime();
-            debug("Timestamp to use for filtering autodeploy status files: " + timestampDate.toString());
-        } catch (ParseException pe) {
-            result.append(LINE_SEP).append("Could not interpret timestamp " + timestampString + " using format " + timestampFormat).append(LINE_SEP).append("    ").append(pe.getMessage());
-        }
-
-        if (result.length() > 0) {
-            throw new IllegalArgumentException(result.toString());
-        }
-    }
-
-    private int run(String[] args) {
-        /*
-         *The calling script should pass these command line arguments:
-         *
-         *arg[0] archive file name and type
-         *arg[1] auto-deploy directory spec
-         *arg[2] SimpleDateFormat pattern to use in parsing the timestamp string
-         *arg[3] timestamp string
-         *
-         */
-
-        try {
-            processArguments(args);
-
-            /*
-             *The timestamp handling allows the logic below to identify a marker file (..._deployed,
-             *..._undeployed, ..._deployFailed, ..._undeployFailed) that was created after the
-             *archive was deposited into (for autodeploy) or removed from (for autoundeploy) the
-             *autodeploy directory.  We need to do this to make sure we do not accidentally take
-             *action on an old marker file that is still there because the autodeployer has not
-             *yet acted on the new file.
-             */
-
-            /*
-             *For auto-deploy, the archive will have just been copied into the autodeploy directory.
-             *For auto-undeploy, the archive will have just been deleted from there.  The file filter
-             *below uses both the file name and also a timestamp to make sure it accepts
-             *marker files created after the archive itself.
-             *
-             *Note that the following is both a declaration of the filter and its initialization by
-             *invoking its init method.
-             */
-
-            FileFilter filter = new FileFilter () {
-
-                private long timestamp;
-                private String archiveName = null;
-
-                public boolean accept(File candidateFile) {
-                    /*
-                     *Make sure the name of the candidate starts with the name of the archive and that
-                     *the candidate is no older than the archive file.  Make sure it's one of the marker
-                     *file types we're interested in.
-                     */
-                    String candidateFileSpec = candidateFile.getAbsolutePath();
-                    long candidateTimestamp = candidateFile.lastModified();
-                    String candidateNameAndType = candidateFileSpec.substring(candidateFileSpec.lastIndexOf(File.separator) + 1);
-                    String candidateType = candidateFileSpec.substring(candidateFileSpec.lastIndexOf('.') + 1);
-
-                    boolean answer = (candidateTimestamp > this.timestamp)
-                        && (candidateNameAndType.equals(archiveName + AutoDeployConstants.DEPLOYED) ||
-                            candidateNameAndType.equals(archiveName + AutoDeployConstants.UNDEPLOYED) ||
-                            candidateNameAndType.equals(archiveName + AutoDeployConstants.DEPLOY_FAILED) ||
-                            candidateNameAndType.equals(archiveName + AutoDeployConstants.UNDEPLOY_FAILED)
-                           );
-                    if (DEBUG) {
-                        Date candidateTimestampDate = new Date(candidateTimestamp);
-                        debug("Result of filtering file " + candidateFileSpec + " with modification date " + candidateTimestampDate.toString() + " : " + answer);
-                    }
-                    return answer;
-                }
-
-                public FileFilter init(String archiveName, long timestamp) {
-                    this.archiveName = archiveName;
-                    this.timestamp = timestamp;
-                    return this;
-                }
-                }.init(archiveName, timestamp);
-
-            File [] matches = null;
-
-            /*
-             *Begin waiting for a new marker file to appear in the autodeploy directory.  Don't wait longer than
-             *two minutes (by default) in case there is some problem.
-             */
-            int iterationCount = 0;
-            do {
-                debug("Starting polling iteration " + iterationCount + "...");
-                Thread.currentThread().sleep(1000);
-                /*
-                 *List the files that have the same name as the archive but are not the archive itself.
-                 *This should mean we get only the marker file(s) for this archive.
-                 */
-                matches = autodeployDir.listFiles(filter);
-
-            } while ( (matches.length == 0) && (iterationCount < ITERATION_LIMIT));
-
-            /*
-             *Return 0 if the marker file found ends with _deployed, 1 if the marker ends with
-             *_deployFailed, and -1 otherwise.
-             */
-            if (DEBUG) {
-                System.out.println("Matched files:");
-                for (int i = 0; i < matches.length; i++) {
-                    System.out.println("  " + matches[i].getAbsolutePath());
-                }
-            }
-            String matchFileSpec = matches[0].getAbsolutePath();
-            int answer = -1;
-            if (matchFileSpec.endsWith(AutoDeployConstants.DEPLOYED) || matchFileSpec.endsWith(AutoDeployConstants.UNDEPLOYED)) {
-                answer = 0;
-                debug("Found successful marker file: " + matchFileSpec);
-            } else if (matchFileSpec.endsWith(AutoDeployConstants.DEPLOY_FAILED) || matchFileSpec.endsWith(AutoDeployConstants.UNDEPLOY_FAILED)) {
-                answer = 1;
-                debug("Found unsuccessful maker file: " + matchFileSpec);
-            } else {
-                debug("Found no marker file at all");
-            }
-            return answer;
-        } catch (Throwable thr) {
-            System.err.println("Error monitoring autodeployment/autoundeployment");
-            thr.printStackTrace();
-            return -1;
-        }
-    }
-
-    private void usage() {
-        System.err.println("Usage:");
-        System.err.println("    autodeploy.loader.client.AutoDeployMonitor <archive-name> <autodeploy-directory> <SimpleDateFormat-pattern-for-timestamp> <timestamp-value>");
-    }
-
-    private void debug(String msg) {
-        if (DEBUG) {
-            System.out.println(msg);
-        }
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/autodeploy/withEJB/build.xml b/appserver/tests/appserv-tests/devtests/deployment/autodeploy/withEJB/build.xml
deleted file mode 100644
index 89d4236..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/autodeploy/withEJB/build.xml
+++ /dev/null
@@ -1,366 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<!--
-    Note that this currently assumes that the ear/earwithejb and ejb/statelesshello projects have run to build
-    the ear used for this test.
-
-    Also note that this test expects the 'grep' command to be present in the operating environment.
-    This is fine on Solaris and Linux systems, and should be fine on Windows systems prepared
-    according to the requirements for building the app server.
--->
-
-<project name="autodeployWithEJB" default="all" basedir=".">
-
-         &commonBuild;
-
-    <property name="testName" value="withEJB"/>
-    <property name="dateFormat" value="yyyy-MM-dd-HH:mm:ss.SSS"/>
-    <property name="archivedir" value="${build}/archives"/>
-
-    <!--
-        The following property defines the exception text that appears in the server.log file if
-        the bug is present.
-    -->
-    <property name="exceptionText" value="EJBClassLoader instance that has already been shutdown"/>
-
-    <target name="prepare" depends="init">
-        <property name="archiveName" value="earwithejb.ear"/>
-        <property name="all.ear" value="${archivedir}/${archiveName}"/>
-        <property name="server.log.file" value="${env.S1AS_HOME}/domains/domain1/logs/server.log"/>
-        <property name="autodeploy.dir" value="${env.S1AS_HOME}/domains/domain1/autodeploy"/>
-        <property name="result.property.file" value="${build}/result.properties"/>
-
-
-        <mkdir dir="${build}" />
-        <path id="test.compile.classpath">
-            <pathelement location="${inst}/lib/j2ee.jar"/>
-            <pathelement location="${java.home}/lib/tools.jar"/>
-            <pathelement location="${env.S1AS_HOME}/lib/appserv-rt.jar"/>
-            <pathelement location="${build}"/>
-        </path>
-    </target>
-
-    <target name="build" depends="prepare">
-
-        <echo>Building ear</echo>
-        <!--
-            The earlier tests should have run already, so the app we use for autodeploy testing
-            should already be in place.
-        -->
-
-<!--
-        <ant dir="${testsRoot}/ejb/statelesshello" target="assemble">
-            <property name="build" value="${testsRoot}/build/ejb/statelesshello"/>
-        </ant>
-        <ant dir="${testsRoot}/ear/earwithejb" target="assemble">
-            <property name="build" value="${testsRoot}/build/ear/earwithejb"/>
-        </ant>
--->
-    </target>
-
-    <target name="compile" depends="prepare">
-        <javac srcdir="."
-               destdir="${build}"
-               debug="on"
-               failonerror="true">
-            <classpath refid="test.compile.classpath"/>
-        </javac>
-    </target>
-
-    <!--
-        This target runs a Java class that watches the app server's autodeploy directory and detects
-        when the app server has deployed or undeployed the app (or has reported a failure to do so) by observing
-        when the marker files appear in the directory.
-
-        The target records its results in a temporary properties file in the ${build} directory.
-        This provides a simple way (relatively simple, at least) to use the same target more than once
-        and store different result values in a way that can be retrieved and used from the main
-        target.  (This basically works around the behavior of ant in which a called target's property
-        settings are NOT propagated out to the calling target.  It also avoids the practice of creating
-        a set of marker files that, by their presence or absence, convey success or failure of a substep.)
-    -->
-    <target name="runAutoDeployMonitor">
-        <javaWithResult
-                fork="true"
-                failonerror="false"
-                jvm="${JAVA}"
-                classname="autodeploy.test.AutoDeployMonitor"
-                resultproperty="autodeployResult"
-                output="${build}/${log.id}.output.log"
-            >
-            <jvmarg value="-Dmonitor.debug=true"/>
-
-            <classpath>
-                <path location="${inst}/lib/j2ee.jar"/>
-                <path location="${build}"/>
-            </classpath>
-            <arg line="${arg.list}"/>
-        </javaWithResult>
-
-        <!--
-            The result property name used in the next task is an argument to the called target.
-            Note that the echo is a little oddly formatted.  The </echo> is on a line by itself and left-justified so
-            that the output to the file being written will reside on a line by itself.  The
-            left-justification is not really needed but the properties file looks a bit nicer
-            if you open it in an editor.  This is because the next line in the properties file being
-            written is indented as far as the </echo> is indented here in the build.xml file.
-        -->
-        <echo file="${result.property.file}" append="true">${resultPropertyName}=${autodeployResult}
-</echo>
-
-    </target>
-
-    <target name="deploy.autodeploy">
-
-    <!--
-        To monitor auto-deployment or auto-undeployment, we start by getting the current time.
-        Then we copy the archive file into the autodeploy directory (for auto-deploy) or delete
-        it (for auto-undeploy).  All marker files created by the server during auto-deployment of
-        the newly-copied archive file will have later timestamps than the timestamp just created.
-        There could be earlier marker files for the same archive in the directory and the monitor
-        wants to ignore those, which is why we get the current time and pass it to the monitor.
-
-        The monitor will check for marker files for the copied archive file
-        and whose last modification time are after the current timestamp, returning 0 if the
-        auto-deployer creates a _deployed or _undeployed file, 1 if it creates a _deploy_failed
-        or _undeploy_failed file, and -1 if it recognized no marker file.
-    -->
-        <tstamp prefix="deploy">
-            <format property="NOW" pattern="${dateFormat}"/>
-        </tstamp>
-
-        <!--
-            Trigger the auto-deploy.
-        -->
-        <copy file="${archive.file}" todir="${autodeploy.dir}" overwrite="true"/>
-
-        <!--
-            Use the monitor to detect when the auto-deploy has completed.
-        -->
-        <echo>Waiting for autodeployment to complete...</echo>
-        <antcall target="runAutoDeployMonitor">
-            <param name="arg.list" value="${archiveName} ${autodeploy.dir} ${dateFormat} ${deploy.NOW}"/>
-            <param name="resultPropertyName" value="${deployResultPropertyName}"/>
-            <param name="log.id" value="1"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.autoundeploy">
-
-        <!--
-            This target works very much like the deploy.autodeploy target except that instead of
-            copying the archive into the autodeploy directory it deletes the previously copied
-            archive from that directory.
-        -->
-        <tstamp prefix="undeploy">
-            <format property="NOW" pattern="${dateFormat}"/>
-        </tstamp>
-
-        <!--
-            Trigger auto-undeploy by deleting the file.
-        -->
-        <delete quiet="true">
-            <fileset dir="${autodeploy.dir}" includes="${archiveName}"/>
-        </delete>
-
-        <echo>Waiting for autoundeployment to complete...</echo>
-        <antcall target="runAutoDeployMonitor">
-            <param name="arg.list" value="${archiveName} ${autodeploy.dir} ${dateFormat} ${undeploy.NOW}"/>
-            <param name="resultPropertyName" value="${undeployResultPropertyName}"/>
-            <param name="log.id" value="2"/>
-        </antcall>
-    </target>
-
-    <target name="searchForException">
-        <!--
-            See if the exception text appears in the server.log file.  This step assumes the operating
-            environment supports the grep command.  This should be fine for Solaris and Linux systems
-            and for Windows systems that support building the product.
-
-            The output from the grep is saved into a property (grepOutput),then the property is written
-            into a file.  The file to be written (output.file) is also provided as an argument so this
-            target can be called from different places and the results stored in different files for
-            later comparison.
-        -->
-        <exec
-            executable="grep"
-            resultproperty="grepResult"
-            outputproperty="grepOutput"
-            >
-            <arg value="${exceptionText}"/>
-            <arg value="${server.log.file}"/>
-        </exec>
-
-        <!--
-            If grep does not find the error string it displays Result: 1 which looks like a failure.  The
-            next couple of steps prepare and display a message that reassures someone looking at the log
-            that Result: 1 is not a problem in this context.
-        -->
-        <condition property="statusMessage" value="The preceding Result: 1 message is expected; it means grep did not find the error string.">
-            <equals arg1="${grepResult}" arg2="1"/>
-        </condition>
-
-        <property name="statusMessage" value=""/>
-        <echo>${statusMessage}</echo>
-
-        <echo file="${output.file}">${grepOutput}</echo>
-        <echo file="${result.property.file}" append="true">${resultPropertyName}=${grepResult}
-</echo>
-    </target>
-
-    <target name="checkForRegression" if="fileMatchError">
-        <echo>${fileMatchError}
-
-The string "${exceptionText}" was found, implying that the bug is present.
-</echo>
-    </target>
-
-    <target name="private-all" depends="compile">
-
-        <antcall target="build"/>
-
-        <antcall target="declare-test">
-            <param name="description" value="autodeploy/loadertest Test autodeploy and context class loader"/>
-        </antcall>
-
-        <!--
-            The next task discards any previous temporary file used to gather property settings that
-            record the results of the autodeploy directory monitoring Java class.
-        -->
-        <delete file="${result.property.file}" quiet="true"/>
-
-        <!--
-            Do the auto-deployment.
-       -->
-        <antcall target="deploy.autodeploy">
-            <param name="archive.file" value="${all.ear}"/>
-            <param name="autodeploy.dir" value="${autodeploy.dir}"/>
-            <param name="deployResultPropertyName" value="deployResult"/>
-        </antcall>
-
-        <!--
-            Search the server's log file for occurrences of the exception we're interested in.
-            We do this now, before undeploying, and capture the output in a file.  Then we'll
-            do the same thing after undeploying, capturing that output to s separate file.  We
-            hope the two output files will be the same, meaning that no new exceptions were
-            thrown as a result of the undeploy.  If the bug has resurfaced, then the second
-            output file will contain an additional exception as compared to the first output file.
-        -->
-        <antcall target="searchForException">
-            <param name="resultPropertyName" value="firstSearchResult"/>
-            <param name="output.file" value="${build}/before2nddeploy.log"/>
-        </antcall>
-
-        <!--
-            Now undeploy the app.
-        -->
-        <antcall target="deploy.autoundeploy">
-            <param name="archive.file" value="${all.ear}"/>
-            <param name="autodeploy.dir" value="${autodeploy.dir}"/>
-            <param name="undeployResultPropertyName" value="undeployResult"/>
-        </antcall>
-
-        <!--
-            Trigger another autodeployment.  If the bug is present, this will trigger
-            an exception message in the server's log file although the autodeployment
-            will succeed.
-        -->
-
-        <antcall target="deploy.autodeploy">
-            <param name="archive.file" value="${all.ear}"/>
-            <param name="autodeploy.dir" value="${autodeploy.dir}"/>
-            <param name="deployResultPropertyName" value="secondDeployResult"/>
-        </antcall>
-
-        <!--
-            Search the file again looking for the error message that the bug would trigger.
-        -->
-        <antcall target="searchForException">
-            <param name="resultPropertyName" value="secondSearchResult"/>
-            <param name="output.file" value="${build}/after2nddeploy.log"/>
-        </antcall>
-
-        <!--
-            Autoundeploy the app once more just to clean up.
-        -->
-        <antcall target="deploy.autoundeploy">
-            <param name="archive.file" value="${all.ear}"/>
-            <param name="autodeploy.dir" value="${autodeploy.dir}"/>
-            <param name="undeployResultPropertyName" value="secondUndeployResult"/>
-        </antcall>
-
-        <!--
-            Make the result properties of the several substeps accessible now because we need them in
-            the next several steps.  The prefix attribute helps avoid possible collisions with other
-            property names that might already be present.
-        -->
-        <property file="${result.property.file}" prefix="autodeploy"/>
-
-        <!--
-            Compare the two grep output files.  They will be the same if the test was successful, and
-            the fileMatchError property will be set if the grep outputs do NOT match.
-        -->
-        <condition property="fileMatchError" value="An exception was recorded in the server.log file that indicates a regression of bug 5003242.">
-            <not>
-                <filesmatch file1="${build}/before2nddeploy.log" file2="${build}/after2nddeploy.log"/>
-            </not>
-        </condition>
-
-        <!--
-            Decide whether the test was successful or not.  Make sure that the deploy and
-            undeploy results are good and that the grep for the error string of the server.log
-            file was the same before and after the second autodeployment.  We don't really care
-            if the second undeploy worked or not so we don't check its result property here.
-        -->
-        <condition property="result" value="0">
-            <and>
-                <equals arg1="${autodeploy.deployResult}" arg2="0"/>
-                <equals arg1="${autodeploy.undeployResult}" arg2="0"/>
-                <equals arg1="${autodeploy.secondDeployResult}" arg2="0"/>
-                <not>
-                    <isset property="fileMatchError"/>
-                </not>
-            </and>
-        </condition>
-
-        <antcall target="checkForRegression"/>
-
-        <!--
-            If the property "result" was not set by the "condition" task just above then something
-            went wrong and we set result to 1 now.  Normally checkForRegression will set the value to 0 or 1.
-        -->
-        <condition property="result" value="1">
-            <not>
-                <isset property="result"/>
-            </not>
-        </condition>
-
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/output.log"/>
-        </antcall>
-
-    </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/build.xml b/appserver/tests/appserv-tests/devtests/deployment/build.xml
index 76ddb5b..6381985 100644
--- a/appserver/tests/appserv-tests/devtests/deployment/build.xml
+++ b/appserver/tests/appserv-tests/devtests/deployment/build.xml
@@ -22,69 +22,48 @@
 ]>
 
 <project name="deployment" default="all" basedir=".">
+  &commonBuild;
 
-    &commonBuild;
+  <target name="private-all">
+    <ant dir="war" target="private-all">
+      <property name="build" value="${build}/war" />
+    </ant>
+    <ant dir="ear" target="private-all">
+      <property name="build" value="${build}/ear" />
+    </ant>
+    <ant dir="dol" target="private-all">
+      <property name="build" value="${build}/dol" />
+    </ant>
+    <ant dir="ejb30" target="private-all">
+      <property name="build" value="${build}/ejb30" />
+    </ant>
+    <ant dir="ejb31" target="private-all">
+      <property name="build" value="${build}/ejb31" />
+    </ant>
+    <ant dir="descriptor_free_zone" target="private-all">
+      <property name="build" value="${build}/descriptor_free_zone" />
+    </ant>
+    <ant dir="directorydeploy" target="private-all">
+      <property name="build" value="${build}/directorydeploy" />
+    </ant>
+    <ant dir="versioning" target="private-all">
+      <property name="build" value="${build}/versioning" />
+    </ant>
+    <ant dir="osgi" target="private-all">
+      <property name="build" value="${build}/osgi" />
+    </ant>
+    <ant dir="webservices" target="private-all">
+      <property name="build" value="${build}/webservices" />
+    </ant>
+    <ant dir="javaee8" target="private-all">
+      <property name="build" value="${build}/javaee8" />
+    </ant>
+  </target>
 
-
-    <target name="private-all">
-        <ant dir="war" target="private-all">
-            <property name="build" value="${build}/war"/>
-        </ant>
-        <ant dir="ejb" target="private-all">
-            <property name="build" value="${build}/ejb"/>
-        </ant>
-        <ant dir="ear" target="private-all">
-            <property name="build" value="${build}/ear"/>
-        </ant>
-        <ant dir="jsr88" target="private-all">
-            <property name="build" value="${build}/jsr88"/>
-        </ant>
-        <ant dir="dol" target="private-all">
-            <property name="build" value="${build}/dol"/>
-        </ant>
-<!--        <ant dir="autodeploy" target="private-all">
-            <property name="build" value="${build}/autodeploy"/>
-        </ant> -->
-        <ant dir="annotation" target="private-all">
-            <property name="build" value="${build}/annotation"/>
-        </ant>
-        <ant dir="ejb30" target="private-all">
-            <property name="build" value="${build}/ejb30"/>
-        </ant>
-
-       <ant dir="ejb31" target="private-all">
-            <property name="build" value="${build}/ejb31"/>
-        </ant>
-
-        <ant dir="descriptor_free_zone" target="private-all">
-            <property name="build" value="${build}/descriptor_free_zone"/>
-        </ant>
-        <ant dir="directorydeploy" target="private-all">
-            <property name="build" value="${build}/directorydeploy"/>
-        </ant>
-        <ant dir="versioning" target="private-all">
-            <property name="build" value="${build}/versioning"/>
-        </ant>
-        <ant dir="osgi" target="private-all">
-            <property name="build" value="${build}/osgi"/>
-        </ant>
-        <!-- comment out till issue 12637 is fixed
-        <ant dir="webservices" target="private-all">
-            <property name="build" value="${build}/webservices"/>
-        </ant>
-         -->
-        <ant dir="${testsRoot}/ear/earwithall2" target="depl-order">
-            <property name="build" value="${build}/ear/earwithall2"/>
-        </ant>
-        <ant dir="javaee8" target="private-all">
-             <property name="build" value="${build}/javaee8"/>
-        </ant>
-    </target>
-
-    <target name="clobber" depends="clean">
-        <delete file="${basedir}/tests-results.xml"/>
-        <delete file="${basedir}/results.html"/>
-        <delete file="${basedir}/client.log"/>
-        <delete file="${annotation.report.dir}"/>
-    </target>
+  <target name="clobber" depends="clean">
+    <delete file="${basedir}/tests-results.xml" />
+    <delete file="${basedir}/results.html" />
+    <delete file="${basedir}/client.log" />
+    <delete file="${annotation.report.dir}" />
+  </target>
 </project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/config/common.xml b/appserver/tests/appserv-tests/devtests/deployment/config/common.xml
index 4044334..7920b96 100644
--- a/appserver/tests/appserv-tests/devtests/deployment/config/common.xml
+++ b/appserver/tests/appserv-tests/devtests/deployment/config/common.xml
@@ -138,7 +138,7 @@
     </path>
 
     <path id="test.compile.classpath">
-        <pathelement location="${inst}/lib/j2ee.jar"/>
+        <pathelement location="${inst}/lib/javaee.jar"/>
         <pathelement location="${java.home}/lib/tools.jar"/>
     </path>
 
@@ -705,34 +705,6 @@
     </antcall>
 </target>
 
-<!-- jsr88 deployer commands -->
-
-<!-- deploy user jsr88 -->
-<!-- @param ${arg.list} (required) -->
-<target name="common.deploy.jsr88" >
-    <antcall target="common.run.jsr88">
-        <param name="command" value="deploy"/>
-        <param name="arg.list" value="true ${arg.list}"/>
-    </antcall>
-</target>
-
-<!-- use InputStream signature to deploy -->
-<target name="common.deploy-stream.jsr88" >
-    <antcall target="common.run.jsr88">
-        <param name="command" value="deploy-stream"/>
-        <param name="arg.list" value="true ${arg.list}"/>
-    </antcall>
-</target>
-
-<!-- undeploy user jsr88 -->
-<!-- @param ${arg.list} (required) -->
-<target name="common.undeploy.jsr88" >
-    <antcall target="common.run.jsr88">
-        <param name="command" value="undeploy"/>
-        <param name="arg.list" value="${arg.list}"/>
-    </antcall>
-</target>
-
 <target name="common.run.positive">
     <antcall target="common.run">
         <param name="test-details" value="${desc}"/>
@@ -784,62 +756,6 @@
     </antcall>
 </target>
 
-<!-- run jsr88 -->
-<!-- @param ${arg.list} (required) -->
-<!--
-<target name="common.run.jsr88" depends="init, compile.util">
--->
-<!-- to disable running jsr88 tests, set the property -Drun.jsr88=false -->
-<target name="common.run.jsr88" depends="init, compile.util" unless="run.jsr88" >
-    <delete file="${testsRoot}/build/archives/DEPLOY_RESULT"/>
-
-    <!--
-        Due to differences in command line parsing on Windows and non-Windows systems we need
-        to pass the possibly-empty admin.password differently.
-    -->
-    <condition property="admin.password.arg" value="&quot;${admin.password}&quot;" else="${admin.password}">
-        <os family="windows"/>
-    </condition>
-
-    <echo message="JSR88Deployer ${command} ${jsr88.uri} ${admin.user} ${admin.password}  ${arg.list}"/>
-    <javaWithResult
-            fork="true"
-            failonerror="false"
-            jvm="${JAVA}"
-            classname="devtests.deployment.util.JSR88Deployer"
-            resultproperty="deployActionResult">
-        <arg value="${command}"/>
-        <arg value="${jsr88.uri}"/>
-        <arg value="${admin.user}"/>
-        <arg value="${admin.password.arg}"/>
-        <arg line="${arg.list}"/>
-<!--        <arg line="${command} ${jsr88.uri} ${admin.user} &quot;&quot; ${arg.list}"/> -->
-        <classpath>
-            <path refid="gfv3.classpath"/>
-            <path location="${junit.jar}"/>
-            <path location="${env.APS_HOME}/devtests/deployment/util/build"/>
-        </classpath>
-        <sysproperty key="com.sun.aas.installRoot" value="${inst}"/>
-        <sysproperty key="deploymentTarget" value="${targetPlatform}"/>
-        <sysproperty key="server" value="${appserver.instance.name}"/>
-        <sysproperty key="java.library.path" value="${inst}/lib"/>
-        <sysproperty key="com.sun.aas.configRoot" value="${inst}/config"/>
-<!--
-        <jvmarg value="-Xdebug"/>
-        <jvmarg value="-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=9999"/>
--->
-    </javaWithResult>
-    <condition property="deployFailed">
-        <or>
-            <equals arg1="${deployActionResult}" arg2="-1"/>
-            <equals arg1="${deployActionResult}" arg2="1"/>
-        </or>
-    </condition>
-    <antcall target="deployActionFailed">
-        <param name="indicator" value="${testsRoot}/build/archives/DEPLOY_RESULT"/>
-    </antcall>
-</target>
-
 <target name="deployActionFailed" if="deployFailed">
     <touch file="${indicator}"/>
 </target>
@@ -1242,13 +1158,13 @@
 <target name="init.tools.unix" if="unix">
     <property name="JAVA" value="${java.home}/bin/java"/>
     <property name="ASADMIN" value="${s1as.home}/bin/asadmin"/>
-    <property name="WSCOMPILE" value="${s1as.home}/bin/wscompile"/>
+    <property name="WSCOMPILE" value="${s1as.home}/bin/wsgen"/>
     <property name="APPCLIENT" value="${s1as.home}/bin/appclient"/>
 </target>
 <target name="init.tools.windows" if="windows">
     <property name="JAVA" value="${java.home}/bin/java.exe"/>
     <property name="ASADMIN" value="${s1as.home}/bin/asadmin.bat"/>
-    <property name="WSCOMPILE" value="${s1as.home}/bin/wscompile.bat"/>
+    <property name="WSCOMPILE" value="${s1as.home}/bin/wsgen.bat"/>
     <property name="APPCLIENT" value="${s1as.home}/bin/appclient.bat"/>
 </target>
 
@@ -1268,7 +1184,7 @@
         <jvmarg value="-Djava.library.path=${inst}/lib"/>
         <jvmarg value="-Dcom.sun.aas.configRoot=${inst}/config"/>
         <classpath>
-            <pathelement path="${build}:${inst}/lib/j2ee.jar:${inst}/lib/appserv-rt.jar:${inst}/lib/appserv-admin.jar:${inst}/lib/dom.jar:${inst}/lib/xalan.jar:${inst}/lib/xercesImpl.jar"/>
+            <pathelement path="${build}:${inst}/lib/javaee.jar:${inst}/lib/appserv-rt.jar"/>
         </classpath>
         <arg value="${deployablearchive}"/>
         <arg value="${deploymentplan}"/>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/build.xml b/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/build.xml
index aee49e9..f4f4685 100644
--- a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/build.xml
+++ b/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/build.xml
@@ -26,14 +26,8 @@
         &commonBuild;
 
         <target name="private-all">
-                <ant dir="no_appxml" target="private-all">
-                        <property name="build" value="${build}/no_appxml"/>
-                </ant>
                 <ant dir="dir_deploy" target="private-all">
                         <property name="build" value="${build}/dir_deploy"/>
                 </ant>
-                <ant dir="no_appxml_2" target="private-all">
-                        <property name="build" value="${build}/no_appxml_2"/>
-                </ant>
         </target>
 </project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/README b/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/README
deleted file mode 100644
index 2593df7..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/README
+++ /dev/null
@@ -1,5 +0,0 @@
-This test verifies the following functionalities:
-
-1. deployment of an ear without application.xml
-2. the correct identification of the type of the jar file if the 
-   application.xml does not exist
diff --git a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/build.xml b/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/build.xml
deleted file mode 100644
index 9d11451..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/build.xml
+++ /dev/null
@@ -1,180 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../../config/common.xml">
-]>
-
-<project name="NoAppXml" default="usage" basedir=".">
-
-    &commonBuild;
-
-    <property name="testName" value="NoAppXml"/>
-
-    <target name="prepare" depends="init">
-        <property name="util.jar" value="${build}/util.jar"/>
-        <property name="ejb.jar" value="${build}/ejb.jar"/>
-        <property name="portable.ear" value="${build}/${testName}.ear"/>
-        <property name="appclient.jar" value="${build}/appclient.jar"/>
-        <property name="deployplan.jar" value="${build}/${testName}-deployplan.jar"/>
-    </target>
-
-    <target name="compile" depends="prepare">
-        <mkdir dir="${build}"/>
-        <javac srcdir="."
-               destdir="${build}"
-               debug="on"
-               failonerror="true">
-            <classpath refid="gfv3.classpath"/>
-        </javac>
-    </target>
-
-    <target name="assemble" depends="compile">
-        <jar destfile="${util.jar}">
-            <fileset dir="${build}"
-                     includes="com/sun/s1asdev/deployment/noappxml/util/**.class"/>
-        </jar>
-        <jar destfile="${ejb.jar}" manifest="ejb/MANIFEST.MF">
-            <fileset dir="${build}"
-                     includes="com/sun/s1asdev/deployment/noappxml/ejb/**.class"/>
-        </jar>
-        <jar destfile="${portable.ear}">
-            <fileset dir="${build}" includes="util.jar, ejb.jar"/>
-        </jar>
-        <jar destfile="${appclient.jar}" manifest="client/MANIFEST.MF">
-            <fileset dir="${build}"
-                     includes="com/sun/s1asdev/deployment/noappxml/client/**.class,
-                               com/sun/s1asdev/deployment/noappxml/ejb/Sful.class,
-                               com/sun/s1asdev/deployment/noappxml/ejb/Sless.class"/>
-        </jar>
-    </target>
-
-    <target name="deploy.asadmin" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="${portable.ear}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.asadmin" depends="prepare">
-        <antcall target="common.redeploy.asadmin">
-            <param name="arg.list" value="${portable.ear}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.asadmin">
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="${testName}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.jsr88" depends="prepare">
-        <antcall target="common.deploy.jsr88">
-            <param name="arg.list" value="${portable.ear} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="deploy-stream.jsr88" depends="prepare">
-        <antcall target="common.deploy-stream.jsr88">
-            <param name="arg.list" value="${portable.ear} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.jsr88" depends="prepare">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="redeploy"/>
-            <param name="arg.list" value="${testName}-portable ${portable.ear} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy-stream.jsr88" depends="prepare">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="redeploy-stream"/>
-            <param name="arg.list" value="${testName}-portable ${portable.ear} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.jsr88">
-        <antcall target="common.undeploy.jsr88">
-            <param name="arg.list" value="${testName}-portable"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy-stream.jsr88">
-        <antcall target="common.undeploy.jsr88">
-            <param name="arg.list" value="all"/>
-        </antcall>
-    </target>
-
-    <target name="runclient" depends="prepare,setOrbPort2">
-        <exec executable="${APPCLIENT}"
-              resultproperty="result"
-              failonerror="false"
-              output="${build}/${log.id}.output.log">
-          <arg line="-targetserver ${appclient.targetservers} -client ${appclient.jar}"/>
-        </exec>
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/${log.id}.output.log"/>
-        </antcall>
-    </target>
-
-    <target name="private-all" depends="private-all-pe-ee, private-all-ee"/>
-
-    <!-- the following is run in both PE and EE environment -->
-    <target name="private-all-pe-ee">
-        <antcall target="assemble"/>
-
-        <antcall target="declare-test">
-            <param name="description" value="descriptor_free/ear/no_appxml Test asadmin deploy"/>
-        </antcall>
-        <antcall target="deploy.asadmin"/>
-        <antcall target="runclient">
-            <param name="log.id" value="1"/>
-        </antcall>
-
-        <antcall target="declare-test">
-            <param name="description" value="descriptor_free/ear/no_appxml Test asadmin re-deploy"/>
-        </antcall>
-        <antcall target="redeploy.asadmin"/>
-        <antcall target="runclient">
-            <param name="log.id" value="2"/>
-        </antcall>
-        <antcall target="undeploy.asadmin"/>
-    </target>
-
-    <!-- the following is run only in EE environment -->
-    <target name="private-all-ee" depends="prepare" if="EE">
-        <echo message="Running tests specific to EE"/>
-    </target>
-
-    <target name="clobber" depends="clean">
-        <delete dir="${build}"/>
-        <delete file="client.log"/>
-        <delete file="results.html"/>
-        <delete file="tests-results.xml"/>
-    </target>
-
-    <target name="usage">
-        <antcall target="all"/>
-    </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/client/Client.java b/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/client/Client.java
deleted file mode 100644
index d648004..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/client/Client.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.s1asdev.deployment.noappxml.client;
-
-import jakarta.ejb.EJB;
-import com.sun.s1asdev.deployment.noappxml.ejb.Sful;
-import com.sun.s1asdev.deployment.noappxml.ejb.Sless;
-
-public class Client {
-
-    public static void main (String[] args) {
-        Client client = new Client(args);
-        client.doTest();
-    }
-
-    public Client (String[] args) {}
-
-    @EJB
-    private static Sful sful;
-
-    @EJB
-    private static Sless sless;
-
-    public void doTest() {
-        try {
-
-            System.err.println("invoking stateful");
-            sful.hello();
-
-            System.err.println("invoking stateless");
-            sless.hello();
-
-            pass();
-        } catch(Exception e) {
-            e.printStackTrace();
-            fail();
-        }
-
-            return;
-    }
-
-    private void pass() {
-        System.err.println("PASSED: descriptor_free_zone/ear/no_appxml");
-        System.exit(0);
-    }
-
-    private void fail() {
-        System.err.println("FAILED: descriptor_free_zone/ear/no_appxml");
-        System.exit(-1);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/client/MANIFEST.MF b/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/client/MANIFEST.MF
deleted file mode 100644
index cd5be56..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/client/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Created-By: 1.4.0-beta3 (Sun Microsystems Inc.)
-Main-Class: com.sun.s1asdev.deployment.noappxml.client.Client
diff --git a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/ejb/MANIFEST.MF b/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/ejb/MANIFEST.MF
deleted file mode 100644
index 37e4280..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/ejb/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Created-By: 1.4.0-beta3 (Sun Microsystems Inc.)
-Class-Path: util.jar
diff --git a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/ejb/Sful.java b/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/ejb/Sful.java
deleted file mode 100644
index 840e35e..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/ejb/Sful.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.s1asdev.deployment.noappxml.ejb;
-
-// Remote business interface
-
-public interface Sful
-{
-    public String hello();
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/ejb/SfulEJB.java b/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/ejb/SfulEJB.java
deleted file mode 100644
index 36a9bff..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/ejb/SfulEJB.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.s1asdev.deployment.noappxml.ejb;
-
-import com.sun.s1asdev.deployment.noappxml.util.Util;
-import jakarta.ejb.Stateful;
-import jakarta.ejb.Remote;
-
-@Stateful
-@Remote({Sful.class})
-public class SfulEJB implements Sful
-{
-    public String hello() {
-        Util.log("In SfulEJB:hello()");
-        return "hello";
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/ejb/Sless.java b/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/ejb/Sless.java
deleted file mode 100644
index 844a124..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/ejb/Sless.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.s1asdev.deployment.noappxml.ejb;
-
-// Remote business interface
-
-public interface Sless
-{
-    public String hello();
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/ejb/SlessEJB.java b/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/ejb/SlessEJB.java
deleted file mode 100644
index fbec4fb..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/ejb/SlessEJB.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.s1asdev.deployment.noappxml.ejb;
-
-import com.sun.s1asdev.deployment.noappxml.util.Util;
-import jakarta.ejb.Stateless;
-import jakarta.ejb.Remote;
-
-@Stateless
-@Remote({Sless.class})
-public class SlessEJB implements Sless
-{
-    public String hello() {
-        Util.log("In SlessEJB:hello()");
-        return "hello";
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/util/Util.java b/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/util/Util.java
deleted file mode 100644
index 06b605b..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml/util/Util.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.s1asdev.deployment.noappxml.util;
-
-public class Util {
-    public static void log(String message) {
-        System.out.println(message);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/README b/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/README
deleted file mode 100644
index 17f84d0..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/README
+++ /dev/null
@@ -1,7 +0,0 @@
-This test verifies the following functionalities:
-
-1. deployment of an ear without application.xml
-2. the correct identification of the type of the jar file if the 
-   application.xml does not exist
-3. this test also makes sure that the war can be located anywhere in the package,
-   whereas the ejbs are only under directories not named "lib"
diff --git a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/build.xml b/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/build.xml
deleted file mode 100644
index d256a64..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/build.xml
+++ /dev/null
@@ -1,190 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../../config/common.xml">
-]>
-
-<project name="NoAppXml" default="usage" basedir=".">
-
-    &commonBuild;
-
-    <property name="testName" value="NoAppXml2"/>
-
-    <target name="prepare" depends="init">
-        <property name="util.jar" value="${build}/lib/util.jar"/>
-        <property name="ejb.jar" value="${build}/ejb/ejb.jar"/>
-        <property name="web.war" value="${build}/web/web.war"/>
-        <property name="portable.ear" value="${build}/${testName}.ear"/>
-        <property name="appclient.jar" value="${build}/client/appclient.jar"/>
-        <property name="deployplan.jar" value="${build}/${testName}-deployplan.jar"/>
-    </target>
-
-    <target name="compile" depends="prepare">
-        <mkdir dir="${build}"/>
-        <mkdir dir="${build}/lib"/>
-        <mkdir dir="${build}/ejb"/>
-        <mkdir dir="${build}/client"/>
-        <mkdir dir="${build}/web"/>
-        <javac srcdir="."
-               destdir="${build}"
-               debug="on"
-               failonerror="true">
-            <classpath refid="gfv3.classpath"/>
-        </javac>
-    </target>
-
-    <target name="assemble" depends="compile">
-        <jar destfile="${util.jar}">
-            <fileset dir="${build}"
-                     includes="com/sun/s1asdev/deployment/noappxml/util/**.class"/>
-        </jar>
-        <jar destfile="${ejb.jar}" manifest="ejb/MANIFEST.MF">
-            <fileset dir="${build}"
-                     includes="com/sun/s1asdev/deployment/noappxml/ejb/**.class"/>
-        </jar>
-        <war destfile="${web.war}" webxml="web/web.xml">
-            <fileset dir="web"
-                     includes="**.html"/>
-        </war>
-        <jar destfile="${appclient.jar}" manifest="client/MANIFEST.MF">
-            <fileset dir="${build}"
-                     includes="com/sun/s1asdev/deployment/noappxml/client/**.class,
-                               com/sun/s1asdev/deployment/noappxml/ejb/Sful.class,
-                               com/sun/s1asdev/deployment/noappxml/ejb/Sless.class"/>
-        </jar>
-        <jar destfile="${portable.ear}">
-            <fileset dir="${build}" includes="lib/util.jar, ejb/ejb.jar, web/web.war, client/appclient.jar"/>
-        </jar>
-    </target>
-
-    <target name="deploy.asadmin" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="--retrieve . ${portable.ear}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.asadmin" depends="prepare">
-        <antcall target="common.redeploy.asadmin">
-            <param name="arg.list" value="--retrieve . ${portable.ear}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.asadmin">
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="${testName}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.jsr88" depends="prepare">
-        <antcall target="common.deploy.jsr88">
-            <param name="arg.list" value="${portable.ear} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="deploy-stream.jsr88" depends="prepare">
-        <antcall target="common.deploy-stream.jsr88">
-            <param name="arg.list" value="${portable.ear} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.jsr88" depends="prepare">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="redeploy"/>
-            <param name="arg.list" value="${testName}-portable ${portable.ear} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy-stream.jsr88" depends="prepare">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="redeploy-stream"/>
-            <param name="arg.list" value="${testName}-portable ${portable.ear} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.jsr88">
-        <antcall target="common.undeploy.jsr88">
-            <param name="arg.list" value="${testName}-portable"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy-stream.jsr88">
-        <antcall target="common.undeploy.jsr88">
-            <param name="arg.list" value="all"/>
-        </antcall>
-    </target>
-
-    <target name="runclient" depends="prepare,setOrbPort2,setHttpPort2">
-        <exec executable="${APPCLIENT}"
-              resultproperty="result"
-              failonerror="false"
-              output="${build}/${log.id}.output.log">
-          <arg line="-targetserver ${appclient.targetservers} -client ${testName}Client.jar http://${http.host}:${depltest.port}/web"/>
-        </exec>
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/${log.id}.output.log"/>
-        </antcall>
-    </target>
-
-    <target name="private-all" depends="private-all-pe-ee, private-all-ee"/>
-
-    <!-- the following is run in both PE and EE environment -->
-    <target name="private-all-pe-ee">
-        <antcall target="assemble"/>
-
-        <antcall target="declare-test">
-            <param name="description" value="descriptor_free/ear/no_appxml_2 Test asadmin deploy"/>
-        </antcall>
-        <antcall target="deploy.asadmin"/>
-        <antcall target="runclient">
-            <param name="log.id" value="1"/>
-        </antcall>
-
-        <antcall target="declare-test">
-            <param name="description" value="descriptor_free/ear/no_appxml_2 Test asadmin re-deploy"/>
-        </antcall>
-        <antcall target="redeploy.asadmin"/>
-        <antcall target="runclient">
-            <param name="log.id" value="2"/>
-        </antcall>
-        <antcall target="undeploy.asadmin"/>
-        <delete file="${testName}Client.jar"/>
-    </target>
-
-    <!-- the following is run only in EE environment -->
-    <target name="private-all-ee" depends="prepare" if="EE">
-        <echo message="Running tests specific to EE"/>
-    </target>
-
-    <target name="clobber" depends="clean">
-        <delete dir="${build}"/>
-        <delete file="client.log"/>
-        <delete file="results.html"/>
-        <delete file="tests-results.xml"/>
-    </target>
-
-    <target name="usage">
-        <antcall target="all"/>
-    </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/client/Client.java b/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/client/Client.java
deleted file mode 100644
index 2b1b624..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/client/Client.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.s1asdev.deployment.noappxml.client;
-
-import java.net.*;
-import java.io.*;
-import jakarta.ejb.EJB;
-import com.sun.s1asdev.deployment.noappxml.ejb.Sful;
-import com.sun.s1asdev.deployment.noappxml.ejb.Sless;
-
-public class Client {
-
-    public static void main (String[] args) {
-        Client client = new Client(args);
-        client.doTest(args);
-    }
-
-    public Client (String[] args) {}
-
-    @EJB
-    private static Sful sful;
-
-    @EJB
-    private static Sless sless;
-
-    public void doTest(String args[]) {
-        try {
-
-            System.err.println("invoking stateful");
-            sful.hello();
-
-            System.err.println("invoking stateless");
-            sless.hello();
-
-            System.err.println("argument = " + args[0]);
-            String url = args[0];
-            int code = invokeServlet(url);
-            if (code != 200) {
-                System.err.println("Incorrect return code = " + code);
-                fail();
-                return;
-            }
-
-            pass();
-        } catch(Exception e) {
-            e.printStackTrace();
-            fail();
-        }
-
-            return;
-    }
-
-    private void pass() {
-        System.err.println("PASSED: descriptor_free_zone/ear/no_appxml_2");
-        System.exit(0);
-    }
-
-    private void fail() {
-        System.err.println("FAILED: descriptor_free_zone/ear/no_appxml_2");
-        System.exit(-1);
-    }
-
-    private int invokeServlet(String url) throws Exception {
-        System.err.println("Invoking URL = " + url);
-        URL u = new URL(url);
-        HttpURLConnection c1 = (HttpURLConnection)u.openConnection();
-        int code = c1.getResponseCode();
-        InputStream is = c1.getInputStream();
-        BufferedReader input = new BufferedReader (new InputStreamReader(is));
-        String line = null;
-        while ((line = input.readLine()) != null) {
-            System.err.println(line);
-        }
-        return code;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/client/MANIFEST.MF b/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/client/MANIFEST.MF
deleted file mode 100644
index cd5be56..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/client/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Created-By: 1.4.0-beta3 (Sun Microsystems Inc.)
-Main-Class: com.sun.s1asdev.deployment.noappxml.client.Client
diff --git a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/ejb/MANIFEST.MF b/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/ejb/MANIFEST.MF
deleted file mode 100644
index 452ecc3..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/ejb/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Created-By: 1.4.0-beta3 (Sun Microsystems Inc.)
-Class-Path: lib/util.jar
diff --git a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/ejb/Sful.java b/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/ejb/Sful.java
deleted file mode 100644
index 840e35e..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/ejb/Sful.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.s1asdev.deployment.noappxml.ejb;
-
-// Remote business interface
-
-public interface Sful
-{
-    public String hello();
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/ejb/SfulEJB.java b/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/ejb/SfulEJB.java
deleted file mode 100644
index 36a9bff..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/ejb/SfulEJB.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.s1asdev.deployment.noappxml.ejb;
-
-import com.sun.s1asdev.deployment.noappxml.util.Util;
-import jakarta.ejb.Stateful;
-import jakarta.ejb.Remote;
-
-@Stateful
-@Remote({Sful.class})
-public class SfulEJB implements Sful
-{
-    public String hello() {
-        Util.log("In SfulEJB:hello()");
-        return "hello";
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/ejb/Sless.java b/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/ejb/Sless.java
deleted file mode 100644
index 844a124..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/ejb/Sless.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.s1asdev.deployment.noappxml.ejb;
-
-// Remote business interface
-
-public interface Sless
-{
-    public String hello();
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/ejb/SlessEJB.java b/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/ejb/SlessEJB.java
deleted file mode 100644
index fbec4fb..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/ejb/SlessEJB.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.s1asdev.deployment.noappxml.ejb;
-
-import com.sun.s1asdev.deployment.noappxml.util.Util;
-import jakarta.ejb.Stateless;
-import jakarta.ejb.Remote;
-
-@Stateless
-@Remote({Sless.class})
-public class SlessEJB implements Sless
-{
-    public String hello() {
-        Util.log("In SlessEJB:hello()");
-        return "hello";
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/util/Util.java b/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/util/Util.java
deleted file mode 100644
index 06b605b..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/util/Util.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.s1asdev.deployment.noappxml.util;
-
-public class Util {
-    public static void log(String message) {
-        System.out.println(message);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/web/index.html b/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/web/index.html
deleted file mode 100644
index 27361f8..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/web/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<html>
-<head>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<title>HTML Only Test</title>
-</head>
-<body>
-<p>
-This is a simple HTML page used for HTML only deployment unit test
-</p>
-What else can  be put ?
-</body>
-</html>
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/web/web.xml b/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/web/web.xml
deleted file mode 100644
index bc28b27..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/descriptor_free_zone/ear/no_appxml_2/web/web.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
-  <display-name>dummy web xml</display-name>
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/appmgt/application.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/appmgt/application.xml
deleted file mode 100644
index 81160c9..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/appmgt/application.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<application version="1.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd">
-  <description>Application description</description>
-  <display-name>EARwithWAROnly</display-name>
-  <module>
-    <web>
-      <web-uri>appmgt-web.war</web-uri>
-      <context-root>appmgt/war</context-root>
-    </web>
-  </module>
-</application>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/appmgt/build.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/appmgt/build.xml
deleted file mode 100644
index cc6ce95..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/appmgt/build.xml
+++ /dev/null
@@ -1,408 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="appMgtTestApp" default="usage" basedir=".">
-
-    &commonBuild;
-
-    <property name="testName" value="appmgt"/>
-    <property name="webModuleName" value="appmgt-web.war"/>
-    <property name="asadminCmdArg" value="${testName}/${webModuleName}"/>
-    <property name="all.ear" value="${build}/archive/${testName}.ear"/>
-    <property name="testCategory" value="ear/appmgt"/>
-    <property name="urlToContact" value="${testName}/war"/>
-
-    <property name="original.config.client.args" value="-param builtin=in-app -env builtin(java.lang.String)=in-app"/>
-    <property name="customized.config.client.args" value="-env env1(java.lang.String)=env-val1 -param par1=par-val1"/>
-
-    <target name="prepare" depends="init">
-        <property name="all.war" value="${build}/${webModuleName}"/>
-        <mkdir dir="${build}"/>
-    </target>
-
-    <target name="compile" depends="prepare">
-        <javac srcdir="."
-               destdir="${build}"
-               debug="on"
-               failonerror="true">
-            <classpath refid="gfv3.classpath" />
-        </javac>
-    </target>
-
-    <target name="assemble" depends="compile">
-        <ant dir="../../war/appmgt" target="compile">
-            <property name="build" value="${build}"/>
-        </ant>
-
-        <war destfile="${all.war}" webxml="web.xml">
-            <classes dir="${build}"/>
-        </war>
-
-
-        <copy file="application.xml" todir="${build}/archive/META-INF"/>
-        <copy file="${all.war}" todir="${build}/archive"/>
-        <jar destfile="${all.ear}" basedir="${build}/archive"/>
-    </target>
-
-    <target name="deploy.asadmin" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="${all.ear}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.asadmin" depends="prepare">
-        <antcall target="common.redeploy.asadmin">
-            <param name="arg.list" value="${all.ear}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-   <target name="v3.redeploy.asadmin" depends="prepare">
-        <antcall target="common.v3.redeploy.asadmin">
-            <param name="arg.list"
-                   value="--name ${testName} ${all.ear}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.asadmin">
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="${testName}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="enable.asadmin">
-        <antcall target="common.enable.asadmin">
-            <param name="arg.list"
-                   value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="disable.asadmin">
-        <antcall target="common.disable.asadmin">
-            <param name="arg.list"
-                   value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.jsr88" depends="prepare">
-        <antcall target="common.deploy.jsr88">
-            <param name="arg.list" value="${portable.war} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.jsr88" depends="prepare">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="redeploy"/>
-            <param name="arg.list" value="appmgt-portable ${portable.war} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.jsr88">
-        <antcall target="common.undeploy.jsr88">
-            <param name="arg.list" value="appmgt-portable"/>
-        </antcall>
-    </target>
-
-    <target name="start.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="start"/>
-            <param name="arg.list" value="appmgt-portable"/>
-        </antcall>
-    </target>
-
-    <target name="stop.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="stop"/>
-            <param name="arg.list" value="appmgt-portable"/>
-        </antcall>
-    </target>
-
-    <target name="do.asadmin">
-        <antcall target="common.run.asadmin">
-            <param name="arg.list" value="${command} ${arg.list} ${asadminCmdArg}"/>
-        </antcall>
-    </target>
-
-    <target name="run" depends="run.positive"/>
-
-    <target name="run.positive" depends="setHttpPort">
-        <antcall target="common.run.positive">
-            <param name="link" value="${urlToContact}"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="run.negative" depends="setHttpPort">
-        <antcall target="common.run.negative">
-            <param name="link" value="${urlToContact}"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="runclient" depends="init">
-        <echo message="TestClient ${arg.list}"/>
-        <javaWithResult
-            fork="true"
-            failonerror="false"
-            jvm="${JAVA}"
-            classname="appmgttest.TestClient"
-            output="${build}/${log.id}.output.log"
-            resultproperty="result">
-            <jvmarg value="-Dorg.omg.CORBA.ORBInitialHost=${http.host}"/>
-            <jvmarg value="-Dorg.omg.CORBA.ORBInitialPort=${orb.port}"/>
-
-            <classpath>
-                <path location="${inst}/lib/j2ee.jar"/>
-                <path location="${build}"/>
-            </classpath>
-
-            <arg line="${arg.list}"/>
-        </javaWithResult>
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/${log.id}.output.log"/>
-        </antcall>
-    </target>
-
-    <target name="private-all" depends="private-all-pe"/>
-
-    <target name="private-all-pe" if="PE">
-
-        <antcall target="assemble"/>
-
-        <antcall target="deploy.asadmin"/>
-
-        <antcall target="runTests"/>
-
-        <antcall target="undeploy.asadmin"/>
-
-    </target>
-
-    <target name="runTests">
-
-        <!--
-            Note that the client asks the servlet to report all its
-            env-entries and all context-params.  Then the client uses the
-            client command-line args to search for matching entries that the
-            servlet returned.  We expect positive results for env-entries or
-            context-params defined EITHER in the web app OR in the customizations,
-            unless of course the customizations request ignoreDescriptorItem in
-            which case the corresponding descriptor item should not appear in
-            the data the servlet sends to the client.
-        -->
-        <antcall target="check.original.config.with.no.customization">
-            <param name="log.id" value="1"/>
-        </antcall>
-
-        <!--
-            Now create a new env entry and context param via customization.
-        -->
-
-        <antcall target="do.asadmin">
-            <param name="command" value="set-web-env-entry"/>
-            <param name="arg.list" value="--name=env1 --type=java.lang.String --value=env-val1"/>
-        </antcall>
-
-        <antcall target="do.asadmin">
-            <param name="command" value="set-web-context-param"/>
-            <param name="arg.list" value="--name=par1 --value=par-val1"/>
-        </antcall>
-
-        <antcall target="disable.asadmin"/>
-        <antcall target="enable.asadmin"/>
-
-        <antcall target="check.original.config.with.additive.customization">
-            <param name="log.id" value="2"/>
-        </antcall>
-
-        <!--
-            Further customize by suppressing the original env-entry and
-            context-param but leaving the added ones.
-        -->
-        <antcall target="do.asadmin">
-            <param name="command" value="set-web-env-entry"/>
-            <param name="arg.list" value="--name builtin --ignoreDescriptorItem=true"/>
-        </antcall>
-
-        <antcall target="do.asadmin">
-            <param name="command" value="set-web-context-param"/>
-            <param name="arg.list" value="--name=builtin --ignoreDescriptorItem=true"/>
-        </antcall>
-
-        <!--
-            Restart the app so the config changes will have effect.
-        -->
-        <antcall target="disable.asadmin"/>
-        <antcall target="enable.asadmin"/>
-
-        <antcall target="check.added.customization.and.suppressed.original.config">
-            <param name="log.id" value="3"/>
-        </antcall>
-
-        <!--
-            Make sure the results are the same after a redeployment.
-        -->
-        <antcall target="v3.redeploy.asadmin"/>
-
-        <antcall target="check.added.customization.and.suppressed.original.config">
-            <param name="log.id" value="4"/>
-        </antcall>
-
-        <!--
-            Redeploy using deploy force=true.  The customizations should
-            survive.
-        -->
-
-        <antcall target="redeploy.asadmin"/>
-
-        <antcall target="check.added.customization.and.suppressed.original.config">
-            <param name="log.id" value="5"/>
-        </antcall>
-
-        <!--
-            Now unset the customizations and then make sure that the behavior
-            is back to how it was immediately after the initial deployment.
-        -->
-
-        <antcall target="do.asadmin">
-            <param name="command" value="unset-web-env-entry"/>
-            <param name="arg.list" value="--name=env1"/>
-        </antcall>
-
-        <antcall target="do.asadmin">
-            <param name="command" value="unset-web-env-entry"/>
-            <param name="arg.list" value="--name builtin"/>
-        </antcall>
-
-        <antcall target="do.asadmin">
-            <param name="command" value="unset-web-context-param"/>
-            <param name="arg.list" value="--name=par1"/>
-        </antcall>
-
-        <antcall target="do.asadmin">
-            <param name="command" value="unset-web-context-param"/>
-            <param name="arg.list" value="--name=builtin"/>
-        </antcall>
-
-        <!-- Restart so the changes become effective. -->
-        <antcall target="disable.asadmin"/>
-        <antcall target="enable.asadmin"/>
-
-        <antcall target="check.original.config.with.no.customization">
-            <param name="log.id" value="6"/>
-        </antcall>
-
-        <!--
-            The app is still deployed.  Undeploy it then deploy it again.
-            The customizations should have vanished.
-        -->
-
-        <antcall target="undeploy.asadmin"/>
-
-        <antcall target="deploy.asadmin"/>
-
-        <antcall target="check.original.config.with.no.customization">
-            <param name="log.id" value="7"/>
-        </antcall>
-
-    </target>
-
-    <!--
-        Makes sure the app's configuration matches how it
-        was when first deployed, before any customization.
-    -->
-    <target name="check.original.config.with.no.customization">
-        <antcall target="run.positive">
-            <param name="log.id" value="${log.id}.1"/>
-            <param name="desc" value="${testCategory} Check app's original config [${log.id}.1]"/>
-            <param name="extra.args" value="${original.config.client.args}"/>
-        </antcall>
-
-        <antcall target="run.negative">
-            <param name="log.id" value="${log.id}.2"/>
-            <param name="desc" value="${testCategory} Make sure a non-existent customization is absent [${log.id}.2]"/>
-            <param name="extra.args" value="-env notThere(java.lang.String)=in-app"/>
-        </antcall>
-
-        <antcall target="run.negative">
-            <param name="log.id" value="${log.id}.3"/>
-            <param name="desc" value="${testCategory} Make sure a customization used during the test is absent when it should be [${log.id}.3]"/>
-            <param name="extra.args" value="${customized.config.client.args}"/>
-        </antcall>
-    </target>
-
-    <!--
-        Make sure that the customizations are
-        reflected with the app's original config.
-    -->
-    <target name="check.original.config.with.additive.customization">
-        <antcall target="run.positive">
-            <param name="log.id" value="${log.id}.1"/>
-            <param name="desc" value="${testCategory} Check app's original config plus additive customization [${log.id}.1]"/>
-            <param name="extra.args" value="${original.config.client.args} ${customized.config.client.args}"/>
-        </antcall>
-
-    </target>
-
-    <target name="check.additive.customization">
-        <antcall target="run.positive">
-            <param name="log.id" value="${log.id}.1"/>
-            <param name="desc" value="${testCategory} Check for added env and param customization [${log.id}.1]"/>
-            <param name="extra.args" value="${customized.config.client.args}"/>
-        </antcall>
-    </target>
-
-    <target name="check.added.customization.and.suppressed.original.config">
-        <antcall target="check.additive.customization">
-            <param name="log.id" value="${log.id}.1"/>
-        </antcall>
-        <antcall target="check.suppressed.original.config">
-            <param name="log.id" value="${log.id}.2"/>
-        </antcall>
-    </target>
-
-    <target name="check.suppressed.original.config">
-        <antcall target="run.negative">
-            <param name="log.id" value="${log.id}.1"/>
-            <param name="desc" value="${testCategory} Check for env-entry in the web app's descr being (correctly) ignored [${log.id}.1]"/>
-            <param name="extra.args" value="-env builtin(java.lang.String)=in-app"/>
-        </antcall>
-
-        <antcall target="run.negative">
-            <param name="log.id" value="${log.id}.2"/>
-            <param name="desc" value="${testCategory} Check for context-param in the web app's descr being (correctly) ignored [${log.id}.2]"/>
-            <param name="extra.args" value="-param builtin=in-app"/>
-        </antcall>
-    </target>
-
-    <target name="clobber" depends="clean">
-        <delete file="${all.ear}"/>
-        <delete dir="${build}"/>
-    </target>
-
-    <target name="usage">
-        <antcall target="all"/>
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/appmgt/web.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/appmgt/web.xml
deleted file mode 100644
index a13ed51..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/appmgt/web.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
-    <context-param>
-        <description>This context-param was defined in the web app itself.</description>
-        <param-name>builtin</param-name>
-        <param-value>in-app</param-value>
-    </context-param>
-    <servlet>
-        <servlet-name>TestServlet</servlet-name>
-        <servlet-class>appmgttest.TestServlet</servlet-class>
-    </servlet>
-    <servlet-mapping>
-        <servlet-name>TestServlet</servlet-name>
-        <url-pattern>/*</url-pattern>
-    </servlet-mapping>
-    <session-config>
-        <session-timeout>
-            30
-        </session-timeout>
-    </session-config>
-    <welcome-file-list>
-        <welcome-file>index.jsp</welcome-file>
-        </welcome-file-list>
-    <env-entry>
-        <description>This env-entry was defined in the web app app itself.</description>
-        <env-entry-name>builtin</env-entry-name>
-        <env-entry-type>java.lang.String</env-entry-type>
-        <env-entry-value>in-app</env-entry-value>
-    </env-entry>
-    </web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/build.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/build.xml
index cbf597a..2cce55a 100644
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/build.xml
+++ b/appserver/tests/appserv-tests/devtests/deployment/ear/build.xml
@@ -23,40 +23,18 @@
 
 <project name="ear" default="all" basedir=".">
 
-        &commonBuild;
+  &commonBuild;
 
-        <target name="private-all">
-                <ant dir="earwithwar" target="private-all">
-                        <property name="build" value="${build}/earwithwar"/>
-                </ant>
-                <ant dir="earwithejb" target="private-all">
-                        <property name="build" value="${build}/earwithejb"/>
-                </ant>
-                <!--ant dir="wstoejb" target="private-all">
-                        <property name="build" value="${build}/wstoejb"/>
-                </ant>
-                <ant dir="earwithall" target="private-all">
-                        <property name="build" value="${build}/earwithall"/>
-                </ant-->
-                <ant dir="earwithall2" target="private-all">
-                        <property name="build" value="${build}/earwithall2"/>
-                </ant>
-                <ant dir="uniquecr" target="private-all">
-                        <property name="build" value="${build}/uniquecr"/>
-                </ant>
-                <ant dir="libClassPath" target="private-all">
-                        <property name="build" value="${build}/libClassPath"/>
-                </ant>
+  <target name="private-all">
+    <ant dir="libClassPath" target="private-all">
+      <property name="build" value="${build}/libClassPath" />
+    </ant>
 
-                <ant dir="libclasspath2" target="private-all">
-                        <property name="build" value="${build}/libclasspath2"/>
-                </ant>
-                <ant dir="manifestClassPath" target="private-all">
-                        <property name="build" value="${build}/manifestClassPath"/>
-                </ant>
-
-                <ant dir="appmgt" target="private-all">
-                    <property name="build" value="${build}/appmgt"/>
-                </ant>
-        </target>
+    <ant dir="libclasspath2" target="private-all">
+      <property name="build" value="${build}/libclasspath2" />
+    </ant>
+    <ant dir="manifestClassPath" target="private-all">
+      <property name="build" value="${build}/manifestClassPath" />
+    </ant>
+  </target>
 </project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/application.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/application.xml
deleted file mode 100644
index 42328d5..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/application.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<application version="1.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd">
-  <description>Application description</description>
-  <display-name>EARwithEverything</display-name>
-  <module>
-    <web>
-      <web-uri>sayhello.war</web-uri>
-      <context-root>HelloService</context-root>
-    </web>
-  </module>
-  <module>
-     <ejb>statelesshello.jar</ejb>
-  </module>
-</application>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/build.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/build.xml
deleted file mode 100644
index e99995c..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/build.xml
+++ /dev/null
@@ -1,254 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="HelloServiceWS" default="all" basedir=".">
-
-    &commonBuild;
-
-    <property name="testName" value="SayHelloWS"/>
-    <property name="archivedir" value="${build}/archives"/>
-    <target name="prepare" depends="init">
-                <property name="binary" value="${build}/WEB-INF/classes"/>
-                <property name="wsdl" value="${build}/WEB-INF/wsdl"/>
-                <mkdir dir="${binary}" />
-                <mkdir dir="${wsdl}"/>
-                <mkdir dir="${build}/ejb"/>
-                <property name="portable.war" value="${archivedir}/sayhello-portable.war"/>
-                <property name="portable.jar" value="${archivedir}/statelesshello-portable.jar"/>
-                <property name="portable.ear" value="${archivedir}/sayhello-portable.ear"/>
-                <property name="all.war" value="${archivedir}/sayhello.war"/>
-                <property name="all.jar" value="${archivedir}/statelesshello.jar"/>
-                <property name="all.ear" value="${archivedir}/sayhello.ear"/>
-                <property name="deployplan.jar" value="${archivedir}/sayhello-deployplan.jar"/>
-    </target>
-
-    <target name="compile" depends="prepare">
-        <javac srcdir="statelesshello" destdir="${build}/ejb">
-          <classpath refid="gfv3.classpath"/>
-        </javac>
-                <javac srcdir="helloservice" destdir="${binary}">
-                    <classpath refid="gfv3.classpath"/>
-                </javac>
-                <echo message="invoking wscompile to generate wsdl file"/>
-                <exec executable="${WSCOMPILE}">
-                        <arg line="-define config-interface.xml  -d ${binary} -nd ${wsdl} -classpath ${binary} -mapping ${build}/mapping.xml"/>
-                 </exec>
-    </target>
-
-    <target name="assemble" depends="compile">
-                <copy file="web.xml" todir="${build}/WEB-INF"/>
-                <copy file="webservices.xml" todir="${build}/WEB-INF"/>
-                <jar destfile="${portable.war}" basedir="${build}"/>
-                <copy file="sun-web.xml" todir="${build}/WEB-INF" failonerror="false"/>
-                <jar destfile="${all.war}" basedir="${build}"/>
-
-                <mkdir dir="${build}/ejb/META-INF"/>
-                <copy file="ejb-jar.xml" todir="${build}/ejb/META-INF"/>
-                <jar destfile="${portable.jar}" basedir="${build}/ejb"/>
-                <copy file="sun-ejb-jar.xml" todir="${build}/ejb/META-INF" failonerror="false"/>
-                <jar destfile="${all.jar}" basedir="${build}/ejb"/>
-
-                <mkdir dir="${build}/plan"/>
-                <copy file="sun-ejb-jar.xml" tofile="${build}/plan/statelesshello-portable.jar.sun-ejb-jar.xml"/>
-                <copy file="sun-web.xml" tofile="${build}/plan/sayhello-portable.war.sun-web.xml"/>
-                <jar destfile="${deployplan.jar}" basedir="${build}/plan"/>
-
-                <mkdir dir="${build}/ear"/>
-                <mkdir dir="${build}/ear/META-INF"/>
-                <copy file="application.xml" todir="${build}/ear/META-INF"/>
-                <copy file="${all.war}" todir="${build}/ear"/>
-                <copy file="${all.jar}" todir="${build}/ear"/>
-                <jar destfile="${all.ear}" basedir="${build}/ear"/>
-                <delete file="${build}/ear/sayhello.war"/>
-                <delete file="${build}/ear/statelesshello.jar"/>
-                <delete file="${build}/ear/META-INF/application.xml"/>
-                <copy file="portable-app.xml" tofile="${build}/ear/META-INF/application.xml"/>
-                <copy file="${portable.war}" todir="${build}/ear"/>
-                <copy file="${portable.jar}" todir="${build}/ear"/>
-                <jar destfile="${portable.ear}" basedir="${build}/ear"/>
-    </target>
-
-    <target name="deploy.asadmin" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="--name ${testName} ${all.ear}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-        <echo message="Create client webservices artifacts"/>
-        <exec executable="${WSCOMPILE}">
-                <arg line="-gen:client -keep -d ${binary} -classpath ${binary} config-interface.xml"/>
-        </exec>
-    </target>
-
-    <target name="redeploy.asadmin" depends="prepare">
-        <antcall target="common.redeploy.asadmin">
-            <param name="arg.list" value="--name ${testName} ${all.ear}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-        <echo message="Create client webservices artifacts"/>
-        <exec executable="${WSCOMPILE}">
-                <arg line="-gen:client -keep -d ${binary} -classpath ${binary} config-interface.xml"/>
-        </exec>
-    </target>
-
-    <target name="undeploy.asadmin">
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="${testName}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.jsr88" depends="prepare">
-        <antcall target="common.deploy.jsr88">
-            <param name="arg.list" value="${portable.ear} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.jsr88" depends="prepare">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="redeploy"/>
-            <param name="arg.list" value="sayhello-portable ${portable.ear} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.jsr88">
-        <antcall target="common.undeploy.jsr88">
-            <param name="arg.list" value="sayhello-portable"/>
-        </antcall>
-    </target>
-
-    <target name="start.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="start"/>
-            <param name="arg.list" value="sayhello-portable"/>
-        </antcall>
-    </target>
-
-    <target name="stop.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="stop"/>
-            <param name="arg.list" value="sayhello-portable"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.autodeploy">
-    </target>
-
-    <target name="run" depends="run.positive"/>
-
-    <target name="run.positive" depends="setHttpPort">
-        <antcall target="common.run.positive">
-            <param name="link" value="HelloService/HelloService"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="run.negative" depends="setHttpPort">
-        <antcall target="common.run.negative">
-            <param name="link" value="HelloService/HelloService"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="runclient" depends="prepare">
-        <javac srcdir="staticstubclient" destdir="${binary}"
-               classpath="${inst}/lib/j2ee.jar:${inst}/lib/webservices-rt.jar:${inst}/lib/webservices-tools.jar"/>
-
-        <javaWithResult
-            fork="true"
-            failonerror="false"
-            jvm="${JAVA}"
-            classname="staticstubclient.SayHelloClient"
-            output="${build}/${log.id}.output.log"
-            resultproperty="result">
-
-
-            <classpath>
-                <path location="${inst}/lib/j2ee.jar"/>
-                <path location="${inst}/lib/webservices-rt.jar"/>
-                <path location="${inst}/lib/webservices-tools.jar"/>
-                <path location="${binary}"/>
-            </classpath>
-
-            <arg line="${arg.list}"/>
-        </javaWithResult>
-
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/${log.id}.output.log"/>
-        </antcall>
-    </target>
-
-    <target name="private-all">
-        <antcall target="assemble"/>
-        <antcall target="deploy.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="1"/>
-            <param name="desc" value="ear/earwithall Test asadmin deploy"/>
-        </antcall>
-
-        <antcall target="redeploy.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="2"/>
-            <param name="desc" value="ear/earwithall Test asadmin redeploy"/>
-        </antcall>
-        <antcall target="undeploy.asadmin"/>
-
-<!--
-        <antcall target="deploy.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="3"/>
-            <param name="desc" value="ear/earwithall Test jsr88 deploy"/>
-        </antcall>
--->
-
-        <!--antcall target="stop.jsr88"/>
-        <antcall target="run.negative">
-            <param name="log.id" value="4"/>
-            <param name="desc" value="ear/earwithall Test jsr88 stopped state"/>
-        </antcall>
-
-        <antcall target="start.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="5"/>
-            <param name="desc" value="ear/earwithall Test jsr88 started state"/>
-        </antcall>
-
-        <antcall target="stop.jsr88"/>
-        <antcall target="redeploy.jsr88"/>
-        <antcall target="run.negative">
-            <param name="log.id" value="6"/>
-            <param name="desc" value="ear/earwithall Test jsr88 redeploy stop"/>
-        </antcall>
-
-        <antcall target="start.jsr88"/>
-        <antcall target="redeploy.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="7"/>
-            <param name="desc" value="ear/earwithall Test jsr88 redeploy start"/>
-        </antcall-->
-<!--
-        <antcall target="undeploy.jsr88"/>
--->
-
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/config-interface.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/config-interface.xml
deleted file mode 100644
index 894789a..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/config-interface.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<configuration
-  xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
-  <service
-      name="SayHelloService"
-      targetNamespace="urn:DeploymentWebServiceTest"
-      typeNamespace="urn:DeploymentWebServiceTest"
-      packageName="helloservice">
-      <interface name="helloservice.SayHello"/>
-  </service>
-</configuration>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/ejb-jar.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/ejb-jar.xml
deleted file mode 100644
index 254e84f..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/ejb-jar.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<ejb-jar version="2.1" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">
-  <display-name>Ejb1</display-name>
-  <enterprise-beans>
-    <session>
-      <ejb-name>MyStatelesshelloEJB</ejb-name>
-      <home>statelesshello.StatelesshelloHome</home>
-      <remote>statelesshello.Statelesshello</remote>
-      <ejb-class>statelesshello.StatelesshelloEJB</ejb-class>
-      <session-type>Stateless</session-type>
-      <transaction-type>Container</transaction-type>
-      <security-identity>
-        <use-caller-identity/>
-      </security-identity>
-    </session>
-  </enterprise-beans>
-  <assembly-descriptor>
-    <container-transaction>
-      <method>
-        <ejb-name>MyStatelesshelloEJB</ejb-name>
-        <method-intf>Remote</method-intf>
-        <method-name>sayStatelesshello</method-name>
-      </method>
-      <trans-attribute>Required</trans-attribute>
-    </container-transaction>
-  </assembly-descriptor>
-</ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/helloservice/SayHello.java b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/helloservice/SayHello.java
deleted file mode 100644
index d715c4f..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/helloservice/SayHello.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
- package helloservice;
-
-import java.rmi.Remote;
-import java.rmi.RemoteException;
-
- /*
-  * This is a minimum WebService interface
-  */
-  public interface SayHello  extends Remote {
-
-          /*
-           * @return a hello string
-           */
-           public String sayHello(String name) throws RemoteException;
-
-  }
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/helloservice/SayHelloImpl.java b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/helloservice/SayHelloImpl.java
deleted file mode 100644
index 51bf9b4..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/helloservice/SayHelloImpl.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package helloservice;
-
-import javax.rmi.*;
-import java.rmi.*;
-import javax.naming.*;
-import jakarta.ejb.*;
-import statelesshello.*;
-
-public class SayHelloImpl implements SayHello {
-
-        public String message ="Message from servlet is : Bonjour ";
-
-        public String sayHello(String s) throws RemoteException {
-            try {
-
-                Context ic = new InitialContext();
-
-                // create EJB using factory from container
-                java.lang.Object objref = ic.lookup("java:comp/env/ejb/MyStatelesshello");
-                System.out.println("Looked up home!!");
-
-                StatelesshelloHome home =
-                    (StatelesshelloHome) PortableRemoteObject.narrow(
-                                objref, StatelesshelloHome.class);
-                System.out.println("Narrowed home!!");
-
-                Statelesshello hr = home.create();
-                System.out.println("Got the EJB!!");
-
-                // invoke method on the EJB
-                message = hr.sayStatelesshello() + ";" + message + s;
-            } catch (Exception e) {
-                System.out.println("Servlet sayHelloImpl recd exception : " +
-                                   e.getMessage());
-                e.printStackTrace();
-            }
-            return message;
-        }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/portable-app.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/portable-app.xml
deleted file mode 100644
index c6d7c89..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/portable-app.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<application version="1.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd">
-  <description>Application description</description>
-  <display-name>EARwithEverything</display-name>
-  <module>
-    <web>
-      <web-uri>sayhello-portable.war</web-uri>
-      <context-root>HelloService</context-root>
-    </web>
-  </module>
-  <module>
-     <ejb>statelesshello-portable.jar</ejb>
-  </module>
-</application>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/statelesshello/Statelesshello.java b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/statelesshello/Statelesshello.java
deleted file mode 100644
index 1b08767..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/statelesshello/Statelesshello.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package statelesshello;
-
-import jakarta.ejb.*;
-import java.rmi.Remote;
-import java.rmi.RemoteException;
-import java.io.Serializable;
-
-public interface Statelesshello extends EJBObject {
-
-    public String sayStatelesshello() throws RemoteException;
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/statelesshello/StatelesshelloEJB.java b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/statelesshello/StatelesshelloEJB.java
deleted file mode 100644
index 1c0363a..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/statelesshello/StatelesshelloEJB.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package statelesshello;
-
-import java.io.Serializable;
-import java.rmi.RemoteException;
-import jakarta.ejb.SessionBean;
-import jakarta.ejb.SessionContext;
-import jakarta.ejb.EJBException;
-import javax.naming.*;
-
-public class StatelesshelloEJB implements SessionBean {
-    private SessionContext sc;
-
-    public StatelesshelloEJB(){}
-
-    public void ejbCreate() throws RemoteException {
-        System.out.println("In ejbCreate !!");
-    }
-
-    public String sayStatelesshello() throws EJBException {
-        System.out.println("StatelesshelloEJB is saying hello to user\n");
-        return("A Big hello from stateless HELLO");
-    }
-
-    public void setSessionContext(SessionContext sc) {
-
-        this.sc = sc;
-    }
-
-    public void ejbRemove() throws RemoteException {}
-
-    public void ejbActivate() {}
-
-    public void ejbPassivate() {}
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/statelesshello/StatelesshelloHome.java b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/statelesshello/StatelesshelloHome.java
deleted file mode 100644
index 1513c0b..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/statelesshello/StatelesshelloHome.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package statelesshello;
-
-
-import java.io.Serializable;
-import java.rmi.Remote;
-import java.rmi.RemoteException;
-import jakarta.ejb.EJBHome;
-import jakarta.ejb.CreateException;
-
-
-public interface StatelesshelloHome extends EJBHome {
-
-    public Statelesshello create () throws RemoteException, CreateException;
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/staticstubclient/SayHelloClient.java b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/staticstubclient/SayHelloClient.java
deleted file mode 100644
index d65a7ea..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/staticstubclient/SayHelloClient.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package staticstubclient;
-
-import javax.xml.rpc.Stub;
-import helloservice.*;
-
-public class SayHelloClient {
-
-    private String endpointAddress;
-
-    public static void main(String[] args) {
-
-        System.out.println("Endpoint address = " + args[0]);
-        boolean testPositive = (Boolean.valueOf(args[1])).booleanValue();
-        try {
-            Stub stub = createProxy();
-            stub._setProperty
-              (javax.xml.rpc.Stub.ENDPOINT_ADDRESS_PROPERTY,
-               args[0]);
-                        SayHello hello = (SayHello)stub;
-            System.out.println(hello.sayHello("Jerome !"));
-        } catch (Exception ex) {
-            if(testPositive) {
-                ex.printStackTrace();
-                System.exit(-1);
-            } else {
-                System.out.println("Exception recd as expected");
-            }
-        }
-        System.exit(0);
-    }
-
-    private static Stub createProxy() {
-        // Note: MyHelloService_Impl is implementation-specific.
-        return
-        (Stub) (new SayHelloService_Impl().getSayHelloPort());
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/sun-ejb-jar.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/sun-ejb-jar.xml
deleted file mode 100644
index 6e45b93..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/sun-ejb-jar.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 EJB 2.1//EN" "http://www.sun.com/software/sunone/appserver/dtds/sun-ejb-jar_2_1-0.dtd">
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<sun-ejb-jar>
-  <enterprise-beans>
-    <unique-id>0</unique-id>
-    <ejb>
-      <ejb-name>MyStatelesshelloEJB</ejb-name>
-      <jndi-name>ejb/MyStatelesshello</jndi-name>
-    </ejb>
-  </enterprise-beans>
-</sun-ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/sun-web.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/sun-web.xml
deleted file mode 100644
index 77052c4..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/sun-web.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 Servlet 2.4//EN' 'http://www.sun.com/software/sunone/appserver/dtds/sun-web-app_2_4-0.dtd'>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<sun-web-app>
-    <ejb-ref>
-        <ejb-ref-name>ejb/MyStatelesshello</ejb-ref-name>
-        <jndi-name>ejb/MyStatelesshello</jndi-name>
-    </ejb-ref>
-</sun-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/web.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/web.xml
deleted file mode 100644
index bc32ab0..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/web.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-  <display-name>HelloServiceWS</display-name>
-  <servlet>
-    <servlet-name>HelloService</servlet-name>
-    <servlet-class>helloservice.SayHelloImpl</servlet-class>
-    <load-on-startup>0</load-on-startup>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>HelloService</servlet-name>
-    <url-pattern>/HelloService</url-pattern>
-  </servlet-mapping>
-  <session-config>
-    <session-timeout>54</session-timeout>
-  </session-config>
-  <ejb-ref>
-    <ejb-ref-name>ejb/MyStatelesshello</ejb-ref-name>
-    <ejb-ref-type>Session</ejb-ref-type>
-    <home>statelesshello.StatelesshelloHome</home>
-    <remote>statelesshello.Statelesshello</remote>
-    <ejb-link>MyStatelesshelloEJB</ejb-link>
-  </ejb-ref>
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/webservices.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/webservices.xml
deleted file mode 100644
index e4ea4b1..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall/webservices.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<webservices xmlns="http://java.sun.com/xml/ns/j2ee"
-      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
-        http://www.ibm.com/webservices/xsd/j2ee_web_services_1_1.xsd"
-      version="1.1">
-  <description>Very simple web services</description>
-  <webservice-description>
-    <webservice-description-name>A WebService Servlet that says Hello</webservice-description-name>
-    <wsdl-file>WEB-INF/wsdl/SayHelloService.wsdl</wsdl-file>
-    <jaxrpc-mapping-file>mapping.xml</jaxrpc-mapping-file>
-    <port-component>
-      <description>port component description</description>
-      <port-component-name>SayHelloPort</port-component-name>
-      <wsdl-port xmlns:tns="urn:DeploymentWebServiceTest">tns:SayHelloPort </wsdl-port>
-      <service-endpoint-interface>helloservice.SayHello</service-endpoint-interface>
-      <service-impl-bean>
-        <servlet-link>HelloService</servlet-link>
-      </service-impl-bean>
-    </port-component>
-  </webservice-description>
-</webservices>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/TestClient.java b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/TestClient.java
deleted file mode 100644
index 3f72699..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/TestClient.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package ear.earwithall2;
-
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.IOException;
-import java.net.HttpURLConnection;
-import java.net.URL;
-
-public class TestClient {
-
-    public static void main (String[] args) {
-        TestClient client = new TestClient();
-        client.doTest(args);
-    }
-
-    public void doTest(String[] args) {
-
-        String url = args[0];
-        boolean testPositive = (Boolean.valueOf(args[1])).booleanValue();
-        try {
-            log("Test: devtests/deployment/ear/earwithall2");
-            int code = invokeServlet(url);
-            report(code, testPositive);
-        } catch (IOException ex) {
-            if (testPositive) {
-                ex.printStackTrace();
-                fail();
-            } else {
-                log("Caught EXPECTED IOException: " + ex);
-                pass();
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    private int invokeServlet(String url) throws Exception {
-        log("Invoking URL = " + url);
-        URL u = new URL(url);
-        HttpURLConnection c1 = (HttpURLConnection)u.openConnection();
-        int code = c1.getResponseCode();
-        InputStream is = c1.getInputStream();
-        BufferedReader input = new BufferedReader (new InputStreamReader(is));
-        String line = null;
-        while ((line = input.readLine()) != null) {
-            log(line);
-        }
-        return code;
-    }
-
-    private void report(int code, boolean testPositive) {
-        if (testPositive) { //expect return code 200
-            if(code != 200) {
-                log("Incorrect return code: " + code);
-                fail();
-            } else {
-                log("Correct return code: " + code);
-                pass();
-            }
-        } else {
-            if(code != 200) { //expect return code !200
-                log("Correct return code: " + code);
-                pass();
-            } else {
-                log("Incorrect return code: " + code);
-                fail();
-            }
-        }
-    }
-
-    private void log(String message) {
-        System.err.println("[ear.earwithall2.Client]:: " + message);
-    }
-
-    private void pass() {
-        log("PASSED: devtests/deployment/ear/earwithall2");
-        System.exit(0);
-    }
-
-    private void fail() {
-        log("FAILED: devtests/deployment/ear/earwithall2");
-        System.exit(-1);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/TestDeplOrder.java b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/TestDeplOrder.java
deleted file mode 100644
index 9c60aac..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/TestDeplOrder.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package ear.earwithall2;
-
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-public class TestDeplOrder {
-
-    public static void main (String[] args) {
-        TestDeplOrder client = new TestDeplOrder();
-        client.doTest(args);
-    }
-
-    public void doTest(String[] args) {
-
-        String path = args[0];
-        try {
-            log("Test: devtests/deployment/ear/earwithall2");
-            log("looking at " + path);
-            boolean success = readFile(path, "Loading application WebNBean_ejb", "Loading application WebNBean_war");
-            if (success) {
-              pass();
-            } else {
-              fail();
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    private boolean readFile(String path, String first, String second)
-            throws IOException, FileNotFoundException {
-        int firstLine = -1;
-        int secondLine = -1;
-        BufferedReader reader =
-          new BufferedReader(new FileReader(new File(path)));
-        String line = reader.readLine();
-        int totalLines = 0;
-        while (line != null) {
-            ++totalLines;
-            if ((firstLine < 0) && (line.contains(first))) {
-                firstLine = totalLines;
-            }
-            if ((secondLine < 0) && (line.contains(second))) {
-                secondLine = totalLines;
-            }
-            line = reader.readLine();
-        }
-        reader.close();
-        log("first line:  " + firstLine);
-        log("second line:  " + secondLine);
-        if ((firstLine < 0) ||
-            (secondLine < 0))
-          return false;
-        if (firstLine < secondLine) {
-          return true;
-        }
-        return false;
-    }
-    private void log(String message) {
-        System.err.println("[ear.earwithall2.TestDeplOrder]:: " + message);
-    }
-
-    private void pass() {
-        log("PASSED: devtests/deployment/ear/earwithall2");
-        System.exit(0);
-    }
-
-    private void fail() {
-        log("FAILED: devtests/deployment/ear/earwithall2");
-        System.exit(-1);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/TestDeplOrder2.java b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/TestDeplOrder2.java
deleted file mode 100644
index 9dea1a5..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/TestDeplOrder2.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package ear.earwithall2;
-
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-public class TestDeplOrder2 {
-
-    public static void main (String[] args) {
-        TestDeplOrder2 client = new TestDeplOrder2();
-        client.doTest(args);
-    }
-
-    public void doTest(String[] args) {
-
-        String path = args[0];
-        try {
-            log("Test: devtests/deployment/ear/earwithall2");
-            log("looking at " + path);
-            boolean success = readFile(path, "Loading application WebNBeanA", "Loading application WebNBeanC", "Loading application WebNBeanB");
-            if (success) {
-              pass();
-            } else {
-              fail();
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    private boolean readFile(String path, String first, String second, String third)
-            throws IOException, FileNotFoundException {
-        int firstLine = -1;
-        int secondLine = -1;
-        int thirdLine = -1;
-        BufferedReader reader =
-          new BufferedReader(new FileReader(new File(path)));
-        String line = reader.readLine();
-        int totalLines = 0;
-        while (line != null) {
-            ++totalLines;
-            if ((firstLine < 0) && (line.contains(first))) {
-                firstLine = totalLines;
-            }
-            if ((secondLine < 0) && (line.contains(second))) {
-                secondLine = totalLines;
-            }
-            if ((thirdLine < 0) && (line.contains(third))) {
-                thirdLine = totalLines;
-            }
-            line = reader.readLine();
-        }
-        reader.close();
-        log("first line:  " + firstLine);
-        log("second line:  " + secondLine);
-        log("third line:  " + thirdLine);
-        if ((firstLine < 0) ||
-            (secondLine < 0) ||
-            (thirdLine < 0))
-          return false;
-        if ((firstLine < secondLine) &&
-            (secondLine < thirdLine)) {
-          return true;
-        }
-        return false;
-    }
-    private void log(String message) {
-        System.err.println("[ear.earwithall2.TestDeplOrder2]:: " + message);
-    }
-
-    private void pass() {
-        log("PASSED: devtests/deployment/ear/earwithall2");
-        System.exit(0);
-    }
-
-    private void fail() {
-        log("FAILED: devtests/deployment/ear/earwithall2");
-        System.exit(-1);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/application-client.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/application-client.xml
deleted file mode 100644
index ca151d2..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/application-client.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<application-client xmlns="http://java.sun.com/xml/ns/j2ee" version="1.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application-client_1_4.xsd">
-  <display-name>justclient</display-name>
-  <ejb-ref>
-    <ejb-ref-name>ejb/JustBean</ejb-ref-name>
-    <ejb-ref-type>Session</ejb-ref-type>
-    <home>justbean.JustBeanHome</home>
-    <remote>justbean.JustBean</remote>
-    <ejb-link>JustSessionBean</ejb-link>
-  </ejb-ref>
-</application-client>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/application.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/application.xml
deleted file mode 100644
index f31c63c..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/application.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<application xmlns="http://java.sun.com/xml/ns/javaee"
-xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="6" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee Http://java.sun.com/xml/ns/javaee/application_6.xsd">
-  <application-name>foo</application-name>
-  <description>Application description</description>
-  <display-name>WebNBean</display-name>
-  <module>
-    <ejb>WebNBean.jar</ejb>
-  </module>
-  <!--
-  <module>
-    <java>app-client-ic.jar</java>
-  </module>
-  -->
-  <module>
-    <web>
-      <web-uri>WebNBean.war</web-uri>
-      <context-root>/webnbean</context-root>
-    </web>
-  </module>
-</application>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/build.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/build.xml
deleted file mode 100644
index e96bb20..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/build.xml
+++ /dev/null
@@ -1,559 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="WebNBean" default="usage" basedir=".">
-
-    &commonBuild;
-
-    <property name="contextRoot" value="webnbean"/>
-    <property name="testName" value="WebNBean"/>
-    <property name="appName" value="foo"/>
-
-    <target name="prepare" depends="init">
-        <property name="portable.war" value="${build}/${testName}-portable.war"/>
-        <property name="portable.jar" value="${build}/${testName}-portable.jar"/>
-        <property name="portable.ear" value="${build}/${testName}-portable.ear"/>
-        <property name="all.war" value="${build}/${testName}.war"/>
-        <property name="A.war" value="${build}/${testName}A.war"/>
-        <property name="B.war" value="${build}/${testName}B.war"/>
-        <property name="C.war" value="${build}/${testName}C.war"/>
-        <property name="all.jar" value="${build}/${testName}.jar"/>
-        <property name="all.ear" value="${build}/${testName}.ear"/>
-        <property name="deployplan.jar" value="${build}/${testName}-deployplan.jar"/>
-        <property name="warName" value="${testName}_war"/>
-        <property name="warNameA" value="${testName}A"/>
-        <property name="warNameB" value="${testName}B"/>
-        <property name="warNameC" value="${testName}C"/>
-        <property name="ejbName" value="${testName}_ejb"/>
-        <property name="testWar" value="${build}/${warName}.war"/>
-        <property name="testEjb" value="${build}/${ejbName}.jar"/>
-    </target>
-
-    <target name="compile" depends="prepare">
-        <mkdir dir="${build}"/>
-        <javac srcdir="."
-               destdir="${build}"
-               debug="on"
-               failonerror="true">
-            <classpath refid="gfv3.classpath"/>
-        </javac>
-    </target>
-
-    <target name="assemble" depends="compile">
-        <!-- didn't deal with appclient yet -->
-
-        <war destfile="${portable.war}" webxml="web.xml">
-            <classes dir="${build}" excludes="justclient/**,justbean/JustSessionBean.class,**/*.*ar"/>
-        </war>
-        <war destfile="${all.war}" webxml="web.xml">
-            <webinf file="glassfish-web.xml"/>
-            <classes dir="${build}" excludes="justclient/**,justbean/JustSessionBean.class,**.*ar"/>
-        </war>
-        <war destfile="${A.war}" webxml="weba/web.xml">
-            <webinf file="weba/glassfish-web.xml"/>
-            <classes dir="${build}" excludes="justclient/**,justbean/JustSessionBean.class,**.*ar"/>
-        </war>
-        <war destfile="${B.war}" webxml="webb/web.xml">
-            <webinf file="webb/glassfish-web.xml"/>
-            <classes dir="${build}" excludes="justclient/**,justbean/JustSessionBean.class,**.*ar"/>
-        </war>
-        <war destfile="${C.war}" webxml="webc/web.xml">
-            <webinf file="webc/glassfish-web.xml"/>
-            <classes dir="${build}" excludes="justclient/**,justbean/JustSessionBean.class,**.*ar"/>
-        </war>
-
-        <jar destfile="${portable.jar}">
-            <metainf file="ejb-jar.xml"/>
-            <fileset dir="${build}" excludes="justclient/**,justweb/**,**.*ar"/>
-        </jar>
-        <jar destfile="${all.jar}">
-            <metainf dir="${basedir}" includes="ejb-jar.xml,glassfish-ejb-jar.xml"/>
-            <fileset dir="${build}" excludes="justclient/**,justweb/**,**.*ar"/>
-        </jar>
-
-        <ear destfile="${portable.ear}" appxml="portable.application.xml">
-            <fileset dir="${build}" includes="**-portable.war,**-portable.jar"/>
-        </ear>
-        <ear destfile="${all.ear}" appxml="application.xml">
-            <metainf file="glassfish-application.xml"/>
-            <fileset dir="${build}" includes="${testName}.jar,${testName}.war"/>
-        </ear>
-
-        <copy file="${all.war}" tofile="${testWar}"/>
-        <copy file="${all.jar}" tofile="${testEjb}"/>
-
-        <copy file="glassfish-web.xml" tofile="${portable.war}.glassfish-web.xml"/>
-        <copy file="glassfish-ejb-jar.xml" tofile="${portable.jar}.glassfish-ejb-jar.xml"/>
-        <copy file="glassfish-application.xml" tofile="${build}/glassfish-application.xml"/>
-        <jar destfile="${deployplan.jar}"
-             basedir="${build}" includes="**.xml"/>
-    </target>
-
-    <target name="deploy.asadmin" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="${all.ear}"/>
-            <param name="testName" value="${appName}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.asadmin" depends="prepare">
-        <antcall target="common.redeploy.asadmin">
-            <param name="arg.list" value="${all.ear}"/>
-            <param name="testName" value="${appName}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.asadmin">
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="${appName}"/>
-            <param name="testName" value="${appName}"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.asadmin.war" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="--deploymentorder 102 ${testWar}"/>
-            <param name="testName" value="${warName}"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.asadmin.war.a" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="--deploymentorder 102 ${A.war}"/>
-            <param name="testName" value="${warName}A"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.asadmin.war.b" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="--deploymentorder 102 ${B.war}"/>
-            <param name="testName" value="${warName}B"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.asadmin.war.c" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="--deploymentorder 102 ${C.war}"/>
-            <param name="testName" value="${warName}C"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.asadmin.ejb" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="--deploymentorder 101 ${testEjb}"/>
-            <param name="testName" value="${ejbName}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.asadmin.war" depends="prepare">
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="${warName}"/>
-            <param name="testName" value="${warName}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.asadmin.war.a" depends="prepare">
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="${warNameA}"/>
-            <param name="testName" value="${warName}A"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.asadmin.war.b" depends="prepare">
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="${warNameB}"/>
-            <param name="testName" value="${warName}B"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.asadmin.war.c" depends="prepare">
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="${warNameC}"/>
-            <param name="testName" value="${warName}C"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.asadmin.ejb" depends="prepare">
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="${ejbName}"/>
-            <param name="testName" value="${ejbName}"/>
-        </antcall>
-    </target>
-
-    <target name="enable.asadmin">
-        <antcall target="common.enable.asadmin">
-            <param name="arg.list"
-                   value="${appName}"/>
-            <param name="testName" value="${appName}"/>
-        </antcall>
-    </target>
-
-    <target name="disable.asadmin">
-        <antcall target="common.disable.asadmin">
-            <param name="arg.list"
-                   value="${appName}"/>
-            <param name="testName" value="${appName}"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.jsr88" depends="prepare">
-        <antcall target="common.deploy.jsr88">
-            <param name="arg.list" value="${portable.ear} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="deploy-stream.jsr88" depends="prepare">
-        <antcall target="common.deploy-stream.jsr88">
-            <param name="arg.list" value="${portable.ear} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.jsr88" depends="prepare">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="redeploy"/>
-            <param name="arg.list" value="${appName} ${portable.ear} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy-stream.jsr88" depends="prepare">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="redeploy-stream"/>
-            <param name="arg.list" value="${appName} ${portable.ear} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.jsr88">
-        <antcall target="common.undeploy.jsr88">
-            <param name="arg.list" value="${appName}"/>
-        </antcall>
-    </target>
-
-   <!-- as it's not easy to implement the undeploy-stream using the
-        current JSR88 Deployer, let's just undeploy all -->
-    <target name="undeploy-stream.jsr88">
-        <antcall target="common.undeploy.jsr88">
-            <param name="arg.list" value="all"/>
-        </antcall>
-    </target>
-
-    <target name="start.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="start"/>
-            <param name="arg.list" value="${appName}"/>
-        </antcall>
-    </target>
-
-    <target name="stop.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="stop"/>
-            <param name="arg.list" value="${appName}"/>
-        </antcall>
-    </target>
-
-
-    <target name="deploy.autodeploy">
-    </target>
-
-    <target name="run" depends="run.positive"/>
-
-    <target name="run.positive" depends="setHttpPort">
-        <antcall target="common.run.positive">
-            <param name="link" value="${contextRoot}/justweb"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="run.negative" depends="setHttpPort">
-        <antcall target="common.run.negative">
-            <param name="link" value="${contextRoot}/justweb"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="runclient" depends="init">
-        <echo message="TestClient ${arg.list}"/>
-        <javaWithResult
-            fork="true"
-            failonerror="false"
-            jvm="${JAVA}"
-            classname="ear.earwithall2.TestClient"
-            output="${build}/${log.id}.output.log"
-            resultproperty="result">
-            <jvmarg value="-Dorg.omg.CORBA.ORBInitialHost=${http.host}"/>
-            <jvmarg value="-Dorg.omg.CORBA.ORBInitialPort=${orb.port}"/>
-
-            <classpath>
-                <path location="${inst}/lib/j2ee.jar"/>
-                <path location="${build}"/>
-            </classpath>
-
-            <arg line="${arg.list}"/>
-
-        </javaWithResult>
-
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/${log.id}.output.log"/>
-        </antcall>
-    </target>
-
-    <target name="private-all" depends="private-all-pe-ee, private-all-ee"/>
-
-    <!-- the following is run in both PE and EE environment -->
-    <target name="private-all-pe-ee">
-        <antcall target="assemble"/>
-        <antcall target="deploy.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="1"/>
-            <param name="desc" value="ear/earwithall2 Test asadmin deploy"/>
-        </antcall>
-
-        <antcall target="disable.asadmin"/>
-        <antcall target="run.negative">
-            <param name="desc" value="ear/earwithall2 Test asadmin disable"/>
-            <param name="log.id" value="2"/>
-        </antcall>
-
-        <antcall target="enable.asadmin"/>
-        <antcall target="run.positive">
-            <param name="desc" value="ear/earwithall2 Test asadmin enable"/>
-            <param name="log.id" value="3"/>
-        </antcall>
-
-        <antcall target="redeploy.asadmin"/>
-        <antcall target="run.positive">
-            <param name="desc" value="ear/earwithall2 Test asadmin redeploy"/>
-            <param name="log.id" value="4"/>
-        </antcall>
-        <antcall target="undeploy.asadmin"/>
-
-        <antcall target="deploy.jsr88"/>
-        <antcall target="run.positive">
-            <param name="desc" value="ear/earwithall2 Test jsr88 deploy"/>
-            <param name="log.id" value="5"/>
-        </antcall>
-
-        <antcall target="stop.jsr88"/>
-        <antcall target="run.negative">
-            <param name="desc" value="ear/earwithall2 Test jsr88 stopped state"/>
-            <param name="log.id" value="6"/>
-        </antcall>
-
-        <antcall target="start.jsr88"/>
-        <antcall target="run.positive">
-            <param name="desc" value="ear/earwithall2 Test jsr88 started state"/>
-            <param name="log.id" value="7"/>
-        </antcall>
-
-        <antcall target="stop.jsr88"/>
-        <antcall target="redeploy.jsr88"/>
-        <antcall target="run.negative">
-            <param name="desc" value="ear/earwithall2 Test jsr88 redeploy stop"/>
-            <param name="log.id" value="8"/>
-        </antcall>
-
-        <antcall target="start.jsr88"/>
-        <antcall target="redeploy.jsr88"/>
-        <antcall target="run.positive">
-            <param name="desc" value="ear/earwithall2 Test jsr88 redeploy start"/>
-            <param name="log.id" value="9"/>
-        </antcall>
-        <antcall target="undeploy.jsr88"/>
-        <antcall target="deploy-stream.jsr88"/>
-        <antcall target="run.positive">
-            <param name="desc" value="ear/earwithall2 Test jsr88 deploy using InputStream"/>
-            <param name="log.id" value="10"/>
-        </antcall>
-        <antcall target="redeploy-stream.jsr88"/>
-        <antcall target="run.positive">
-            <param name="desc" value="ear/earwithall2 Test jsr88 redeploy using InputStream"/>
-            <param name="log.id" value="11"/>
-        </antcall>
-        <antcall target="undeploy-stream.jsr88"/>
-
-    </target>
-
-    <target name="addInstanceRef" depends="prepare">
-       <!-- create-app-ref to remote instance server -->
-       <antcall target="common.run.asadmin">
-           <param name="arg.list"
-                  value="create-application-ref --port ${admin.port} --user ${admin.user} --passwordfile ${passwordFile} --target ${testServer} ${appName}"/>
-       </antcall>
-    </target>
-
-    <target name="delInstanceRef" depends="prepare">
-        <!-- delete-app-ref to remote instance server -->
-        <antcall target="common.run.asadmin">
-            <param name="arg.list"
-                   value="delete-application-ref --port ${admin.port} --user ${admin.user} --passwordfile ${passwordFile} --target ${testServer} ${appName}"/>
-        </antcall>
-    </target>
-
-    <target name="addClusterRefs" depends="prepare" if="doCluster">
-        <!-- create-app-ref to cluster -->
-        <antcall target="common.run.asadmin">
-            <param name="arg.list"
-                   value="create-application-ref --port ${admin.port} --user ${admin.user} --passwordfile ${passwordFile} --target ${testCluster} ${appName}"/>
-        </antcall>
-    </target>
-
-    <target name="delClusterRefs" depends="prepare" if="doCluster">
-        <!-- delete-app-ref to remote instance server -->
-        <antcall target="common.run.asadmin">
-            <param name="arg.list"
-                   value="delete-application-ref --port ${admin.port} --user ${admin.user} --passwordfile ${passwordFile} --target ${testCluster} ${appName}"/>
-        </antcall>
-    </target>
-
-        <!-- the following is run only in EE environment -->
-    <target name="private-all-ee" depends="prepare" if="EE">
-        <echo message="Running tests specific to EE"/>
-
-        <!-- deployment to Domain -->
-        <antcall target="common.run.asadmin">
-            <param name="arg.list"
-                   value="deploy --port ${admin.port} --user ${admin.user} --passwordfile ${passwordFile} --target domain ${all.ear}"/>
-        </antcall>
-
-        <antcall target="addInstanceRef"/>
-        <antcall target="addClusterRefs"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="10"/>
-            <param name="desc" value="ear/earwithall2 Test create-application-ref"/>
-        </antcall>
-
-        <antcall target="delInstanceRef"/>
-        <antcall target="delClusterRefs"/>
-        <antcall target="run.negative">
-            <param name="log.id" value="11"/>
-            <param name="desc" value="ear/earwithall2 Test delete-application-ref"/>
-        </antcall>
-
-        <antcall target="addInstanceRef"/>
-        <antcall target="addClusterRefs"/>
-        <antcall target="common.run.asadmin">
-            <param name="arg.list"
-                   value="deploy --port ${admin.port} --user ${admin.user} --passwordfile ${passwordFile} --force=true --target domain ${all.ear}"/>
-        </antcall>
-        <antcall target="run.positive">
-            <param name="log.id" value="12"/>
-            <param name="desc" value="ear/earwithall2 Test redeploy to domain"/>
-        </antcall>
-
-        <antcall target="common.run.asadmin">
-            <param name="arg.list"
-                   value="disable --port ${admin.port} --user ${admin.user} --passwordfile ${passwordFile} --target domain ${appName}"/>
-        </antcall>
-        <antcall target="run.negative">
-            <param name="log.id" value="13"/>
-            <param name="desc" value="ear/earwithall2 Test disable on domain"/>
-        </antcall>
-
-        <antcall target="common.run.asadmin">
-            <param name="arg.list"
-                   value="enable --port ${admin.port} --user ${admin.user} --passwordfile ${passwordFile} --target domain ${appName}"/>
-        </antcall>
-        <antcall target="run.positive">
-            <param name="log.id" value="14"/>
-            <param name="desc" value="ear/earwithall2 Test enable domain"/>
-        </antcall>
-
-        <!-- undeploy from Domain -->
-        <antcall target="common.run.asadmin">
-            <param name="arg.list"
-                   value="undeploy --port ${admin.port} --user ${admin.user} --passwordfile ${passwordFile} --target domain ${appName}"/>
-        </antcall>
-    </target>
-
-    <target name="clobber" depends="clean">
-        <delete file="${portable.war}"/>
-        <delete file="${portable.jar}"/>
-        <delete file="${portable.ear}"/>
-        <delete file="${all.war}"/>
-        <delete file="${all.jar}"/>
-        <delete file="${all.ear}"/>
-        <delete file="${testWar}"/>
-        <delete file="${testEjb}"/>
-        <delete file="${deployplan.war}"/>
-        <delete dir="${build}"/>
-    </target>
-
-    <target name="usage">
-        <antcall target="all"/>
-    </target>
-
-    <target name="depl-order" depends="assemble" unless="EE">
-        <echo message="depl-order"/>
-        <antcall target="declare-test">
-            <param name="description" value="test deployment order"/>
-        </antcall>
-        <antcall target="deploy.asadmin.war"/>
-        <antcall target="deploy.asadmin.ejb"/>
-        <antcall target="restart.server"/>
-        <javaWithResult
-            fork="true"
-            failonerror="false"
-            jvm="${JAVA}"
-            classname="ear.earwithall2.TestDeplOrder"
-            output="${build}/${log.id}.output.log"
-            resultproperty="result">
-
-            <classpath>
-                <path location="${inst}/lib/j2ee.jar"/>
-                <path location="${build}"/>
-            </classpath>
-
-            <arg line="${env.S1AS_HOME}/domains/domain1/logs/server.log"/>
-
-        </javaWithResult>
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-        </antcall>
-        <antcall target="undeploy.asadmin.war"/>
-        <antcall target="undeploy.asadmin.ejb"/>
-
-        <antcall target="deploy.asadmin.war.a"/>
-        <antcall target="deploy.asadmin.war.c"/>
-        <antcall target="deploy.asadmin.war.b"/>
-        <antcall target="restart.server"/>
-        <javaWithResult
-            fork="true"
-            failonerror="false"
-            jvm="${JAVA}"
-            classname="ear.earwithall2.TestDeplOrder2"
-            output="${build}/${log.id}.output2.log"
-            resultproperty="result">
-
-            <classpath>
-                <path location="${inst}/lib/j2ee.jar"/>
-                <path location="${build}"/>
-            </classpath>
-
-            <arg line="${env.S1AS_HOME}/domains/domain1/logs/server.log"/>
-
-        </javaWithResult>
-        <antcall target="undeploy.asadmin.war.a"/>
-        <antcall target="undeploy.asadmin.war.c"/>
-        <antcall target="undeploy.asadmin.war.b"/>
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/ejb-jar.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/ejb-jar.xml
deleted file mode 100644
index fb0f874..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/ejb-jar.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee" version="2.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">
-<display-name>justbean.jar</display-name>
-<enterprise-beans>
-<session>
-<ejb-name>JustSessionBean</ejb-name>
-<home>justbean.JustBeanHome</home>
-<remote>justbean.JustBean</remote>
-<ejb-class>justbean.JustSessionBean</ejb-class>
-<session-type>Stateless</session-type>
-<transaction-type>Bean</transaction-type>
-<security-identity>
-<use-caller-identity/>
-</security-identity>
-</session>
-</enterprise-beans>
-<assembly-descriptor>
-<method-permission>
-<unchecked/>
-<method>
-<ejb-name>JustSessionBean</ejb-name>
-<method-intf>Home</method-intf>
-<method-name>remove</method-name>
-<method-params>
-<method-param>java.lang.Object</method-param>
-</method-params>
-</method>
-<method>
-<ejb-name>JustSessionBean</ejb-name>
-<method-intf>Home</method-intf>
-<method-name>getHomeHandle</method-name>
-</method>
-<method>
-<ejb-name>JustSessionBean</ejb-name>
-<method-intf>Remote</method-intf>
-<method-name>isIdentical</method-name>
-<method-params>
-<method-param>jakarta.ejb.EJBObject</method-param>
-</method-params>
-</method>
-<method>
-<ejb-name>JustSessionBean</ejb-name>
-<method-intf>Home</method-intf>
-<method-name>create</method-name>
-</method>
-<method>
-<ejb-name>JustSessionBean</ejb-name>
-<method-intf>Home</method-intf>
-<method-name>remove</method-name>
-<method-params>
-<method-param>jakarta.ejb.Handle</method-param>
-</method-params>
-</method>
-<method>
-<ejb-name>JustSessionBean</ejb-name>
-<method-intf>Remote</method-intf>
-<method-name>log</method-name>
-<method-params>
-<method-param>java.lang.String</method-param>
-</method-params>
-</method>
-<method>
-<ejb-name>JustSessionBean</ejb-name>
-<method-intf>Remote</method-intf>
-<method-name>getHandle</method-name>
-</method>
-<method>
-<ejb-name>JustSessionBean</ejb-name>
-<method-intf>Remote</method-intf>
-<method-name>findAllMarbles</method-name>
-</method>
-<method>
-<ejb-name>JustSessionBean</ejb-name>
-<method-intf>Home</method-intf>
-<method-name>getEJBMetaData</method-name>
-</method>
-<method>
-<ejb-name>JustSessionBean</ejb-name>
-<method-intf>Remote</method-intf>
-<method-name>getPrimaryKey</method-name>
-</method>
-<method>
-<ejb-name>JustSessionBean</ejb-name>
-<method-intf>Remote</method-intf>
-<method-name>remove</method-name>
-</method>
-<method>
-<ejb-name>JustSessionBean</ejb-name>
-<method-intf>Remote</method-intf>
-<method-name>getEJBHome</method-name>
-</method>
-</method-permission>
-</assembly-descriptor>
-</ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/glassfish-application-client.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/glassfish-application-client.xml
deleted file mode 100644
index 1ae5934..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/glassfish-application-client.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE glassfish-application-client PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Java EE Application Client 6.0//EN" "http://glassfish.org/dtds/glassfish-application-client_6_0-1.dtd">
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<glassfish-application-client>
-  <ejb-ref>
-    <ejb-ref-name>ejb/JustBean</ejb-ref-name>
-    <jndi-name>ejb/JustBean</jndi-name>
-  </ejb-ref>
-</glassfish-application-client>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/glassfish-application.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/glassfish-application.xml
deleted file mode 100644
index 7fc8d8d..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/glassfish-application.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE glassfish-application PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Java EE Application 6.0//EN" "http://glassfish.org/dtds/glassfish-application_6_0-1.dtd">
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<glassfish-application>
-  <pass-by-reference>false</pass-by-reference>
-</glassfish-application>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/glassfish-ejb-jar.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/glassfish-ejb-jar.xml
deleted file mode 100644
index b1e3f94..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/glassfish-ejb-jar.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE glassfish-ejb-jar PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 EJB 3.1//EN" "http://glassfish.org/dtds/glassfish-ejb-jar_3_1-1.dtd">
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<glassfish-ejb-jar>
-  <enterprise-beans>
-    <name>justbean.jar</name>
-    <ejb>
-      <ejb-name>JustSessionBean</ejb-name>
-      <jndi-name>JustSessionBean</jndi-name>
-    </ejb>
-  </enterprise-beans>
-</glassfish-ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/glassfish-web.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/glassfish-web.xml
deleted file mode 100644
index 689f296..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/glassfish-web.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<glassfish-web-app>
-  <context-root>/webnbean</context-root>
-  <ejb-ref>
-    <ejb-ref-name>ejb/JustBean</ejb-ref-name>
-    <jndi-name>ejb/JustBean</jndi-name>
-  </ejb-ref>
-</glassfish-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/justbean/JustBean.java b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/justbean/JustBean.java
deleted file mode 100644
index d00efe9..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/justbean/JustBean.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package justbean;
-
-import java.rmi.RemoteException;
-import jakarta.ejb.EJBObject;
-
-public interface JustBean extends EJBObject {
-
-    public void
-    log(String message)
-        throws RemoteException;
-
-    public String[]
-    findAllMarbles()
-        throws RemoteException;
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/justbean/JustBeanHome.java b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/justbean/JustBeanHome.java
deleted file mode 100644
index 3c97ab6..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/justbean/JustBeanHome.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package justbean;
-
-import java.rmi.RemoteException;
-import jakarta.ejb.EJBHome;
-import jakarta.ejb.CreateException;
-
-public interface JustBeanHome extends EJBHome {
-
-    public JustBean
-    create()
-        throws RemoteException, CreateException;
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/justbean/JustSessionBean.java b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/justbean/JustSessionBean.java
deleted file mode 100644
index 713efbf..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/justbean/JustSessionBean.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package justbean;
-
-import java.rmi.RemoteException;
-import jakarta.ejb.SessionBean;
-import jakarta.ejb.SessionContext;
-
-public class JustSessionBean implements SessionBean {
-
-    private SessionContext ctx;
-
-    public void
-    ejbCreate()
-        throws RemoteException
-    {
-        log("JustSessionBean.ejbCreate()...");
-    }
-
-    public void
-    ejbRemove()
-        throws RemoteException
-    {
-        log("JustSessionBean.ejbRemove()...");
-    }
-
-    public void
-    log(String message)
-    {
-        Log.log(message);
-    }
-
-    public String[]
-    findAllMarbles()
-    {
-        System.out.println("JustSessionBean.findAllMarbles()...");
-        String[] strArray = new String[2];
-        strArray[0] = "This is a test.";
-        strArray[1] = "You have lost all your marbles.";
-        return strArray;
-    }
-
-
-    /**
-     * ejbDestroy - called by the Container before this bean is destroyed.
-     */
-    public void
-    ejbDestroy()
-    {
-        log("JustSessionBean.ejbDestroy()...");
-    }
-
-    /**
-     * ejbActivate - called by the Container after this bean instance
-     * is activated from its passive state.
-     */
-    public void
-    ejbActivate()
-    {
-        log("JustSessionBean.ejbActivate()...");
-    }
-
-    /**
-     * ejbPassivate - called by the Container before this bean instance
-     * is put in passive state.
-     */
-    public void
-    ejbPassivate()
-    {
-        log("JustSessionBean.ejbPassivate()...");
-    }
-
-    /**
-     * setSessionContext - called by the Container after creation of this
-     * bean instance.
-     */
-    public void
-    setSessionContext(SessionContext context)
-    {
-        log("JustSessionBean.setSessionContext(ctx)... ctx = " + ctx);
-        ctx = context;
-    }
-}
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/justbean/Log.java b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/justbean/Log.java
deleted file mode 100644
index 34aa4f4..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/justbean/Log.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package justbean;
-
-public class Log implements java.io.Serializable
-{
-  public static void
-  log (String message)
-  {
-    System.out.println(message);
-  }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/justclient/JustClient.java b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/justclient/JustClient.java
deleted file mode 100644
index 66b10c6..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/justclient/JustClient.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package justclient;
-
-import javax.naming.InitialContext;
-import javax.rmi.PortableRemoteObject;
-import justbean.JustBean;
-import justbean.JustBeanHome;
-
-public class JustClient {
-    public static void main(String[] args) {
-        JustClient client = new JustClient();
-        client.run(args);
-    }
-
-    private void run(String[] args) {
-        System.out.println("JustClient.run()... enter");
-
-        JustBean bean = null;
-        try {
-            Object o = (new InitialContext()).lookup("java:comp/env/ejb/JustBean");
-            JustBeanHome home = (JustBeanHome)
-                PortableRemoteObject.narrow(o, JustBeanHome.class);
-            bean = home.create();
-
-            String[] marbles = bean.findAllMarbles();
-            for (int i = 0; i < marbles.length; i++) {
-                System.out.println(marbles[i]);
-            }
-        }
-        catch (Exception ex) {
-            ex.printStackTrace();
-        }
-
-        System.out.println("JustClient.run()... exit");
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/justweb/JustWebServlet.java b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/justweb/JustWebServlet.java
deleted file mode 100644
index e0b7896..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/justweb/JustWebServlet.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package justweb;
-
-import justbean.JustBean;
-import justbean.JustBeanHome;
-import java.io.IOException;
-import java.io.PrintWriter;
-import javax.naming.InitialContext;
-import javax.rmi.PortableRemoteObject;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-public class JustWebServlet extends HttpServlet
-{
-  public void
-  init ()
-    throws ServletException
-  {
-    super.init();
-    System.out.println("JustWebServlet : init()");
-  }
-
-  public void
-  service (HttpServletRequest request, HttpServletResponse response)
-    throws ServletException, IOException
-  {
-    System.out.println("JustWebServlet : service()");
-
-    JustBean bean = null;
-    try {
-        Object o = (new InitialContext()).lookup("java:comp/env/ejb/JustBean");
-        JustBeanHome home = (JustBeanHome)
-            PortableRemoteObject.narrow(o, JustBeanHome.class);
-        bean = home.create();
-    }
-    catch (Exception ex) {
-        ex.printStackTrace();
-    }
-
-    System.out.println("JustWebServlet.service()... JustBean created.");
-    System.out.println("USERNAME = " + getInitParameter("USERNAME"));
-    System.out.println("PASSWORD = " + getInitParameter("PASSWORD"));
-
-    String[] marbles = bean.findAllMarbles();
-    for (int i = 0; i < marbles.length; i++) {
-        System.out.println(marbles[i]);
-    }
-
-    sendResponse(request, response);
-  }
-
-  private void
-  sendResponse (HttpServletRequest request, HttpServletResponse response)
-    throws IOException
-  {
-    PrintWriter out = response.getWriter();
-    response.setContentType("text/html");
-
-    out.println("<html>");
-    out.println("<head>");
-    out.println("<title>Just Web Test</title>");
-    out.println("</head>");
-    out.println("<body>");
-    out.println("<p>");
-    out.println("Check log information on the server side.");
-    out.println("<br>");
-    out.println("Isn't this a wonderful life?");
-    out.println("</p>");
-    out.println("</body>");
-    out.println("</html>");
-  }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/portable.application.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/portable.application.xml
deleted file mode 100644
index cfa0e97..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/portable.application.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<application xmlns="http://java.sun.com/xml/ns/javaee"
-xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="6" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee Http://java.sun.com/xml/ns/javaee/application_6.xsd">
-  <application-name>foo</application-name>
-  <description>Application description</description>
-  <display-name>WebNBean-DisplayName</display-name>
-  <module>
-    <ejb>WebNBean-portable.jar</ejb>
-  </module>
-  <!--
-  <module>
-    <java>app-client-ic.jar</java>
-  </module>
-  -->
-  <module>
-    <web>
-      <web-uri>WebNBean-portable.war</web-uri>
-      <context-root>/webnbean</context-root>
-    </web>
-  </module>
-</application>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/web.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/web.xml
deleted file mode 100644
index fc9209f..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/web.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-  <display-name>JustWeb</display-name>
-  <servlet>
-    <display-name>JustWebServlet</display-name>
-    <servlet-name>JustWebServlet</servlet-name>
-    <servlet-class>justweb.JustWebServlet</servlet-class>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>JustWebServlet</servlet-name>
-    <url-pattern>/justweb</url-pattern>
-  </servlet-mapping>
-  <ejb-ref>
-    <ejb-ref-name>ejb/JustBean</ejb-ref-name>
-    <ejb-ref-type>Session</ejb-ref-type>
-    <home>justbean.JustBeanHome</home>
-    <remote>justbean.JustBean</remote>
-    <ejb-link>JustSessionBean</ejb-link>
-  </ejb-ref>
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/weba/glassfish-web.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/weba/glassfish-web.xml
deleted file mode 100644
index b7c1dff..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/weba/glassfish-web.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<glassfish-web-app>
-  <context-root>/webnbeana</context-root>
-  <ejb-ref>
-    <ejb-ref-name>ejb/JustBean</ejb-ref-name>
-    <jndi-name>ejb/JustBean</jndi-name>
-  </ejb-ref>
-</glassfish-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/weba/web.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/weba/web.xml
deleted file mode 100644
index 61ac094..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/weba/web.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-  <display-name>JustWeb</display-name>
-  <servlet>
-    <display-name>JustWebServlet</display-name>
-    <servlet-name>JustWebServlet</servlet-name>
-    <servlet-class>justweb.JustWebServlet</servlet-class>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>JustWebServlet</servlet-name>
-    <url-pattern>/justweba</url-pattern>
-  </servlet-mapping>
-  <ejb-ref>
-    <ejb-ref-name>ejb/JustBean</ejb-ref-name>
-    <ejb-ref-type>Session</ejb-ref-type>
-    <home>justbean.JustBeanHome</home>
-    <remote>justbean.JustBean</remote>
-    <ejb-link>JustSessionBean</ejb-link>
-  </ejb-ref>
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/webb/glassfish-web.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/webb/glassfish-web.xml
deleted file mode 100644
index 1a482ad..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/webb/glassfish-web.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<glassfish-web-app>
-  <context-root>/webnbeanb</context-root>
-  <ejb-ref>
-    <ejb-ref-name>ejb/JustBean</ejb-ref-name>
-    <jndi-name>ejb/JustBean</jndi-name>
-  </ejb-ref>
-</glassfish-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/webb/web.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/webb/web.xml
deleted file mode 100644
index 39d612c..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/webb/web.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-  <display-name>JustWeb</display-name>
-  <servlet>
-    <display-name>JustWebServlet</display-name>
-    <servlet-name>JustWebServlet</servlet-name>
-    <servlet-class>justweb.JustWebServlet</servlet-class>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>JustWebServlet</servlet-name>
-    <url-pattern>/justwebb</url-pattern>
-  </servlet-mapping>
-  <ejb-ref>
-    <ejb-ref-name>ejb/JustBean</ejb-ref-name>
-    <ejb-ref-type>Session</ejb-ref-type>
-    <home>justbean.JustBeanHome</home>
-    <remote>justbean.JustBean</remote>
-    <ejb-link>JustSessionBean</ejb-link>
-  </ejb-ref>
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/webc/glassfish-web.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/webc/glassfish-web.xml
deleted file mode 100644
index e4edcff..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/webc/glassfish-web.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<glassfish-web-app>
-  <context-root>/webnbeanc</context-root>
-  <ejb-ref>
-    <ejb-ref-name>ejb/JustBean</ejb-ref-name>
-    <jndi-name>ejb/JustBean</jndi-name>
-  </ejb-ref>
-</glassfish-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/webc/web.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/webc/web.xml
deleted file mode 100644
index b7b9e20..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithall2/webc/web.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-  <display-name>JustWeb</display-name>
-  <servlet>
-    <display-name>JustWebServlet</display-name>
-    <servlet-name>JustWebServlet</servlet-name>
-    <servlet-class>justweb.JustWebServlet</servlet-class>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>JustWebServlet</servlet-name>
-    <url-pattern>/justwebc</url-pattern>
-  </servlet-mapping>
-  <ejb-ref>
-    <ejb-ref-name>ejb/JustBean</ejb-ref-name>
-    <ejb-ref-type>Session</ejb-ref-type>
-    <home>justbean.JustBeanHome</home>
-    <remote>justbean.JustBean</remote>
-    <ejb-link>JustSessionBean</ejb-link>
-  </ejb-ref>
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithejb/alt-ejbjar.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithejb/alt-ejbjar.xml
deleted file mode 100644
index 9ddc3e9..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithejb/alt-ejbjar.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<ejb-jar version="2.1" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">
-  <display-name>Ejb1</display-name>
-  <enterprise-beans>
-    <session>
-      <ejb-name>MyStatelesshello</ejb-name>
-      <home>statelesshello.StatelesshelloHome</home>
-      <remote>statelesshello.Statelesshello</remote>
-      <ejb-class>statelesshello.StatelesshelloEJB</ejb-class>
-      <session-type>Stateless</session-type>
-      <transaction-type>Container</transaction-type>
-      <env-entry>
-        <env-entry-name>user</env-entry-name>
-        <env-entry-type>java.lang.String</env-entry-type>
-        <env-entry-value>scott</env-entry-value>
-      </env-entry>
-      <env-entry>
-        <env-entry-name>number</env-entry-name>
-        <env-entry-type>java.lang.Double</env-entry-type>
-        <env-entry-value>22.25</env-entry-value>
-      </env-entry>
-      <security-identity>
-        <use-caller-identity/>
-      </security-identity>
-    </session>
-  </enterprise-beans>
-  <assembly-descriptor>
-    <container-transaction>
-      <method>
-        <ejb-name>MyStatelesshello</ejb-name>
-        <method-intf>Remote</method-intf>
-        <method-name>sayStatelesshello</method-name>
-      </method>
-      <trans-attribute>Required</trans-attribute>
-    </container-transaction>
-    <container-transaction>
-      <method>
-        <ejb-name>MyStatelesshello</ejb-name>
-        <method-intf>Remote</method-intf>
-        <method-name>getUserDefinedException</method-name>
-      </method>
-      <trans-attribute>Required</trans-attribute>
-    </container-transaction>
-    <container-transaction>
-      <method>
-        <ejb-name>MyStatelesshello</ejb-name>
-        <method-intf>Remote</method-intf>
-        <method-name>isStatelesshello</method-name>
-      </method>
-      <trans-attribute>Required</trans-attribute>
-    </container-transaction>
-  </assembly-descriptor>
-</ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithejb/application.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithejb/application.xml
deleted file mode 100644
index 2991c8f..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithejb/application.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<application version="1.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd">
-  <description>Application description</description>
-  <display-name>EARwithEJBOnly</display-name>
-  <module>
-     <ejb>earwithejb.jar</ejb>
-     <alt-dd>alt-ejbjar.xml</alt-dd>
-  </module>
-</application>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithejb/build.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithejb/build.xml
deleted file mode 100644
index 969e325..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithejb/build.xml
+++ /dev/null
@@ -1,267 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="statelesshello" default="all" basedir=".">
-
-    &commonBuild;
-
-    <property name="testName" value="StatelessHelloEjb"/>
-    <property name="archivedir" value="${build}/archives"/>
-    <target name="prepare" depends="init">
-                <mkdir dir="${build}" />
-                <mkdir dir="${archivedir}" />
-                <property name="portable.ear" value="${archivedir}/earwithejb-portable.ear"/>
-                <property name="portable.jar" value="${archivedir}/earwithejb-portable.jar"/>
-                <property name="all.ear" value="${archivedir}/earwithejb.ear"/>
-                <property name="all.jar" value="${archivedir}/earwithejb.jar"/>
-                <property name="deployplan.jar" value="${archivedir}/earwithejb-deployplan.jar"/>
-    </target>
-
-    <target name="assemble" depends="prepare">
-               <jar destfile="${deployplan.jar}">
-                   <fileset dir="${basedir}" includes="sun-ejb-jar.xml"/>
-                </jar>
-
-                <mkdir dir="${build}/META-INF"/>
-                <copy file="ejb-jar.xml" todir="${build}/META-INF"/>
-                <jar destfile="${portable.jar}">
-                   <fileset dir="../../build/ejb/statelesshello"
-                    excludes="**/archives/**"/>
-                   <fileset dir="${build}"
-                    excludes="**/archives/**"/>
-                </jar>
-
-                <copy file="sun-ejb-jar.xml" todir="${build}/META-INF" failonerror="false"/>
-                <jar destfile="${all.jar}">
-                   <fileset dir="../../build/ejb/statelesshello"/>
-                   <fileset dir="${build}"
-                    excludes="**/archives/**"/>
-                </jar>
-
-                <mkdir dir="${build}/META-INF"/>
-                <copy file="portable-app.xml" tofile="${build}/META-INF/application.xml"/>
-                <copy file="${portable.jar}" todir="${build}"/>
-                <jar destfile="${portable.ear}" basedir="${build}" excludes="**ejb-jar.xml"/>
-
-                <delete file="${build}/earwithejb-portable.jar"/>
-                <delete file="${build}/META-INF/application.xml"/>
-                <delete file="${build}/META-INF/sun-ejb-jar.xml"/>
-                <delete file="${build}/META-INF/ejb-jar.xml"/>
-                <delete file="${build}/earwithejb-portable.jar"/>
-                <copy file="application.xml" todir="${build}/META-INF"/>
-                <copy file="alt-ejbjar.xml" todir="${build}"/>
-                <copy file="sun-alt-ejbjar.xml" todir="${build}" failonerror="false"/>
-                <copy file="${all.jar}" todir="${build}"/>
-                <jar destfile="${all.ear}" basedir="${build}" excludes="**/archives/**"/>
-    </target>
-
-    <target name="deploy.asadmin" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="--retrieve ${archivedir} --name ${testName} ${all.ear}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.asadmin" depends="prepare">
-        <antcall target="common.redeploy.asadmin">
-            <param name="arg.list" value="--retrieve ${archivedir} --name ${testName} ${all.ear}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.asadmin">
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="${testName}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.jsr88" depends="prepare">
-        <antcall target="common.deploy.jsr88">
-            <param name="arg.list" value="${portable.ear} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.jsr88" depends="prepare">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="redeploy"/>
-            <param name="arg.list" value="earwithejb-portable ${portable.ear} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.jsr88">
-        <antcall target="common.undeploy.jsr88">
-            <param name="arg.list" value="earwithejb-portable"/>
-        </antcall>
-    </target>
-
-    <target name="start.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="start"/>
-            <param name="arg.list" value="earwithejb-portable"/>
-        </antcall>
-    </target>
-
-    <target name="stop.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="stop"/>
-            <param name="arg.list" value="earwithejb-portable"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.autodeploy">
-    </target>
-
-    <target name="run" depends="run.positive"/>
-
-    <target name="run.positive" depends="init,setOrbPort">
-        <antcall target="declare-test">
-            <param name="description" value="${description} (server)"/>
-        </antcall>
-        <antcall target="runclient">
-            <param name="arg.list" value="true"/>
-            <param name="log.id" value="${log.id}"/>
-            <param name="tgtPort" value="${depltest.orbport}"/>
-        </antcall>
-        <antcall target="pingCluster">
-            <param name="state" value="true"/>
-            <param name="log.id" value="${log.id}"/>
-            <param name="testDet" value="${description}"/>
-        </antcall>
-    </target>
-
-    <target name="run.negative" depends="init,setOrbPort">
-        <antcall target="declare-test">
-            <param name="description" value="${description} (server)"/>
-        </antcall>
-        <antcall target="runclient">
-            <param name="arg.list" value="false"/>
-            <param name="log.id" value="${log.id}"/>
-            <param name="tgtPort" value="${depltest.orbport}"/>
-        </antcall>
-        <antcall target="pingCluster">
-            <param name="state" value="false"/>
-            <param name="log.id" value="${log.id}"/>
-            <param name="testDet" value="${description}"/>
-        </antcall>
-    </target>
-
-    <target name="pingCluster" if="doCluster">
-        <antcall target="declare-test">
-            <param name="description" value="${testDet} (cluster-inst1)"/>
-        </antcall>
-        <antcall target="runclient">
-            <param name="arg.list" value="${state}"/>
-            <param name="log.id" value="${log.id}"/>
-            <param name="tgtPort" value="${deploy.clusterinstance1.orbport}"/>
-        </antcall>
-    </target>
-
-    <target name="runclient" depends="init,setOrbPort">
-        <javac srcdir="../../ejb/statelesshello/standaloneclient" destdir="${build}">
-           <classpath>
-                <path refid="gfv3.classpath"/>
-                <path location="../../build/ejb/statelesshello"/>
-            </classpath>
-
-        </javac>
-
-        <javaWithResult
-            fork="true"
-            failonerror="false"
-            jvm="${JAVA}"
-            classname="standaloneclient.HelloClient"
-            output="${build}/${log.id}.output.log"
-            resultproperty="result">
-
-            <jvmarg value="-Dorg.omg.CORBA.ORBInitialHost=${http.host}"/>
-            <jvmarg value="-Dorg.omg.CORBA.ORBInitialPort=${tgtPort}"/>
-
-            <classpath>
-                <path location="${inst}/lib/j2ee.jar"/>
-                <path location="${inst}/lib/appserv-rt.jar"/>
-                <path location="${inst}/lib/appserv-admin.jar"/>
-                <path location="${build}"/>
-                <path location="${archivedir}/earwithejb.jar"/>
-            </classpath>
-
-            <arg line="${arg.list}"/>
-        </javaWithResult>
-
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/${log.id}.output.log"/>
-        </antcall>
-    </target>
-
-    <target name="private-all">
-        <antcall target="assemble"/>
-        <antcall target="deploy.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="1"/>
-            <param name="description" value="ear/earwithejb Test asadmin deploy"/>
-        </antcall>
-
-        <antcall target="redeploy.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="2"/>
-            <param name="description" value="ear/earwithejb Test asadmin redeploy"/>
-        </antcall>
-        <antcall target="undeploy.asadmin"/>
-
-<!--
-        <antcall target="deploy.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="3"/>
-            <param name="description" value="ear/earwithejb Test jsr88 deploy"/>
-        </antcall>
-
-        <antcall target="stop.jsr88"/>
-        <antcall target="run.negative">
-            <param name="log.id" value="4"/>
-            <param name="description" value="ear/earwithejb Test jsr88 stopped state"/>
-        </antcall>
-
-        <antcall target="start.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="5"/>
-            <param name="description" value="ear/earwithejb Test jsr88 started state"/>
-        </antcall>
-
-        <antcall target="stop.jsr88"/>
-        <antcall target="redeploy.jsr88"/>
-        <antcall target="run.negative">
-            <param name="log.id" value="6"/>
-            <param name="description" value="ear/earwithejb Test jsr88 redeploy stop"/>
-        </antcall>
-
-        <antcall target="start.jsr88"/>
-        <antcall target="redeploy.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="7"/>
-            <param name="description" value="ear/earwithejb Test jsr88 redeploy start"/>
-        </antcall>
-        <antcall target="undeploy.jsr88"/>
--->
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithejb/ejb-jar.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithejb/ejb-jar.xml
deleted file mode 100644
index 9ddc3e9..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithejb/ejb-jar.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<ejb-jar version="2.1" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">
-  <display-name>Ejb1</display-name>
-  <enterprise-beans>
-    <session>
-      <ejb-name>MyStatelesshello</ejb-name>
-      <home>statelesshello.StatelesshelloHome</home>
-      <remote>statelesshello.Statelesshello</remote>
-      <ejb-class>statelesshello.StatelesshelloEJB</ejb-class>
-      <session-type>Stateless</session-type>
-      <transaction-type>Container</transaction-type>
-      <env-entry>
-        <env-entry-name>user</env-entry-name>
-        <env-entry-type>java.lang.String</env-entry-type>
-        <env-entry-value>scott</env-entry-value>
-      </env-entry>
-      <env-entry>
-        <env-entry-name>number</env-entry-name>
-        <env-entry-type>java.lang.Double</env-entry-type>
-        <env-entry-value>22.25</env-entry-value>
-      </env-entry>
-      <security-identity>
-        <use-caller-identity/>
-      </security-identity>
-    </session>
-  </enterprise-beans>
-  <assembly-descriptor>
-    <container-transaction>
-      <method>
-        <ejb-name>MyStatelesshello</ejb-name>
-        <method-intf>Remote</method-intf>
-        <method-name>sayStatelesshello</method-name>
-      </method>
-      <trans-attribute>Required</trans-attribute>
-    </container-transaction>
-    <container-transaction>
-      <method>
-        <ejb-name>MyStatelesshello</ejb-name>
-        <method-intf>Remote</method-intf>
-        <method-name>getUserDefinedException</method-name>
-      </method>
-      <trans-attribute>Required</trans-attribute>
-    </container-transaction>
-    <container-transaction>
-      <method>
-        <ejb-name>MyStatelesshello</ejb-name>
-        <method-intf>Remote</method-intf>
-        <method-name>isStatelesshello</method-name>
-      </method>
-      <trans-attribute>Required</trans-attribute>
-    </container-transaction>
-  </assembly-descriptor>
-</ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithejb/portable-app.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithejb/portable-app.xml
deleted file mode 100644
index e80941d..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithejb/portable-app.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<application version="1.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd">
-  <description>Application description</description>
-  <display-name>EARwithEJBOnly</display-name>
-  <module>
-     <ejb>earwithejb-portable.jar</ejb>
-  </module>
-</application>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithejb/sun-alt-ejbjar.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithejb/sun-alt-ejbjar.xml
deleted file mode 100644
index ece1511..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithejb/sun-alt-ejbjar.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 EJB 2.1//EN" "http://www.sun.com/software/sunone/appserver/dtds/sun-ejb-jar_2_1-0.dtd">
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<sun-ejb-jar>
-  <enterprise-beans>
-    <name>Ejb1</name>
-    <ejb>
-      <ejb-name>MyStatelesshello</ejb-name>
-      <jndi-name>MyStatelesshello</jndi-name>
-    </ejb>
-  </enterprise-beans>
-</sun-ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithejb/sun-ejb-jar.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithejb/sun-ejb-jar.xml
deleted file mode 100644
index ece1511..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithejb/sun-ejb-jar.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 EJB 2.1//EN" "http://www.sun.com/software/sunone/appserver/dtds/sun-ejb-jar_2_1-0.dtd">
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<sun-ejb-jar>
-  <enterprise-beans>
-    <name>Ejb1</name>
-    <ejb>
-      <ejb-name>MyStatelesshello</ejb-name>
-      <jndi-name>MyStatelesshello</jndi-name>
-    </ejb>
-  </enterprise-beans>
-</sun-ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithwar/altapplication.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithwar/altapplication.xml
deleted file mode 100644
index 1f1ce6c..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithwar/altapplication.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<application version="1.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd">
-  <description>Application description</description>
-  <display-name>EARwithWAROnly</display-name>
-  <module>
-    <web>
-      <web-uri>servletonly.war</web-uri>
-      <context-root>altwar</context-root>
-    </web>
-  </module>
-</application>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithwar/application.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithwar/application.xml
deleted file mode 100644
index 52542fa..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithwar/application.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<application version="1.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd">
-  <description>Application description</description>
-  <display-name>EARwithWAROnly</display-name>
-  <module>
-    <web>
-      <web-uri>servletonly.war</web-uri>
-      <context-root>war</context-root>
-    </web>
-  </module>
-</application>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithwar/build.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithwar/build.xml
deleted file mode 100644
index 25e3753..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithwar/build.xml
+++ /dev/null
@@ -1,276 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="earwithwarApp" default="usage" basedir=".">
-
-    &commonBuild;
-
-    <property name="contextRoot" value="war"/>
-    <property name="altContextRoot" value="altwar"/>
-    <property name="testName" value="servletonly"/>
-
-    <target name="prepare" depends="init">
-        <mkdir dir="${build}"/>
-        <mkdir dir="${build}/archive"/>
-        <mkdir dir="${build}/archive/META-INF"/>
-        <property name="portable.ear" value="${build}/${testName}-portable.ear"/>
-        <property name="portable.war" value="${build}/${testName}-portable.war"/>
-        <property name="all.war" value="${build}/${testName}.war"/>
-        <property name="all.ear" value="${build}/${testName}.ear"/>
-        <property name="deployplan.jar" value="${build}/${testName}-deployplan.jar"/>
-    </target>
-
-    <target name="assemble" depends="prepare">
-        <ant dir="../../war/servletonly" target="compile">
-            <property name="build" value="${build}/war"/>
-        </ant>
-        <war destfile="${portable.war}" webxml="../../war/servletonly/web.xml">
-            <classes dir="${build}/war"/>
-        </war>
-        <jar destfile="${deployplan.jar}">
-            <fileset dir="${basedir}" includes="sun-web.xml"/>
-        </jar>
-        <war destfile="${all.war}" webxml="../../war/servletonly/web.xml">
-            <webinf dir="." includes="sun-web.xml"/>
-            <classes dir="${build}/war"/>
-        </war>
-        <copy file="portable-app.xml" tofile="${build}/archive/META-INF/application.xml"/>
-        <copy file="altapplication.xml" tofile="${build}/archive/altapplication.xml"/>
-        <copy file="${portable.war}" todir="${build}/archive"/>
-        <jar destfile="${portable.ear}" basedir="${build}/archive"/>
-        <delete file="${build}/archive/${testName}-portable.war"/>
-        <delete file="${build}/archive/META-INF/application.xml"/>
-        <copy file="application.xml" todir="${build}/archive/META-INF"/>
-        <copy file="${all.war}" todir="${build}/archive"/>
-        <jar destfile="${all.ear}" basedir="${build}/archive"/>
-    </target>
-
-    <target name="deploy.asadmin" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="${all.ear}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.asadmin.altdd" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="--altdd ${build}/archive/altapplication.xml ${all.ear}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.asadmin" depends="prepare">
-        <antcall target="common.redeploy.asadmin">
-            <param name="arg.list" value="${all.ear}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.asadmin">
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="${testName}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="enable.asadmin">
-        <antcall target="common.enable.asadmin">
-            <param name="arg.list"
-                   value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="disable.asadmin">
-        <antcall target="common.disable.asadmin">
-            <param name="arg.list"
-                   value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.jsr88" depends="prepare">
-        <antcall target="common.deploy.jsr88">
-            <param name="arg.list" value="${portable.ear} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.jsr88" depends="prepare">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="redeploy"/>
-            <param name="arg.list" value="servletonly-portable ${portable.ear} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.jsr88">
-        <antcall target="common.undeploy.jsr88">
-            <param name="arg.list" value="servletonly-portable"/>
-        </antcall>
-    </target>
-
-    <target name="start.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="start"/>
-            <param name="arg.list" value="servletonly-portable"/>
-        </antcall>
-    </target>
-
-    <target name="stop.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="stop"/>
-            <param name="arg.list" value="servletonly-portable"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.autodeploy">
-    </target>
-
-    <target name="run" depends="run.positive"/>
-
-    <target name="run.positive" depends="setHttpPort">
-        <antcall target="common.run.positive">
-            <param name="link" value="${contextRoot}/${testName}"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="run.positive.altdd" depends="setHttpPort">
-        <antcall target="common.run.positive">
-            <param name="link" value="${altContextRoot}/${testName}"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="run.negative" depends="setHttpPort">
-        <antcall target="common.run.negative">
-            <param name="link" value="${contextRoot}/${testName}"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="runclient" depends="init">
-        <javaWithResult
-            fork="true"
-            failonerror="false"
-            jvm="${JAVA}"
-            classname="servletonly.client.TestClient"
-            output="${build}/${log.id}.output.log"
-            resultproperty="result">
-
-            <jvmarg value="-Dorg.omg.CORBA.ORBInitialHost=${http.host}"/>
-            <jvmarg value="-Dorg.omg.CORBA.ORBInitialPort=${orb.port}"/>
-
-            <classpath>
-                <path location="${inst}/lib/j2ee.jar"/>
-                <path location="${build}/war"/>
-                <path location="../../build/war/servletonly"/>
-            </classpath>
-
-            <arg line="${arg.list}"/>
-        </javaWithResult>
-
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/${log.id}.output.log"/>
-        </antcall>
-    </target>
-
-    <target name="private-all">
-        <antcall target="assemble"/>
-        <antcall target="deploy.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="1"/>
-            <param name="desc" value="ear/earwithwar Test asadmin deploy"/>
-        </antcall>
-
-        <antcall target="redeploy.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="2"/>
-            <param name="desc" value="ear/earwithwar Test asadmin redeploy"/>
-        </antcall>
-
-        <antcall target="disable.asadmin"/>
-        <antcall target="run.negative">
-            <param name="log.id" value="3"/>
-            <param name="desc" value="ear/earwithwar Test asadmin disable"/>
-        </antcall>
-
-        <antcall target="enable.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="4"/>
-            <param name="desc" value="ear/earwithwar Test asadmin enable"/>
-        </antcall>
-
-        <antcall target="undeploy.asadmin"/>
-
-        <antcall target="deploy.asadmin.altdd"/>
-        <antcall target="run.positive.altdd">
-            <param name="log.id" value="5"/>
-            <param name="desc" value="ear/earwithwar Test asadmin deploy with altdd"/>
-        </antcall>
-
-        <antcall target="undeploy.asadmin"/>
-
-        <antcall target="deploy.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="6"/>
-            <param name="desc" value="ear/earwithwar Test jsr88 deploy"/>
-        </antcall>
-
-        <antcall target="stop.jsr88"/>
-        <antcall target="run.negative">
-            <param name="desc" value="ear/earwithwar Test jsr88 stopped state"/>
-            <param name="log.id" value="7"/>
-        </antcall>
-
-        <antcall target="start.jsr88"/>
-        <antcall target="run.positive">
-            <param name="desc" value="ear/earwithwar Test jsr88 started state"/>
-            <param name="log.id" value="8"/>
-        </antcall>
-
-        <antcall target="stop.jsr88"/>
-        <antcall target="redeploy.jsr88"/>
-        <antcall target="run.negative">
-            <param name="desc" value="ear/earwithwar Test jsr88 redeploy stop"/>
-            <param name="log.id" value="9"/>
-        </antcall>
-
-        <antcall target="start.jsr88"/>
-        <antcall target="redeploy.jsr88"/>
-        <antcall target="run.positive">
-            <param name="desc" value="ear/earwithwar Test jsr88 redeploy start"/>
-            <param name="log.id" value="10"/>
-        </antcall>
-        <antcall target="undeploy.jsr88"/>
-    </target>
-
-    <target name="clobber" depends="clean">
-        <delete file="${portable.war}"/>
-        <delete file="${all.war}"/>
-        <delete file="${deployplan.war}"/>
-        <delete dir="${build}"/>
-    </target>
-
-    <target name="usage">
-        <antcall target="all"/>
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithwar/portable-app.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithwar/portable-app.xml
deleted file mode 100644
index 248b34b..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithwar/portable-app.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<application version="1.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd">
-  <description>Application description</description>
-  <display-name>EARwithWAROnly</display-name>
-  <module>
-    <web>
-      <web-uri>servletonly-portable.war</web-uri>
-      <context-root>war</context-root>
-    </web>
-  </module>
-</application>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithwar/sun-web.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/earwithwar/sun-web.xml
deleted file mode 100644
index 5279cd2..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/earwithwar/sun-web.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 Servlet 2.4//EN' 'http://www.sun.com/software/sunone/appserver/dtds/sun-web-app_2_4-0.dtd'>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<sun-web-app>
-  <context-root>war</context-root>
-  <session-config>
-    <session-manager/>
-  </session-config>
-  <class-loader delegate="true"/>
-  <jsp-config/>
-</sun-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/libClassPath/build.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/libClassPath/build.xml
index dc231d1..5286479 100644
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/libClassPath/build.xml
+++ b/appserver/tests/appserv-tests/devtests/deployment/ear/libClassPath/build.xml
@@ -94,7 +94,7 @@
             <jvmarg value="-Dorg.omg.CORBA.ORBInitialPort=${orb.port}"/>
 
             <classpath>
-                <path location="${inst}/lib/j2ee.jar"/>
+                <path location="${inst}/lib/javaee.jar"/>
                 <path location="${build}"/>
             </classpath>
 
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/libClassPath/misc/build.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/libClassPath/misc/build.xml
index d29f788..6b53819 100644
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/libClassPath/misc/build.xml
+++ b/appserver/tests/appserv-tests/devtests/deployment/ear/libClassPath/misc/build.xml
@@ -34,7 +34,7 @@
         <target name="compile" depends="prepare">
                 <javac srcdir="samples" destdir="${build}">
                     <classpath>
-                      <pathelement location="${inst}/lib/j2ee.jar"/>
+                      <pathelement location="${inst}/lib/javaee.jar"/>
                       <pathelement location="${inst}/lib/appserv-rt.jar"/>
                       <pathelement location="${build}/WEB-INF/lib/library.jar"/>
                     </classpath>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/manifestClassPath/build.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/manifestClassPath/build.xml
index ef4ae92..1c7fa3a 100644
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/manifestClassPath/build.xml
+++ b/appserver/tests/appserv-tests/devtests/deployment/ear/manifestClassPath/build.xml
@@ -94,7 +94,7 @@
             <jvmarg value="-Dorg.omg.CORBA.ORBInitialPort=${orb.port}"/>
 
             <classpath>
-                <path location="${inst}/lib/j2ee.jar"/>
+                <path location="${inst}/lib/javaee.jar"/>
                 <path location="${build}"/>
             </classpath>
 
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/manifestClassPath/misc/build.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/manifestClassPath/misc/build.xml
index d29f788..6b53819 100644
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/manifestClassPath/misc/build.xml
+++ b/appserver/tests/appserv-tests/devtests/deployment/ear/manifestClassPath/misc/build.xml
@@ -34,7 +34,7 @@
         <target name="compile" depends="prepare">
                 <javac srcdir="samples" destdir="${build}">
                     <classpath>
-                      <pathelement location="${inst}/lib/j2ee.jar"/>
+                      <pathelement location="${inst}/lib/javaee.jar"/>
                       <pathelement location="${inst}/lib/appserv-rt.jar"/>
                       <pathelement location="${build}/WEB-INF/lib/library.jar"/>
                     </classpath>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/uniquecr/application.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/uniquecr/application.xml
deleted file mode 100644
index 52542fa..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/uniquecr/application.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<application version="1.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd">
-  <description>Application description</description>
-  <display-name>EARwithWAROnly</display-name>
-  <module>
-    <web>
-      <web-uri>servletonly.war</web-uri>
-      <context-root>war</context-root>
-    </web>
-  </module>
-</application>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/uniquecr/build.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/uniquecr/build.xml
deleted file mode 100644
index 51e28bf..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/uniquecr/build.xml
+++ /dev/null
@@ -1,202 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="uniquecrApp" default="usage" basedir=".">
-
-    &commonBuild;
-
-    <property name="contextRoot" value="war"/>
-    <property name="testName" value="servletonly"/>
-    <property name="testName2" value="servletonly2"/>
-
-    <target name="prepare" depends="init">
-        <mkdir dir="${build}"/>
-        <mkdir dir="${build}/archive"/>
-        <mkdir dir="${build}/archive/META-INF"/>
-        <property name="portable.ear" value="${build}/${testName}-portable.ear"/>
-        <property name="portable.war" value="${build}/${testName}-portable.war"/>
-        <property name="all.war" value="${build}/${testName}.war"/>
-        <property name="all.ear" value="${build}/${testName2}.ear"/>
-        <property name="deployplan.jar" value="${build}/${testName}-deployplan.jar"/>
-    </target>
-
-    <target name="assemble" depends="prepare">
-        <ant dir="../../war/servletonly" target="compile">
-            <property name="build" value="${build}/war"/>
-        </ant>
-        <war destfile="${portable.war}" webxml="../../war/servletonly/web.xml">
-            <classes dir="${build}/war"/>
-        </war>
-        <jar destfile="${deployplan.jar}">
-            <fileset dir="${basedir}" includes="sun-web.xml"/>
-        </jar>
-        <war destfile="${all.war}" webxml="../../war/servletonly/web.xml">
-            <webinf dir="." includes="sun-web.xml"/>
-            <classes dir="${build}/war"/>
-        </war>
-        <copy file="portable-app.xml" tofile="${build}/archive/META-INF/application.xml"/>
-        <copy file="${portable.war}" todir="${build}/archive"/>
-        <jar destfile="${portable.ear}" basedir="${build}/archive"/>
-        <delete file="${build}/archive/${testName}-portable.war"/>
-        <delete file="${build}/archive/META-INF/application.xml"/>
-        <copy file="application.xml" todir="${build}/archive/META-INF"/>
-        <copy file="${all.war}" todir="${build}/archive"/>
-        <jar destfile="${all.ear}" basedir="${build}/archive"/>
-    </target>
-
-    <target name="deploy.asadmin" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="${all.ear}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.asadmin">
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="${testName}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="run" depends="run.positive"/>
-
-    <target name="run.positive" depends="setHttpPort">
-        <antcall target="common.run.positive">
-            <param name="link" value="${contextRoot}/${testName}"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="run.positive.2">
-        <property name="test-details" value="${desc}"/>
-        <property name="sub-url" value="${contextRoot}/${testName}"/>
-        <property name="url" value="http://${http.host}:${http.port}/${sub-url}"/>
-        <property name="state" value="true"/>
-        <property name="log-file" value="${log.id}"/>
-        <antcall target="declare-test">
-            <param name="description" value="${test-details} (server)"/>
-        </antcall>
-        <antcall target="runclient">
-            <param name="arg.list" value="${url} ${state}"/>
-            <param name="log.id" value="${log-file}"/>
-        </antcall>
-    </target>
-
-    <target name="runclient" depends="init">
-        <javaWithResult
-            fork="true"
-            failonerror="false"
-            jvm="${JAVA}"
-            classname="servletonly.client.TestClient"
-            output="${build}/${log.id}.output.log"
-            resultproperty="result">
-
-            <jvmarg value="-Dorg.omg.CORBA.ORBInitialHost=${http.host}"/>
-            <jvmarg value="-Dorg.omg.CORBA.ORBInitialPort=${orb.port}"/>
-
-            <classpath>
-                <path location="${inst}/lib/j2ee.jar"/>
-                <path location="${build}/war"/>
-                <path location="../../build/war/servletonly"/>
-            </classpath>
-
-            <arg line="${arg.list}"/>
-        </javaWithResult>
-
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/${log.id}.output.log"/>
-        </antcall>
-    </target>
-
-    <target name="addClusterRefs" depends="prepare" if="doCluster">
-        <!-- create-app-ref to cluster -->
-        <antcall target="common.run.asadmin">
-            <param name="arg.list"
-                   value="create-application-ref --port ${admin.port} --user ${admin.user} --passwordfile ${passwordFile} --target ${testCluster} ${testName2}"/>
-        </antcall>
-    </target>
-
-    <target name="delClusterRefs" depends="prepare" if="doCluster">
-        <!-- delete-app-ref to remote instance server -->
-        <antcall target="common.run.asadmin">
-            <param name="arg.list"
-                   value="delete-application-ref --port ${admin.port} --user ${admin.user} --passwordfile ${passwordFile} --target ${testCluster} ${testName2}"/>
-        </antcall>
-    </target>
-
-       <!-- the following is run only in EE environment -->
-    <target name="private-all-ee" depends="assemble" if="EE">
-        <echo message="Running tests specific to EE"/>
-
-        <!-- deploy ear to remote instance server/cluster -->
-        <antcall target="common.run.asadmin">
-            <param name="arg.list"
-                   value="deploy --port ${admin.port} --user ${admin.user} --passwordfile ${passwordFile} --target ${testServer} ${all.ear}"/>
-        </antcall>
-        <antcall target="addClusterRefs"/>
-
-        <antcall target="run.positive">
-            <param name="log.id" value="1"/>
-            <param name="desc" value="ear/uniquecr Test1 "/>
-        </antcall>
-
-        <!-- deploy war to DAS server instance -->
-        <!-- this should succeed because it's different instance -->
-       <antcall target="common.run.asadmin">
-            <param name="arg.list"
-                   value="deploy --port ${admin.port} --user ${admin.user} --passwordfile ${passwordFile} --target server ${all.war}"/>
-        </antcall>
-
-        <antcall target="run.positive.2">
-            <param name="log.id" value="2"/>
-            <param name="desc" value="ear/uniquecr Test2"/>
-        </antcall>
-
-       <!-- undeploy ear from remote server instance/cluster -->
-        <antcall target="delClusterRefs"/>
-        <antcall target="common.run.asadmin">
-            <param name="arg.list"
-                   value="undeploy --port ${admin.port} --user ${admin.user} --passwordfile ${passwordFile} --target ${testServer} ${testName2}"/>
-        </antcall>
-
-        <!-- undeploy war from DAS server instance-->
-        <antcall target="common.run.asadmin">
-            <param name="arg.list"
-                   value="undeploy --port ${admin.port} --user ${admin.user} --passwordfile ${passwordFile} --target server ${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="private-all"  depends="private-all-ee"/>
-
-    <target name="clobber" depends="clean">
-        <delete file="${portable.war}"/>
-        <delete file="${all.war}"/>
-        <delete file="${deployplan.war}"/>
-        <delete dir="${build}"/>
-    </target>
-
-    <target name="usage">
-        <antcall target="all"/>
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/uniquecr/portable-app.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/uniquecr/portable-app.xml
deleted file mode 100644
index 248b34b..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/uniquecr/portable-app.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<application version="1.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd">
-  <description>Application description</description>
-  <display-name>EARwithWAROnly</display-name>
-  <module>
-    <web>
-      <web-uri>servletonly-portable.war</web-uri>
-      <context-root>war</context-root>
-    </web>
-  </module>
-</application>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/uniquecr/sun-web.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/uniquecr/sun-web.xml
deleted file mode 100644
index 5279cd2..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/uniquecr/sun-web.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 Servlet 2.4//EN' 'http://www.sun.com/software/sunone/appserver/dtds/sun-web-app_2_4-0.dtd'>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<sun-web-app>
-  <context-root>war</context-root>
-  <session-config>
-    <session-manager/>
-  </session-config>
-  <class-loader delegate="true"/>
-  <jsp-config/>
-</sun-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/appclient/application-client.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/appclient/application-client.xml
deleted file mode 100644
index bb305cb..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/appclient/application-client.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<application-client version="1.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application-client_1_4.xsd">
-  <description>application client for wstoejb application</description>
-  <display-name>wstoejbClient</display-name>
-  <service-ref>
-     <description>web service ref</description>
-     <service-ref-name>service/WstoEjbService</service-ref-name>
-     <service-interface>wstoejb.WebServiceToEjb</service-interface>
-     <wsdl-file>META-INF/wsdl/WebServiceToEjb.wsdl</wsdl-file>
-     <jaxrpc-mapping-file>mapping.xml</jaxrpc-mapping-file>
-     <port-component-ref>
-        <service-endpoint-interface>wstoejb.WebServiceToEjbSEI</service-endpoint-interface>
-        <port-component-link>WebServiceToEjbSEIPort</port-component-link>
-     </port-component-ref>
-  </service-ref>
-</application-client>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/appclient/build.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/appclient/build.xml
deleted file mode 100644
index 204b108..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/appclient/build.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../../config/common.xml">
-]>
-
-<project name="wstoejb" default="all" basedir=".">
-
-         &commonBuild;
-    <property name="archivedir" value="${build}/archives"/>
-
-        <target name="prepare" depends="init">
-        <mkdir dir="${build}" />
-        <mkdir dir="${archivedir}" />
-        <copy file="WebServiceToEjb.wsdl" todir="${build}/META-INF/wsdl"/>
-        <exec executable="${WSCOMPILE}" failonerror="true" >
-                    <arg line="-import -d ${build} -classpath ${build} -mapping ${build}/mapping.xml wscompile_config.xml"/>
-        </exec>
-        </target>
-
-        <target name="compile" depends="prepare">
-                <javac srcdir="wstoejb" destdir="${build}">
-  <classpath refid="gfv3.classpath"/>
-         </javac>
-
-        </target>
-
-        <target name="assemble" depends="compile,setHttpPort">
-            <mkdir dir="${build}/META-INF"/>
-            <copy file="application-client.xml" todir="${build}/META-INF"/>
-            <jar destfile="${archivedir}/appclient-portable.jar" basedir="${build}">
-                <manifest>
-                    <attribute name="main-class" value="wstoejb.Client"/>
-                </manifest>
-            </jar>
-            <copy file="sun-application-client.xml" todir="${build}/META-INF" failonerror="false"/>
-            <replace file="${build}/META-INF/sun-application-client.xml">
-                <replacefilter token="HTTP_HOST" value="${http.host}" />
-                <replacefilter token="HTTP_PORT" value="${depltest.port}"/>
-            </replace>
-            <jar destfile="${archivedir}/appclient.jar" basedir="${build}">
-                <manifest>
-                    <attribute name="main-class" value="wstoejb.Client"/>
-                </manifest>
-            </jar>
-        </target>
-
-        <target name="private-all" depends="assemble"/>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/appclient/sun-application-client.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/appclient/sun-application-client.xml
deleted file mode 100644
index faf43de..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/appclient/sun-application-client.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-application-client PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 Application Client 1.4//EN' 'http://www.sun.com/software/sunone/appserver/dtds/sun-application-client_1_4-0.dtd'>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<sun-application-client>
-    <service-ref>
-      <service-ref-name>service/WstoEjbService</service-ref-name>
-      <wsdl-override>http://HTTP_HOST:HTTP_PORT/wstoejb/wstoejb?WSDL</wsdl-override>
-    </service-ref>
-</sun-application-client>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/appclient/wscompile_config.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/appclient/wscompile_config.xml
deleted file mode 100644
index e781eb3..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/appclient/wscompile_config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<configuration
-  xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
-  <wsdl
-      location="WebServiceToEjb.wsdl"
-      packageName="wstoejb"/>
-</configuration>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/appclient/wstoejb/Client.java b/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/appclient/wstoejb/Client.java
deleted file mode 100644
index 5ba67b1..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/appclient/wstoejb/Client.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package wstoejb;
-
-import javax.naming.*;
-import javax.xml.namespace.QName;
-import javax.xml.rpc.Stub;
-import javax.xml.rpc.Call;
-import javax.xml.rpc.Service;
-
-import wstoejb.WebServiceToEjbSEI;
-
-
-/**
- * This is a appclient test
- */
-public class Client {
-
-    public static void main(String args[]) {
-
-        boolean testPositive = (Boolean.valueOf(args[0])).booleanValue();
-        try {
-            Context ic = new InitialContext();
-
-            Service myWebService = (Service)
-                ic.lookup("java:comp/env/service/WstoEjbService");
-            WebServiceToEjbSEI port = (WebServiceToEjbSEI) myWebService.getPort(WebServiceToEjbSEI.class);
-            System.out.println(port.payload("APPCLIENT as client"));
-        } catch(Throwable t) {
-                        if(testPositive) {
-                    t.printStackTrace();
-                    System.exit(-1);
-                        } else {
-                                System.out.println("Recd exception as expected");
-                        }
-        }
-                System.exit(0);
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/application.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/application.xml
deleted file mode 100644
index 39f5fe0..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/application.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<application version="1.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd">
-  <description>Application description</description>
-  <display-name>WebServiceToEjbApp</display-name>
-  <module>
-    <web>
-      <web-uri>sayhello.war</web-uri>
-      <context-root>wstoejb</context-root>
-    </web>
-  </module>
-  <module>
-    <java>appclient.jar</java>
-  </module>
-  <module>
-    <ejb>wstoejb.jar</ejb>
-  </module>
-</application>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/build.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/build.xml
deleted file mode 100644
index 5adcc74..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/build.xml
+++ /dev/null
@@ -1,204 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="wstoejb" default="all" basedir=".">
-
-        &commonBuild;
-
-
-    <property name="testName" value="wstoejb"/>
-    <target name="prepare" depends="init">
-        <property name="portable.ear" value="${build}/wstoejb-portable.ear"/>
-        <property name="all.ear" value="${build}/wstoejb.ear"/>
-        <property name="deployplan.jar" value="${build}/wstoejb-deployplan.jar"/>
-        <mkdir dir="${build}"/>
-    </target>
-
-    <target name="build" depends="prepare">
-        <mkdir dir="${build}/ear"/>
-
-        <ant dir="ejb" target="private-all">
-            <property name="build" value="${build}/ejb"/>
-        </ant>
-
-        <ant dir="war" target="private-all">
-            <property name="build" value="${build}/war"/>
-        </ant>
-
-        <copy file="${build}/war/WEB-INF/wsdl/WebServiceToEjb.wsdl" todir="appclient"/>
-        <ant dir="appclient" target="private-all">
-            <property name="build" value="${build}/appclient"/>
-        </ant>
-
-        <delete file="appclient/WebServiceToEjb.wsdl"/>
-        <mkdir dir="${build}/ear/META-INF"/>
-        <copy file="application.xml" todir="${build}/ear/META-INF"/>
-        <jar destfile="${all.ear}">
-            <fileset dir="${build}/ear" excludes="appclient-portable.jar,sayhello-portable.war,wstoejb-portable.jar"/>
-        </jar>
-
-        <delete file="${build}/ear/META-INF/application.xml"/>
-        <copy file="portable-app.xml" tofile="${build}/ear/META-INF/application.xml"/>
-        <jar destfile="${portable.ear}">
-            <fileset dir="${build}/ear" excludes="appclient.jar,sayhello.war,wstoejb.jar"/>
-        </jar>
-
-        <mkdir dir="${build}/plan"/>
-        <copy file="war/sun-web.xml" tofile="${build}/plan/sayhello-portable.war.sun-web.xml"/>
-        <copy file="ejb/sun-ejb-jar.xml" tofile="${build}/plan/wstoejb-portable.jar.sun-ejb-jar.xml"/>
-        <copy file="${build}/appclient/META-INF/sun-application-client.xml" tofile="${build}/plan/appclient-portable.jar.sun-application-client.xml"/>
-        <jar destfile="${deployplan.jar}" basedir="${build}/plan"/>
-    </target>
-
-    <target name="deploy.asadmin" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="--name ${testName} --retrieve ${build} ${all.ear}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.asadmin" depends="prepare">
-        <antcall target="common.redeploy.asadmin">
-            <param name="arg.list" value="--name ${testName} --retrieve ${build} ${all.ear}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.asadmin">
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="${testName}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.jsr88" depends="prepare">
-        <antcall target="common.deploy.jsr88">
-            <param name="arg.list" value="${portable.ear} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.jsr88" depends="prepare">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="redeploy"/>
-            <param name="arg.list" value="wstoejb-portable ${portable.ear} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.jsr88">
-        <antcall target="common.undeploy.jsr88">
-            <param name="arg.list" value="wstoejb-portable"/>
-        </antcall>
-    </target>
-
-    <target name="start.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="start"/>
-            <param name="arg.list" value="wstoejb-portable"/>
-        </antcall>
-    </target>
-
-    <target name="stop.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="stop"/>
-            <param name="arg.list" value="wstoejb-portable"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.autodeploy">
-    </target>
-
-    <target name="run" depends="run.positive"/>
-
-    <target name="run.positive">
-        <antcall target="runclient">
-            <param name="arg.list" value="true"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="run.negative">
-        <antcall target="runclient">
-            <param name="arg.list" value="false"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="runclient" depends="prepare">
-        <exec executable="${APPCLIENT}" resultproperty="result" output="${build}/${log.id}.output.log">
-            <arg line="-client ${build}/wstoejbClient.jar ${arg.list}"/>
-        </exec>
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/${log.id}.output.log"/>
-        </antcall>
-    </target>
-
-    <target name="private-all" unless="EE">
-        <antcall target="declare-test">
-            <param name="description" value="ear/wstoejb Test asadmin deploy"/>
-        </antcall>
-        <antcall target="build"/>
-        <antcall target="deploy.asadmin"/>
-        <antcall target="run.positive"><param name="log.id" value="1"/></antcall>
-
-        <antcall target="declare-test">
-            <param name="description" value="ear/wstoejb Test asadmin redeploy"/>
-        </antcall>
-        <antcall target="deploy.asadmin"/>
-        <antcall target="run.positive"><param name="log.id" value="2"/></antcall>
-        <antcall target="undeploy.asadmin"/>
-
-        <antcall target="declare-test">
-            <param name="description" value="ear/wstoejb Test jsr88 deploy"/>
-        </antcall>
-        <antcall target="deploy.jsr88"/>
-        <antcall target="run.positive"><param name="log.id" value="3"/></antcall>
-
-        <antcall target="declare-test">
-            <param name="description" value="ear/wstoejb Test jsr88 stopped state"/>
-        </antcall>
-        <antcall target="stop.jsr88"/>
-        <antcall target="run.negative"><param name="log.id" value="4"/></antcall>
-
-        <antcall target="declare-test">
-            <param name="description" value="ear/wstoejb Test jsr88 started state"/>
-        </antcall>
-        <antcall target="start.jsr88"/>
-        <antcall target="run.positive"><param name="log.id" value="5"/></antcall>
-
-        <antcall target="stop.jsr88"/>
-        <antcall target="declare-test">
-            <param name="description" value="ear/wstoejb Test jsr88 redeploy stop"/>
-        </antcall>
-        <antcall target="redeploy.jsr88"/>
-        <antcall target="run.negative"><param name="log.id" value="6"/></antcall>
-
-        <antcall target="start.jsr88"/>
-        <antcall target="declare-test">
-            <param name="description" value="ear/wstoejb Test jsr88 redeploy start"/>
-        </antcall>
-        <antcall target="redeploy.jsr88"/>
-        <antcall target="run.positive"><param name="log.id" value="7"/></antcall>
-        <antcall target="undeploy.jsr88"/>
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/ejb/build.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/ejb/build.xml
deleted file mode 100644
index 535b9ca..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/ejb/build.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../../config/common.xml">
-]>
-
-<project name="wstoejb" default="all" basedir=".">
-
-         &commonBuild;
-    <property name="archivedir" value="${build}/archives"/>
-
-        <target name="prepare" depends="init">
-                <mkdir dir="${build}" />
-                <mkdir dir="${archivedir}" />
-        </target>
-
-        <target name="compile" depends="prepare">
-                <javac srcdir="wstoejb" destdir="${build}">
-                 <classpath refid="gfv3.classpath"/>
-                </javac>
-
-        </target>
-
-        <target name="assemble" depends="compile">
-                <mkdir dir="${build}/META-INF"/>
-                <copy file="ejb-jar.xml" todir="${build}/META-INF"/>
-                <jar destfile="${archivedir}/wstoejb-portable.jar" basedir="${build}"/>
-                <copy file="sun-ejb-jar.xml" todir="${build}/META-INF" failonerror="false"/>
-                <jar destfile="${archivedir}/wstoejb.jar" basedir="${build}"/>
-        </target>
-
-        <target name="private-all" depends="assemble">
-        </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/ejb/ejb-jar.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/ejb/ejb-jar.xml
deleted file mode 100644
index dabe645..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/ejb/ejb-jar.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<ejb-jar version="2.1" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">
-  <display-name>Ejb1</display-name>
-  <enterprise-beans>
-    <session>
-      <ejb-name>WsToEjbSessionBean</ejb-name>
-      <home>wstoejb.StatefulSessionBeanHome</home>
-      <remote>wstoejb.StatefulSessionBean</remote>
-      <ejb-class>wstoejb.StatefulSessionBeanEJB</ejb-class>
-      <session-type>Stateful</session-type>
-      <transaction-type>Container</transaction-type>
-      <security-identity>
-        <use-caller-identity/>
-      </security-identity>
-    </session>
-  </enterprise-beans>
-</ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/ejb/sun-ejb-jar.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/ejb/sun-ejb-jar.xml
deleted file mode 100644
index bfcb3c9..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/ejb/sun-ejb-jar.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 EJB 2.1//EN" "http://www.sun.com/software/sunone/appserver/dtds/sun-ejb-jar_2_1-0.dtd">
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<sun-ejb-jar>
-  <enterprise-beans>
-    <name>Ejb1</name>
-    <ejb>
-      <ejb-name>WsToEjbSessionBean</ejb-name>
-      <jndi-name>WsToEjbSessionBean</jndi-name>
-    </ejb>
-  </enterprise-beans>
-</sun-ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/ejb/wstoejb/StatefulSessionBean.java b/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/ejb/wstoejb/StatefulSessionBean.java
deleted file mode 100644
index 522216a..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/ejb/wstoejb/StatefulSessionBean.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package wstoejb;
-
-import jakarta.ejb.EJBObject;
-import java.rmi.RemoteException;
-
-/**
- *  Simple interface for a statefull session bean.
- *
- * @author Jerome Dochez
- */
-public interface StatefulSessionBean extends EJBObject {
-
-        /**
-         * perform some kind of processing
-         * @param payload is the request info
-         * @return the processed info
-         * @throws RemoteException
-         */
-        public String payLoad(String payload) throws RemoteException;
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/ejb/wstoejb/StatefulSessionBeanEJB.java b/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/ejb/wstoejb/StatefulSessionBeanEJB.java
deleted file mode 100644
index 39d3113..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/ejb/wstoejb/StatefulSessionBeanEJB.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package wstoejb;
-
-import jakarta.ejb.*;
-import java.rmi.RemoteException;
-
-/**
- *  Simple interface for a statefull session bean.
- *
- * @author Jerome Dochez
- */
-public class StatefulSessionBeanEJB implements  SessionBean {
-
-        private SessionContext sc;
-
-        public StatefulSessionBeanEJB(){}
-
-        public void ejbCreate() throws RemoteException {
-                System.out.println("In ejbCreate !!");
-        }
-
-        public void setSessionContext(SessionContext sc) {
-                this.sc = sc;
-        }
-
-        public void ejbRemove() throws RemoteException {}
-
-        public void ejbActivate() {}
-
-        public void ejbPassivate() {}
-
-        /**
-         * perform some kind of processing
-         * @param payload is the request info
-         * @return the processed info
-         * @throws RemoteException
-         */
-        public String payLoad(String payload) throws RemoteException {
-                return "Hey " + payload + ", I am such a dummy ejb, don't bother !";
-        }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/ejb/wstoejb/StatefulSessionBeanHome.java b/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/ejb/wstoejb/StatefulSessionBeanHome.java
deleted file mode 100644
index d47f2cb..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/ejb/wstoejb/StatefulSessionBeanHome.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package wstoejb;
-
-import java.rmi.RemoteException;
-import jakarta.ejb.EJBHome;
-import jakarta.ejb.CreateException;
-
-/**
- * Simple interface to create a statefull session bean
- *
- * @author Jerome Dochez
- */
-public interface StatefulSessionBeanHome extends EJBHome {
-
-        public StatefulSessionBean create () throws RemoteException, CreateException;
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/portable-app.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/portable-app.xml
deleted file mode 100644
index f0bef43..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/portable-app.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<application version="1.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd">
-  <description>Application description</description>
-  <display-name>WebServiceToEjbApp</display-name>
-  <module>
-    <web>
-      <web-uri>sayhello-portable.war</web-uri>
-      <context-root>wstoejb</context-root>
-    </web>
-  </module>
-  <module>
-    <java>appclient-portable.jar</java>
-  </module>
-  <module>
-    <ejb>wstoejb-portable.jar</ejb>
-  </module>
-</application>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/war/build.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/war/build.xml
deleted file mode 100644
index 51a5339..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/war/build.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
- <!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../../config/common.xml">
-]>
-
-<project name="WebServiceToEjb" default="all" basedir=".">
-
-        &commonBuild;
-    <property name="archivedir" value="${build}/archives"/>
-
-        <target name="prepare" depends="init">
-                <property name="binary" value="${build}/WEB-INF/classes"/>
-                <property name="wsdl" value="${build}/WEB-INF/wsdl"/>
-                <mkdir dir="${binary}" />
-                <mkdir dir="${wsdl}"/>
-                <mkdir dir="${archivedir}" />
-        </target>
-
-        <target name="compile" depends="prepare, import-dep">
-                <javac srcdir="wstoejb" destdir="${binary}">
-                    <classpath>
-                      <path refid="gfv3.classpath"/>
-                      <path location="${build}/WEB-INF/lib/library.jar"/>
-                    </classpath>
-                 </javac>
-                <echo message="invoking wscompile to generate wsdl file"/>
-                <exec executable="${WSCOMPILE}">
-                        <arg line="-define config-interface.xml  -d ${binary} -nd ${wsdl} -classpath ${binary} -mapping ${build}/mapping.xml"/>
-                 </exec>
-        </target>
-
-        <target name="import-dep">
-                <mkdir dir="${build}/WEB-INF/lib" />
-                <mkdir dir="${build}/tmp/wstoejb" />
-                <copy file="${build}/../ejb/wstoejb/StatefulSessionBean.class" todir="${build}/tmp/wstoejb"/>
-                <copy file="${build}/../ejb/wstoejb/StatefulSessionBeanHome.class" todir="${build}/tmp/wstoejb"/>
-                <jar destfile="${build}/WEB-INF/lib/library.jar" basedir="${build}/tmp"/>
-                <delete dir="${build}/tmp"/>
-        </target>
-
-        <target name="assemble" depends="compile">
-                <copy file="web.xml" todir="${build}/WEB-INF"/>
-                <copy file="webservices.xml" todir="${build}/WEB-INF"/>
-                <jar destfile="${archivedir}/sayhello-portable.war" basedir="${build}"/>
-                <copy file="sun-web.xml" todir="${build}/WEB-INF" failonerror="false"/>
-                <jar destfile="${archivedir}/sayhello.war" basedir="${build}"/>
-        </target>
-
-        <target name="private-all" depends="assemble"/>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/war/config-interface.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/war/config-interface.xml
deleted file mode 100644
index 4db777f..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/war/config-interface.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<configuration
-  xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
-  <service
-      name="WebServiceToEjb"
-      targetNamespace="urn:DeploymentWebServiceTest"
-      typeNamespace="urn:DeploymentWebServiceTest"
-      packageName="wstoejb">
-      <interface name="wstoejb.WebServiceToEjbSEI"/>
-  </service>
-</configuration>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/war/sun-web.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/war/sun-web.xml
deleted file mode 100644
index 8e1d87c..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/war/sun-web.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 Servlet 2.4//EN' 'http://www.sun.com/software/sunone/appserver/dtds/sun-web-app_2_4-0.dtd'>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<sun-web-app>
-    <context-root>wstoejb</context-root>
-</sun-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/war/web.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/war/web.xml
deleted file mode 100644
index 0032f13..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/war/web.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-  <display-name>WebServiceToEjbWebApp</display-name>
-  <servlet>
-    <servlet-name>WebServiceToEjbServlet</servlet-name>
-    <servlet-class>wstoejb.WebServiceToEjbServlet</servlet-class>
-    <load-on-startup>0</load-on-startup>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>WebServiceToEjbServlet</servlet-name>
-    <url-pattern>/wstoejb</url-pattern>
-  </servlet-mapping>
-  <session-config>
-    <session-timeout>54</session-timeout>
-  </session-config>
-  <ejb-ref>
-    <ejb-ref-name>MyEjbReference</ejb-ref-name>
-    <ejb-ref-type>Session</ejb-ref-type>
-    <home>wstoejb.StatefulSessionBeanHome</home>
-    <remote>wstoejb.StatefulSessionBean</remote>
-    <ejb-link>WsToEjbSessionBean</ejb-link>
-  </ejb-ref>
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/war/webservices.xml b/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/war/webservices.xml
deleted file mode 100644
index 3be9902..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/war/webservices.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<webservices xmlns="http://java.sun.com/xml/ns/j2ee"
-      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
-        http://www.ibm.com/webservices/xsd/j2ee_web_services_1_1.xsd"
-      version="1.1">
-  <description>Very simple web services</description>
-  <webservice-description>
-    <webservice-description-name>A WebService Servlet that will invoke an ejb</webservice-description-name>
-    <wsdl-file>WEB-INF/wsdl/WebServiceToEjb.wsdl</wsdl-file>
-    <jaxrpc-mapping-file>mapping.xml</jaxrpc-mapping-file>
-    <port-component>
-      <description>port component description</description>
-      <port-component-name>WebServiceToEjbSEIPort</port-component-name>
-      <wsdl-port xmlns:tns="urn:DeploymentWebServiceTest">tns:WebServiceToEjbSEIPort</wsdl-port>
-      <service-endpoint-interface>wstoejb.WebServiceToEjbSEI</service-endpoint-interface>
-      <service-impl-bean>
-        <servlet-link>WebServiceToEjbServlet</servlet-link>
-      </service-impl-bean>
-    </port-component>
-  </webservice-description>
-</webservices>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/war/wstoejb/WebServiceToEjbSEI.java b/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/war/wstoejb/WebServiceToEjbSEI.java
deleted file mode 100644
index e79b531..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/war/wstoejb/WebServiceToEjbSEI.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
- package wstoejb;
-
-import java.rmi.Remote;
-import java.rmi.RemoteException;
-
- /*
-  * This interface  is the service endpoint interface for a simple webservices
-  * interfacing a simple EJB
-  *
-  * @author Jerome Dochez
-  */
- public interface WebServiceToEjbSEI extends Remote {
-
-         /*
-          * Invoke the ejb
-          */
-          public String payload(String requestInfo) throws RemoteException;
-
- }
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/war/wstoejb/WebServiceToEjbServlet.java b/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/war/wstoejb/WebServiceToEjbServlet.java
deleted file mode 100644
index ba067e5..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ear/wstoejb/war/wstoejb/WebServiceToEjbServlet.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package wstoejb;
-
-import java.rmi.*;
-import javax.rmi.*;
-import javax.naming.*;
-
-
- /**
-  *  Simple servlet implementation of the SEI
-  *
-  * @author Jerome Dochez
-  */
- public class WebServiceToEjbServlet implements WebServiceToEjbSEI {
-
-         /**
-          *  Implementation of the SEI's methods
-          */
-         public String payload(String requestInfo) throws RemoteException {
-                 try {
-                         if (bean==null) {
-                                 bean = createEJB();
-                         }
-                         return(getMsg(requestInfo) + "; and dont bother this dummy servlet also");
-                 } catch(Exception e) {
-                         throw new RemoteException(e.getMessage());
-                 }
-         }
-
-        /**
-         * Creates the ejb object from it's home interface
-         */
-        private StatefulSessionBean createEJB() throws Exception {
-                // connect to the EJB
-                Context ctxt = new InitialContext();
-                java.lang.Object objref = ctxt.lookup("java:comp/env/MyEjbReference");
-                StatefulSessionBeanHome homeIntf = (StatefulSessionBeanHome) PortableRemoteObject.narrow(objref, StatefulSessionBeanHome.class);
-                return homeIntf.create();
-        }
-
-        public String getMsg(String info) throws Exception {
-                if (bean == null) {
-                        return "could not talk to the EJB : java:comp/env/MyEjbReference";
-                } else {
-                        return bean.payLoad(info);
-                }
-        }
-
-         private StatefulSessionBean bean;
- }
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ejb/build.xml b/appserver/tests/appserv-tests/devtests/deployment/ejb/build.xml
deleted file mode 100644
index 0302fc5..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ejb/build.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../config/common.xml">
-]>
-
-<project name="ejb" default="all" basedir=".">
-
-        &commonBuild;
-
-        <target name="private-all">
-                <ant dir="statelesshello" target="private-all">
-                        <property name="build" value="${build}/statelesshello"/>
-                </ant>
-                <!--ant dir="webservice" target="private-all">
-                        <property name="build" value="${build}/webservice"/>
-                </ant-->
-        </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/StatelessHelloTest.java b/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/StatelessHelloTest.java
deleted file mode 100644
index ce61b3c..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/StatelessHelloTest.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright (c) 2006, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package devtests.deployment.ejb.statelesshello.testng;
-
-import devtests.deployment.DeploymentTest;
-import org.apache.tools.ant.taskdefs.CallTarget;
-import org.apache.tools.ant.taskdefs.ExecTask;
-import org.apache.tools.ant.taskdefs.Property;
-import org.testng.annotations.Configuration;
-import org.testng.annotations.Test;
-
-/**
- * Illustrates an example test relying some of the inherited logic
- * in DeploymentTest.
- *
- * The general flow of this test is:
- *
- *   assemble the jars
- *   deploy the app and run the client
- *   redeploy the app and run the client
- *   undeploy the app
- *   deploy the app using JSR-88 and run the client
- *   redeploy the app using JSR-88 and run the client
- *   undeploy the app using JSR-88
- *
- * @author: tjquinn
- *
- */
-
-public class StatelessHelloTest extends DeploymentTest {
-
-    private int nextLogID = 0;
-
-    /** Creates a new instance of ExampleTest */
-    public StatelessHelloTest() {
-    }
-
-    /**
-     *Deploy the app using asadmin and run it, expecting a positive result.
-     */
-    @Test
-    public void deployWithAsadminAndRun() {
-        deploy();
-        runPositive("ejb/statelessejb Test asadmin deploy");
-    }
-
-    /**
-     *Redeploy and run after first test.
-     */
-    @Test(dependsOnMethods={"deployWithAsadminAndRun"})
-    public void redeployWithAsadminAndRun() {
-        redeploy();
-        runPositive("ejb/statelessejb Test asadmin redeploy");
-    }
-
-    /**
-     *Undeploy using asadmin after first deployment and redeployment.
-     */
-    @Test(alwaysRun=true,dependsOnMethods={"redeployWithAsadminAndRun"})
-    public void undeployAfterAsadminRuns() {
-        undeploy();
-    }
-
-    /**
-     *Deploy with JSR-88 and run.
-     */
-    @Test(dependsOnMethods={"undeployAfterAsadminRuns"})
-    public void deployWithJSR88AndRun() {
-        deployWithJSR88();
-        runPositive("ejb/statelessejb Test jsr88 deploy");
-    }
-
-    /**
-     *Stop using JSR-88 and attempt to run.
-     */
-    @Test(dependsOnMethods={"deployWithJSR88AndRun"})
-    public void stopAndRetry() {
-        stopWithJSR88();
-        runNegative("ejb/statelessejb Test jsr88 stopped state");
-    }
-
-    /**
-     *Start with JSR-88 and attempt to run.
-     */
-    @Test(dependsOnMethods={"stopAndRetry"})
-    public void startAndRetry() {
-        startWithJSR88();
-        runPositive("ejb/statelessejb Test jsr88 started state");
-    }
-
-    /**
-     *Stop, redeploy, and attempt to run (should fail).
-     */
-    @Test(dependsOnMethods={"startAndRetry"})
-    public void stopRedeployAndRetry() {
-        stopWithJSR88();
-        redeployWithJSR88();
-        runNegative("ejb/statelessejb Test jsr88 redeploy stop");
-    }
-
-    @Configuration(afterTestClass=true)
-    public void unsetup() {
-        undeployAtEnd();
-    }
-
-    public void undeployAtEnd() {
-        undeployWithJSR88();
-    }
-
-    protected void deployWithJSR88() {
-        project.executeTarget("deploy.jsr88");
-    }
-
-    protected void startWithJSR88() {
-        project.executeTarget("start.jsr88");
-    }
-
-    protected void stopWithJSR88() {
-        project.executeTarget("stop.jsr88");
-    }
-
-    protected void redeployWithJSR88() {
-        project.executeTarget("redeploy.jsr88");
-    }
-
-    protected void undeployWithJSR88() {
-        project.executeTarget("undeploy.jsr88");
-    }
-
-    protected void runPositive(String testTitle) {
-        run(testTitle, "run.positive");
-    }
-
-    protected void runNegative(String testTitle) {
-        run(testTitle, "run.negative");
-    }
-
-    protected void run(String testTitle, String runTarget) {
-        CallTarget target = new CallTarget();
-        target.setProject(project);
-        target.setTarget(runTarget);
-
-        Property logID = target.createParam();
-        Property description = target.createParam();
-        logID.setName("log.id");
-        logID.setValue(String.valueOf(nextLogID++));
-        description.setName("description");
-        description.setValue(testTitle);
-
-        target.execute();
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/build.xml b/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/build.xml
deleted file mode 100644
index 516645a..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/build.xml
+++ /dev/null
@@ -1,228 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="statelesshello" default="all" basedir=".">
-
-         &commonBuild;
-    <property name="archivedir" value="${build}/archives"/>
-
-        <property name="testName" value="StatelessHelloEjb"/>
-        <target name="prepare" depends="init">
-                <property name="portable.jar" value="${archivedir}/statelesshelloejb-portable.jar"/>
-                <property name="all.jar" value="${archivedir}/statelesshelloejb.jar"/>
-                <property name="deployplan.jar" value="${archivedir}/statelesshelloejb-plan.jar"/>
-                <mkdir dir="${build}" />
-                <mkdir dir="${archivedir}" />
-        </target>
-
-        <target name="compile" depends="prepare">
-                <javac srcdir="statelesshello" destdir="${build}">
-                    <classpath refid="gfv3.classpath"/>
-                </javac>
-        </target>
-
-        <target name="assemble" depends="compile">
-                <mkdir dir="${build}/META-INF"/>
-                <copy file="ejb-jar.xml" todir="${build}/META-INF"/>
-                <jar destfile="${portable.jar}" basedir="${build}" excludes="**/archives/**"/>
-                <copy file="sun-ejb-jar.xml" todir="${build}/META-INF" failonerror="false"/>
-                <jar destfile="${all.jar}" basedir="${build}" excludes="**/archives/**"/>
-                <jar destfile="${deployplan.jar}">
-                        <fileset dir="${basedir}" includes="sun-ejb-jar.xml" excludes="**/archives/**"/>
-                </jar>
-        </target>
-
-    <target name="deploy.asadmin" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="--retrieve ${archivedir} --name ${testName} ${all.jar}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.asadmin" depends="prepare">
-        <antcall target="common.redeploy.asadmin">
-            <param name="arg.list" value="--retrieve ${archivedir} --name ${testName} ${all.jar}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.asadmin">
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="${testName}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-    <target name="deploy.jsr88" depends="prepare">
-        <antcall target="common.deploy.jsr88">
-            <param name="arg.list" value="${portable.jar} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.jsr88" depends="prepare">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="redeploy"/>
-            <param name="arg.list" value="statelesshelloejb-portable ${portable.jar} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.jsr88">
-        <antcall target="common.undeploy.jsr88">
-            <param name="arg.list" value="statelesshelloejb-portable"/>
-        </antcall>
-    </target>
-
-    <target name="start.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="start"/>
-            <param name="arg.list" value="statelesshelloejb-portable"/>
-        </antcall>
-    </target>
-
-    <target name="stop.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="stop"/>
-            <param name="arg.list" value="statelesshelloejb-portable"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.autodeploy">
-    </target>
-
-    <target name="run" depends="run.positive"/>
-
-    <target name="run.positive" depends="init,setOrbPort">
-        <antcall target="declare-test">
-            <param name="description" value="${description} (server)"/>
-        </antcall>
-        <antcall target="runclient">
-            <param name="arg.list" value="true"/>
-            <param name="log.id" value="${log.id}"/>
-            <param name="tgtPort" value="${depltest.orbport}"/>
-        </antcall>
-        <antcall target="pingCluster">
-            <param name="state" value="true"/>
-            <param name="log.id" value="${log.id}"/>
-            <param name="testDet" value="${description}"/>
-        </antcall>
-    </target>
-
-    <target name="run.negative" depends="init,setOrbPort">
-        <antcall target="declare-test">
-            <param name="description" value="${description} (server)"/>
-        </antcall>
-        <antcall target="runclient">
-            <param name="arg.list" value="false"/>
-            <param name="log.id" value="${log.id}"/>
-            <param name="tgtPort" value="${depltest.orbport}"/>
-        </antcall>
-        <antcall target="pingCluster">
-            <param name="state" value="false"/>
-            <param name="log.id" value="${log.id}"/>
-            <param name="testDet" value="${description}"/>
-        </antcall>
-    </target>
-
-    <target name="pingCluster" if="doCluster">
-        <antcall target="declare-test">
-            <param name="description" value="${testDet} (cluster-inst1)"/>
-        </antcall>
-        <antcall target="runclient">
-            <param name="arg.list" value="${state}"/>
-            <param name="log.id" value="${log.id}"/>
-            <param name="tgtPort" value="${deploy.clusterinstance1.orbport}"/>
-        </antcall>
-    </target>
-
-    <target name="runclient" depends="init, setOrbPort">
-        <javac srcdir="standaloneclient" destdir="${build}">
-         <classpath refid="gfv3.classpath"/>
-        </javac>
-        <javaWithResult
-            fork="true"
-            failonerror="false"
-            jvm="${JAVA}"
-            classname="standaloneclient.HelloClient"
-            output="${build}/${log.id}.output.log"
-            resultproperty="result">
-
-            <jvmarg value="-Dorg.omg.CORBA.ORBInitialHost=${http.host}"/>
-            <jvmarg value="-Dorg.omg.CORBA.ORBInitialPort=${tgtPort}"/>
-
-            <classpath>
-                <path refid="gfv3.classpath"/>
-                <path location="${build}"/>
-                <path location="${archivedir}/StatelessHelloEjbClient.jar"/>
-            </classpath>
-
-            <arg line="${arg.list}"/>
-        </javaWithResult>
-
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/${log.id}.output.log"/>
-        </antcall>
-        </target>
-
-    <target name="private-all">
-        <antcall target="assemble"/>
-        <antcall target="deploy.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="1"/>
-            <param name="description" value="ejb/statelessejb Test asadmin deploy"/>
-        </antcall>
-
-        <antcall target="redeploy.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="2"/>
-            <param name="description" value="ejb/statelessejb Test asadmin redeploy"/>
-        </antcall>
-        <antcall target="undeploy.asadmin"/>
-
-        <antcall target="deploy.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="3"/>
-            <param name="description" value="ejb/statelessejb Test jsr88 deploy"/>
-        </antcall>
-
-        <antcall target="stop.jsr88"/>
-        <antcall target="run.negative">
-            <param name="log.id" value="4"/>
-            <param name="description" value="ejb/statelessejb Test jsr88 stopped state"/>
-        </antcall>
-
-        <antcall target="start.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="5"/>
-            <param name="description" value="ejb/statelessejb Test jsr88 started state"/>
-        </antcall>
-
-        <antcall target="stop.jsr88"/>
-        <antcall target="redeploy.jsr88"/>
-        <antcall target="run.negative">
-            <param name="log.id" value="6"/>
-            <param name="description" value="ejb/statelessejb Test jsr88 redeploy stop"/>
-        </antcall>
-
-        <antcall target="undeploy.jsr88"/>
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/ejb-jar.xml b/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/ejb-jar.xml
deleted file mode 100644
index 9ddc3e9..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/ejb-jar.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<ejb-jar version="2.1" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">
-  <display-name>Ejb1</display-name>
-  <enterprise-beans>
-    <session>
-      <ejb-name>MyStatelesshello</ejb-name>
-      <home>statelesshello.StatelesshelloHome</home>
-      <remote>statelesshello.Statelesshello</remote>
-      <ejb-class>statelesshello.StatelesshelloEJB</ejb-class>
-      <session-type>Stateless</session-type>
-      <transaction-type>Container</transaction-type>
-      <env-entry>
-        <env-entry-name>user</env-entry-name>
-        <env-entry-type>java.lang.String</env-entry-type>
-        <env-entry-value>scott</env-entry-value>
-      </env-entry>
-      <env-entry>
-        <env-entry-name>number</env-entry-name>
-        <env-entry-type>java.lang.Double</env-entry-type>
-        <env-entry-value>22.25</env-entry-value>
-      </env-entry>
-      <security-identity>
-        <use-caller-identity/>
-      </security-identity>
-    </session>
-  </enterprise-beans>
-  <assembly-descriptor>
-    <container-transaction>
-      <method>
-        <ejb-name>MyStatelesshello</ejb-name>
-        <method-intf>Remote</method-intf>
-        <method-name>sayStatelesshello</method-name>
-      </method>
-      <trans-attribute>Required</trans-attribute>
-    </container-transaction>
-    <container-transaction>
-      <method>
-        <ejb-name>MyStatelesshello</ejb-name>
-        <method-intf>Remote</method-intf>
-        <method-name>getUserDefinedException</method-name>
-      </method>
-      <trans-attribute>Required</trans-attribute>
-    </container-transaction>
-    <container-transaction>
-      <method>
-        <ejb-name>MyStatelesshello</ejb-name>
-        <method-intf>Remote</method-intf>
-        <method-name>isStatelesshello</method-name>
-      </method>
-      <trans-attribute>Required</trans-attribute>
-    </container-transaction>
-  </assembly-descriptor>
-</ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/standaloneclient/HelloClient.java b/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/standaloneclient/HelloClient.java
deleted file mode 100644
index 73dfb00..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/standaloneclient/HelloClient.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package standaloneclient;
-
-import java.util.*;
-import jakarta.ejb.EJBHome;
-import statelesshello.*;
-import javax.naming.*;
-import javax.rmi.PortableRemoteObject;
-import org.omg.CORBA.ORB;
-
-
-public class HelloClient {
-
-    public static void main(String[] args) {
-
-        boolean testPositive = (Boolean.valueOf(args[0])).booleanValue();
-        if(testPositive)
-            System.out.println("Test expects successful result");
-        else
-            System.out.println("Test expected to fail");
-        try {
-
-            Context ic = new InitialContext();
-
-            // create EJB using factory from container
-            java.lang.Object objref = ic.lookup("MyStatelesshello");
-
-            System.out.println("Looked up home!!");
-
-            StatelesshelloHome home =
-                (StatelesshelloHome) PortableRemoteObject.narrow(
-                    objref,
-                    StatelesshelloHome.class);
-            System.out.println("Narrowed home!!");
-
-            Statelesshello hr = home.create();
-            System.out.println("Got the EJB!!");
-
-            // invoke method on the EJB
-            System.out.println(hr.sayStatelesshello());
-            System.out.println(
-                "Client's sayStatelesshello() method succeeded\n");
-            try {
-
-                System.out.println(
-                    "Client now getting a User Defined Exception");
-                System.out.println(hr.getUserDefinedException());
-
-            } catch (StatelesshelloException he) {
-                System.out.println("Success!  Caught StatelesshelloException");
-                System.out.println(
-                    "Client's getUserDefinedException() method succeeded\n");
-
-            } catch (java.rmi.ServerException se) {
-                if (se.detail instanceof StatelesshelloException) {
-                    System.out.println(
-                        "Success!  Caught StatelesshelloException");
-                    System.out.println(
-                        "Client's getUserDefinedException() method succeeded\n");
-
-                } else {
-                    System.out.println("Failure!  Caught unasked for Exception");
-                    System.exit(-1);
-                }
-            }
-            System.out.println(
-                "Client is now trying to remove the session bean\n");
-            hr.remove();
-        } catch (NamingException ne) {
-            if(testPositive) {
-                System.out.println("Caught exception while initializing context : " +
-                                   ne.getMessage() + " \n");
-                System.exit(-1);
-            } else {
-                System.out.println("Recd exception as expected");
-            }
-        } catch (Exception re) {
-            if(testPositive) {
-                re.printStackTrace();
-                System.out.println( "Session beans could not be removed by the client.\n");
-                System.exit(-1);
-            } else {
-                System.out.println("Recd exception as expected");
-            }
-        }
-        System.out.println(
-            "Session bean was successfully removed by the client.\n");
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/statelesshello/Statelesshello.java b/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/statelesshello/Statelesshello.java
deleted file mode 100644
index ca7d5d5..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/statelesshello/Statelesshello.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package statelesshello;
-
-import jakarta.ejb.*;
-import java.rmi.Remote;
-import java.rmi.RemoteException;
-import java.io.Serializable;
-
-public interface Statelesshello extends EJBObject {
-
-    public String sayStatelesshello() throws RemoteException;
-    public String getUserDefinedException() throws RemoteException, StatelesshelloException;
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/statelesshello/StatelesshelloEJB.java b/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/statelesshello/StatelesshelloEJB.java
deleted file mode 100644
index 1d24e73..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/statelesshello/StatelesshelloEJB.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package statelesshello;
-
-import java.io.Serializable;
-import java.io.InputStream;
-import java.rmi.RemoteException;
-import jakarta.ejb.SessionBean;
-import jakarta.ejb.SessionContext;
-import jakarta.ejb.EJBException;
-import javax.naming.*;
-
-public class StatelesshelloEJB implements SessionBean {
-    private SessionContext sc;
-
-    public StatelesshelloEJB(){}
-
-    public void ejbCreate() throws RemoteException {
-        System.out.println("In ejbCreate !!");
-    }
-
-    public boolean isStatelesshello() throws EJBException {
-        return true;
-    }
-
-    public String sayStatelesshello() throws EJBException {
-
-
-        try {
-            System.err.println("URL: "+getClass().getResource("/statelesshello/"));
-            System.err.println("URL: "+getClass().getResource("/statelesshello/StatelesshelloEJB.class"));
-            InputStream is = getClass().getResourceAsStream("/statelesshello/StatelesshelloEJB.class");
-            System.err.println("Stream: " + is);
-            is.close();
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        }
-
-
-
-        Double d = null;
-        String name = null;
-        StringBuffer buffer = new StringBuffer("Statelesshello EJB - checked environment properties for user ");
-        System.out.println("StatelesshelloEJB is saying hello to user\n");
-        System.out.println("Now going forward with reading the environment properties\n");
-
-        try {
-            InitialContext ic = new InitialContext();
-            name = (String) ic.lookup("java:comp/env/user");
-            buffer.append(name);
-            buffer.append("\nand for number which is = ");
-            d = (Double) ic.lookup("java:comp/env/number");
-            buffer.append(d);
-            buffer.append("\n");
-        } catch(NamingException e) {
-            e.printStackTrace();
-            throw new EJBException(e.getMessage());
-        }
-        if(d == null) {
-            throw new EJBException("Wrong value for environment property");
-        }
-        System.out.println(buffer);
-        return new String(buffer);
-    }
-
-    public String getUserDefinedException() throws RemoteException, StatelesshelloException {
-
-        System.out.println("Throwing a User Defined Exception");
-        throw new StatelesshelloException("test exception");
-
-    }
-
-
-    public void setSessionContext(SessionContext sc) {
-
-        this.sc = sc;
-    }
-
-    public void ejbRemove() throws RemoteException {}
-
-    public void ejbActivate() {}
-
-    public void ejbPassivate() {}
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/statelesshello/StatelesshelloException.java b/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/statelesshello/StatelesshelloException.java
deleted file mode 100644
index c89fd37..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/statelesshello/StatelesshelloException.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package statelesshello;
-
-import java.rmi.RemoteException;
-
-public class StatelesshelloException extends Exception {
-
-    public StatelesshelloException(String str) {
-        super(str);
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/statelesshello/StatelesshelloHome.java b/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/statelesshello/StatelesshelloHome.java
deleted file mode 100644
index 1513c0b..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/statelesshello/StatelesshelloHome.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package statelesshello;
-
-
-import java.io.Serializable;
-import java.rmi.Remote;
-import java.rmi.RemoteException;
-import jakarta.ejb.EJBHome;
-import jakarta.ejb.CreateException;
-
-
-public interface StatelesshelloHome extends EJBHome {
-
-    public Statelesshello create () throws RemoteException, CreateException;
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/sun-ejb-jar.xml b/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/sun-ejb-jar.xml
deleted file mode 100644
index ece1511..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ejb/statelesshello/sun-ejb-jar.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 EJB 2.1//EN" "http://www.sun.com/software/sunone/appserver/dtds/sun-ejb-jar_2_1-0.dtd">
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<sun-ejb-jar>
-  <enterprise-beans>
-    <name>Ejb1</name>
-    <ejb>
-      <ejb-name>MyStatelesshello</ejb-name>
-      <jndi-name>MyStatelesshello</jndi-name>
-    </ejb>
-  </enterprise-beans>
-</sun-ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ejb/webservice/build.xml b/appserver/tests/appserv-tests/devtests/deployment/ejb/webservice/build.xml
deleted file mode 100644
index eaa7358..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ejb/webservice/build.xml
+++ /dev/null
@@ -1,224 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="HelloServiceWS" default="all" basedir=".">
-
-    &commonBuild;
-    <property name="archivedir" value="${build}/archives"/>
-
-    <property name="testName" value="SayHelloWS"/>
-    <target name="prepare" depends="init">
-                <property name="wsdl" value="${build}/META-INF/wsdl"/>
-                <mkdir dir="${build}" />
-                <mkdir dir="${wsdl}"/>
-                <property name="portable.jar" value="${archivedir}/sayhello-portable.jar"/>
-                <property name="all.jar" value="${archivedir}/sayhello.jar"/>
-                <property name="deployplan.jar" value="${archivedir}/sayhello-deployplan.jar"/>
-    </target>
-
-    <target name="compile" depends="prepare">
-                <javac srcdir="helloservice" destdir="${build}">
-                 <classpath refid="gfv3.classpath"/>
-                </javac>
-                <echo message="invoking wscompile to generate wsdl file"/>
-                <exec executable="${WSCOMPILE}">
-                        <arg line="-define config-interface.xml -d ${build} -nd ${wsdl} -classpath ${build} -mapping ${build}/mapping.xml"/>
-                 </exec>
-    </target>
-
-    <target name="assemble" depends="compile">
-                <copy file="ejb-jar.xml" todir="${build}/META-INF"/>
-                <copy file="webservices.xml" todir="${build}/META-INF"/>
-                <jar destfile="${portable.jar}" basedir="${build}"/>
-                <copy file="sun-ejb-jar.xml" todir="${build}/META-INF" failonerror="false"/>
-                <jar destfile="${all.jar}" basedir="${build}"/>
-                <jar destfile="${deployplan.jar}">
-                        <fileset dir="${basedir}" includes="sun-ejb-jar.xml"/>
-                </jar>
-    </target>
-
-    <target name="deploy.asadmin" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="--name ${testName} ${all.jar}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-        <echo message="Create client webservices artifacts"/>
-        <exec executable="${WSCOMPILE}">
-            <arg line="-gen:client -keep -d ${build} -classpath ${build} config-interface.xml"/>
-        </exec>
-    </target>
-
-    <target name="redeploy.asadmin" depends="prepare">
-        <antcall target="common.redeploy.asadmin">
-            <param name="arg.list" value="--name ${testName} ${all.jar}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-        <echo message="Create client webservices artifacts"/>
-        <exec executable="${WSCOMPILE}">
-            <arg line="-gen:client -keep -d ${build} -classpath ${build} config-interface.xml"/>
-        </exec>
-    </target>
-
-    <target name="undeploy.asadmin">
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="${testName}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.jsr88" depends="prepare">
-        <antcall target="common.deploy.jsr88">
-            <param name="arg.list" value="${portable.jar} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.jsr88" depends="prepare">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="redeploy"/>
-            <param name="arg.list" value="sayhello-portable ${portable.jar} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.jsr88">
-        <antcall target="common.undeploy.jsr88">
-            <param name="arg.list" value="sayhello-portable"/>
-        </antcall>
-    </target>
-
-    <target name="start.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="start"/>
-            <param name="arg.list" value="sayhello-portable"/>
-        </antcall>
-    </target>
-
-    <target name="stop.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="stop"/>
-            <param name="arg.list" value="sayhello-portable"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.autodeploy">
-    </target>
-
-    <target name="run" depends="run.positive"/>
-
-    <target name="run.positive" depends="setHttpPort">
-        <antcall target="common.run.positive">
-            <param name="link" value="ejb/sayhello"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="run.negative" depends="setHttpPort">
-        <antcall target="common.run.negative">
-            <param name="link" value="ejb/sayhello"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="runclient" depends="prepare">
-        <javac srcdir="staticstubclient" destdir="${build}">
-            <classpath>
-                <path refid="gfv3.classpath"/>
-                <pathelement location="${junit.jar}"/>
-            </classpath>
-        </javac>
-
-        <javaWithResult
-            fork="true"
-            failonerror="false"
-            jvm="${JAVA}"
-            classname="staticstubclient.SayHelloClient"
-            output="${build}/${log.id}.output.log"
-            resultproperty="result">
-
-
-            <classpath>
-               <path refid="gfv3.classpath"/>
-            </classpath>
-
-            <arg line="${arg.list}"/>
-        </javaWithResult>
-
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/${log.id}.output.log"/>
-        </antcall>
-    </target>
-
-    <target name="private-all" unless="EE">
-        <antcall target="assemble"/>
-        <antcall target="deploy.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="1"/>
-            <param name="desc" value="ejb/webservice Test asadmin deploy"/>
-        </antcall>
-
-        <antcall target="deploy.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="2"/>
-            <param name="desc" value="ejb/webservice Test asadmin redeploy"/>
-        </antcall>
-        <antcall target="undeploy.asadmin"/>
-
-<!--
-        <antcall target="deploy.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="3"/>
-            <param name="desc" value="ejb/webservice Test jsr88 deploy"/>
-        </antcall>
-
-        <antcall target="stop.jsr88"/>
-        <antcall target="run.negative">
-            <param name="log.id" value="4"/>
-            <param name="desc" value="ejb/webservice Test jsr88 stopped state"/>
-        </antcall>
-
-        <antcall target="start.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="5"/>
-            <param name="desc" value="ejb/webservice Test jsr88 started state"/>
-        </antcall>
-
-        <antcall target="stop.jsr88"/>
-        <antcall target="redeploy.jsr88"/>
-        <antcall target="run.negative">
-            <param name="log.id" value="6"/>
-            <param name="desc" value="ejb/webservice Test jsr88 redeploy stop"/>
-        </antcall>
--->
-
-        <!--antcall target="start.jsr88"/>
-            <param name="desc" value="ejb/webservice Test jsr88 stop-redeploy-start"/>
-        <antcall target="run.positive"/>
-
-            <param name="desc" value="ejb/webservice Test jsr88 redeploy start"/>
-        <antcall target="redeploy.jsr88"/>
-        <antcall target="run.positive"/-->
-<!--
-        <antcall target="undeploy.jsr88"/>
--->
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ejb/webservice/config-interface.xml b/appserver/tests/appserv-tests/devtests/deployment/ejb/webservice/config-interface.xml
deleted file mode 100644
index 894789a..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ejb/webservice/config-interface.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<configuration
-  xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
-  <service
-      name="SayHelloService"
-      targetNamespace="urn:DeploymentWebServiceTest"
-      typeNamespace="urn:DeploymentWebServiceTest"
-      packageName="helloservice">
-      <interface name="helloservice.SayHello"/>
-  </service>
-</configuration>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ejb/webservice/ejb-jar.xml b/appserver/tests/appserv-tests/devtests/deployment/ejb/webservice/ejb-jar.xml
deleted file mode 100644
index dc779ed..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ejb/webservice/ejb-jar.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<ejb-jar version="2.1" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">
-
-        <display-name>SayHelloJAR</display-name>
-        <enterprise-beans>
-                <session>
-                        <ejb-name>SayHelloEJB</ejb-name>
-                        <service-endpoint>helloservice.SayHello</service-endpoint>
-                        <ejb-class>helloservice.SayHelloEJB</ejb-class>
-                        <session-type>Stateless</session-type>
-                        <transaction-type>Container</transaction-type>
-                </session>
-        </enterprise-beans>
-</ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ejb/webservice/helloservice/SayHello.java b/appserver/tests/appserv-tests/devtests/deployment/ejb/webservice/helloservice/SayHello.java
deleted file mode 100644
index 5477ce5..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ejb/webservice/helloservice/SayHello.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package helloservice;
-
-import java.rmi.Remote;
-import java.rmi.RemoteException;
-
-public interface SayHello  extends Remote {
-        public String sayHello(String name) throws RemoteException;
-}
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ejb/webservice/helloservice/SayHelloEJB.java b/appserver/tests/appserv-tests/devtests/deployment/ejb/webservice/helloservice/SayHelloEJB.java
deleted file mode 100644
index 5f25a8a..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ejb/webservice/helloservice/SayHelloEJB.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package helloservice;
-
-import jakarta.ejb.*;
-import java.rmi.RemoteException;
-
-public class SayHelloEJB implements SessionBean {
-
-        private SessionContext sc;
-
-        public SayHelloEJB() {}
-
-        public void ejbCreate() throws CreateException {}
-
-        public String sayHello(String s) throws RemoteException {
-                return "Hello EJB returns your Hello : " + s;
-        }
-
-        public void setSessionContext(SessionContext sc) {
-                                this.sc = sc;
-        }
-
-        public void ejbRemove() throws RemoteException {}
-        public void ejbActivate() {}
-        public void ejbPassivate() {}
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ejb/webservice/staticstubclient/SayHelloClient.java b/appserver/tests/appserv-tests/devtests/deployment/ejb/webservice/staticstubclient/SayHelloClient.java
deleted file mode 100644
index 7e6b0e0..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ejb/webservice/staticstubclient/SayHelloClient.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package staticstubclient;
-
-import javax.xml.rpc.Stub;
-import helloservice.*;
-
-public class SayHelloClient {
-
-    public static void main(String[] args) {
-
-        System.out.println("Endpoint address = " + args[0]);
-                boolean testPositive = (Boolean.valueOf(args[1])).booleanValue();
-        try {
-            Stub stub = createProxy();
-            stub._setProperty
-              (javax.xml.rpc.Stub.ENDPOINT_ADDRESS_PROPERTY, args[0]);
-                        SayHello hello = (SayHello)stub;
-            System.out.println(hello.sayHello("Hi There ejb endpoint !!!"));
-        } catch (Exception ex) {
-                    if(testPositive) {
-                                ex.printStackTrace();
-                                System.exit(-1);
-                    } else {
-                                System.out.println("Exception recd as expected");
-                    }
-                }
-                System.exit(0);
-    }
-
-    private static Stub createProxy() {
-        return (Stub) (new SayHelloService_Impl().getSayHelloPort());
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ejb/webservice/sun-ejb-jar.xml b/appserver/tests/appserv-tests/devtests/deployment/ejb/webservice/sun-ejb-jar.xml
deleted file mode 100644
index a8005c8..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ejb/webservice/sun-ejb-jar.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 EJB 2.1//EN" "http://www.sun.com/software/sunone/appserver/dtds/sun-ejb-jar_2_1-0.dtd">
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<sun-ejb-jar>
-        <enterprise-beans>
-                <name>SayHelloJAR</name>
-                <ejb>
-                        <ejb-name>SayHelloEJB</ejb-name>
-                        <jndi-name>SayHelloEJB</jndi-name>
-                        <webservice-endpoint>
-                                <port-component-name>SayHelloPort</port-component-name>
-                                <endpoint-address-uri>ejb/sayhello</endpoint-address-uri>
-                        </webservice-endpoint>
-                </ejb>
-        </enterprise-beans>
-</sun-ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ejb/webservice/webservices.xml b/appserver/tests/appserv-tests/devtests/deployment/ejb/webservice/webservices.xml
deleted file mode 100644
index a84a554..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/ejb/webservice/webservices.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<webservices xmlns="http://java.sun.com/xml/ns/j2ee"
-      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
-        http://www.ibm.com/webservices/xsd/j2ee_web_services_1_1.xsd"
-      version="1.1">
-  <description>desc</description>
-  <webservice-description>
-    <webservice-description-name>A WebService EJB that says Hello</webservice-description-name>
-    <wsdl-file>META-INF/wsdl/SayHelloService.wsdl</wsdl-file>
-    <jaxrpc-mapping-file>mapping.xml</jaxrpc-mapping-file>
-    <port-component>
-      <description>port component description</description>
-      <port-component-name>SayHelloPort</port-component-name>
-      <wsdl-port xmlns:tns="urn:DeploymentWebServiceTest">tns:SayHelloPort </wsdl-port>
-      <service-endpoint-interface>helloservice.SayHello</service-endpoint-interface>
-      <service-impl-bean>
-        <ejb-link>SayHelloEJB</ejb-link>
-      </service-impl-bean>
-    </port-component>
-  </webservice-description>
-</webservices>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/ejb30/ear/mdb/webclient/build.xml b/appserver/tests/appserv-tests/devtests/deployment/ejb30/ear/mdb/webclient/build.xml
index 76a2c05..0dd99cb 100644
--- a/appserver/tests/appserv-tests/devtests/deployment/ejb30/ear/mdb/webclient/build.xml
+++ b/appserver/tests/appserv-tests/devtests/deployment/ejb30/ear/mdb/webclient/build.xml
@@ -90,7 +90,7 @@
             <jvmarg value="-Dorg.omg.CORBA.ORBInitialPort=${depltest.orbport}"/>
 
             <classpath>
-                <path location="${inst}/lib/j2ee.jar"/>
+                <path location="${inst}/lib/javaee.jar"/>
                 <path location="${build}"/>
             </classpath>
 
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/apitests/TestClient.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/apitests/TestClient.java
deleted file mode 100644
index eac1fed..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/apitests/TestClient.java
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package devtests.deployment.jsr88.apitests;
-
-import java.io.*;
-import java.util.*;
-import javax.enterprise.deploy.spi.*;
-import javax.enterprise.deploy.spi.status.ProgressEvent;
-import javax.enterprise.deploy.spi.status.DeploymentStatus;
-import javax.enterprise.deploy.shared.ModuleType;
-import devtests.deployment.util.JSR88Deployer;
-
-public class TestClient {
-
-        /**
-         *system property (integer) specifying the sleep delay to introduce into ProgressobjectImpl event notification
-         *to make sure a possible race condition does not occur.  The property also has a default value.
-         */
-        private final String SLEEP_TIME_PROPERTY_NAME = "devtests.sleepDurationForProgressObjectImplRaceTest";
-        private final Integer SLEEP_TIME_DEFAULT = new Integer(4000);
-
-        JSR88Deployer depl = null;
-
-    private void initDeployer(String[] args) throws Exception {
-        log("Getting access to JSR88 deployer: using URI = " + args[1]);
-        depl = new JSR88Deployer(args[1], args[2], args[3]);
-    }
-
-    private boolean checkIfAppsArePresent(TargetModuleID[] reportedApps, HashMap expectedApps) {
-        for(int i=0; i<reportedApps.length; i++) {
-            String modId = reportedApps[i].getModuleID();
-            log("Reported application  name = " + modId);
-            if(expectedApps.containsKey(modId))
-                expectedApps.remove(modId);
-        }
-        if(expectedApps.size() != 0) {
-            log("Not all expected applications have been reported");
-            return(false);
-        }
-        log("All expected applications have been reported");
-        return(true);
-    }
-
-    private boolean checkReportedApps(String[] args, Boolean state)
-                                                    throws Exception {
-        log("Checking if application names reported are valid");
-
-        HashMap set = new HashMap();
-        set.put(args[4], "app");
-        set.put(args[5], "app");
-        set.put(args[6], "app");
-
-        TargetModuleID[] apps = depl.getAllApplications(state);
-        log("Total count = " + apps.length);
-        return(checkIfAppsArePresent(apps, set));
-    }
-
-    private int testProgressObjectImplRace(String[] args) throws Exception {
-        /*
-         *This test works like testStartStop except that it uses only one application and sets the system
-         *property to introduce a sleep into listener notification to test race conditions.  See ProgressObjectImpl
-         *for more details on the possible problem and how the test probes for it.
-         */
-        String appOfInterest = args[4];
-        boolean appIsRunning = true;
-
-        try {
-            /*
-             *The system property to control the test code in ProgressObjectImpl could have been set on the
-             *command line that ran this test.  If not, use the default value.
-             */
-            Integer sleepTime = Integer.getInteger(SLEEP_TIME_PROPERTY_NAME, SLEEP_TIME_DEFAULT);
-            log("ProgressObjectImpl race test is using " + SLEEP_TIME_PROPERTY_NAME + " = " + sleepTime);
-
-            /*
-             *Stop the first application specified on the command line.
-             */
-            log("Stopping application " + appOfInterest);
-            if (depl.stop(appOfInterest) == null) {
-                log("Failed to stop " + appOfInterest);
-                return -1;
-            }
-            log("Stop request completed");
-
-            /*
-             *Wait a while for the stop operation to complete and the events to be delivered.
-             */
-            try {
-                Thread.currentThread().sleep(sleepTime.intValue());
-            } catch (InterruptedException ie) {
-                log("ProgressObjectImpl race test was interrupted during a sleep waiting for the app to stop.");
-                return -1;
-            }
-
-            appIsRunning = false;
-
-            /*
-             *Now that the app is stopped, start it and pay attention to the events.
-             */
-            log("Starting application " + appOfInterest);
-            depl.clearReceivedEvents();
-            if (depl.start(appOfInterest, sleepTime.intValue() / 2 ) == null) {
-                log("Failed to start " + appOfInterest);
-                return -1;
-            }
-
-            appIsRunning = true;
-
-            /*
-             *Wait before retrieving the events to give the start operation time to complete.
-             */
-
-            try {
-                Thread.currentThread().sleep(sleepTime.intValue());
-            } catch (InterruptedException ie) {
-                throw new RuntimeException("TestClient was interrupted waiting for start operation events to accumulate before retrieving them.", ie);
-            }
-
-            log("About to retrieve events");
-            ProgressEvent receivedEvents[] = depl.getReceivedEvents();
-
-            /*
-             *We expect two events, one corresponding to the start operation entering the "running" state and
-             *one for the operation completing.  If the race condition has occurred, then we won't see both of
-             *the events.  We're going to look at the first one, expecting it to be the "running" event.
-             */
-            if (receivedEvents.length < 2) {
-                log("ProgressObjectImpl race test expected two events (running and completed), but found " + receivedEvents.length + ".");
-                if (receivedEvents.length == 1) {
-                    log("...and the event that was recorded was " + receivedEvents[0].getDeploymentStatus().getMessage());
-                }
-                return -1;
-            }
-
-            ProgressEvent event = receivedEvents[0];
-            DeploymentStatus dStatus = event.getDeploymentStatus();
-
-            if ( ! dStatus.isRunning()) {
-                log("ProgressObjectImpl race test's first recorded event was not what was expected; expected running but found " + dStatus.getMessage());
-                return -1;
-            } else {
-                log("ProgressObjectImpl race test completed normally.");
-                return 0;
-            }
-
-        } finally {
-            /*
-             *Restart the application if it isn't running.
-             */
-            if ( ! appIsRunning) {
-                log("Restarting application " + appOfInterest);
-                if (depl.start(appOfInterest) == null) {
-                    log("Failed to restart application " + appOfInterest);
-                    return -1;
-                }
-            }
-        }
-    }
-
-    private int testStartStop(String[] args) {
-        try {
-            log("Stopping all Applications");
-            for(int i=4; i<7; i++) {
-                if(depl.stop(args[i]) == null) {
-                    log("Failed to stop " + args[i]);
-                    return(-1);
-                }
-            }
-            boolean ret = checkReportedApps(args, Boolean.FALSE);
-            if(!ret)
-                return(-1);
-            log("Starting all Applications");
-            for(int j=4; j<7; j++) {
-                if (depl.start(args[j]) == null) {;
-                    log("Failed to start " + args[j]);
-                    return(-1);
-                }
-            }
-            ret = checkReportedApps(args, Boolean.TRUE);
-            if(!ret)
-                return(-1);
-        } catch(Exception e) {
-            log("testStartStop recd exception : " + e.getMessage());
-            return(-1);
-        }
-        return(0);
-    }
-
-    private int getModulesByType(String args[], ModuleType type, Boolean state) {
-        log("Getting list of Applications with type = " + type.toString());
-        log("Required running state = " + state);
-        try {
-            TargetModuleID[] apps = depl.getApplications(type, state);
-            log("Total count = " + apps.length);
-
-            HashMap set = new HashMap();
-            set.put(args[4], "app");
-
-            boolean ret = checkIfAppsArePresent(apps, set);
-            if(!ret)
-                return(-1);
-        } catch(Exception e) {
-            log("getModulesByType recd exception : " + e.getMessage());
-            return(-1);
-        }
-        return(0);
-    }
-
-    private int testEmptyModule() {
-        try {
-            TargetModuleID[] apps = depl.getApplications(ModuleType.WAR, null);
-            if(apps.length != 0) {
-                log("# of WARs expected = 0");
-                log("# of WARs reported = " + apps.length);
-                return(-1);
-            }
-            apps = depl.getApplications(ModuleType.EJB, null);
-            if(apps.length != 0) {
-                log("# of EJB-JARs expected = 0");
-                log("# of EJB-JARs reported = " + apps.length);
-                return(-1);
-            }
-            apps = depl.getApplications(ModuleType.EAR, null);
-            if(apps.length != 0) {
-                log("# of EARs expected = 0");
-                log("# of EARs reported = " + apps.length);
-                return(-1);
-            }
-        } catch(Exception e) {
-            log("testEmptyModule recd exception : " + e.getMessage());
-            return(-1);
-        }
-        return(0);
-    }
-
-    public static void main(String[] args) {
-        int exitVal = 0;
-        TestClient client = new TestClient();
-        try {
-            int testCase = (new Integer(args[0])).intValue();
-            client.initDeployer(args);
-            switch(testCase) {
-                case 1 :
-                    exitVal = client.getModulesByType(args,ModuleType.WAR,null);
-                    break;
-                case 2 :
-                    exitVal = client.getModulesByType(args,ModuleType.EJB,null);
-                    break;
-                case 3 :
-                    exitVal = client.getModulesByType(args,ModuleType.EAR,null);
-                    break;
-                case 4 :
-                    exitVal = client.testStartStop(args);
-                    break;
-                case 5 :
-                    exitVal = client.testEmptyModule();
-                    break;
-                case 6 :
-                        exitVal = client.testProgressObjectImplRace(args);
-                        break;
-                default:
-                    log("Wrong test number given !!!");
-                    exitVal = -1;
-                    break;
-            }
-        } catch (Exception e) {
-            log("Caught Exception = " + e.getMessage());
-            System.exit(-1);
-        }
-        System.exit(exitVal);
-    }
-
-    private static void log(String message) {
-        System.out.println("[JSR88APITest]:: " + message);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/apitests/TestJSR88Concurrency.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/apitests/TestJSR88Concurrency.java
deleted file mode 100644
index c046f47..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/apitests/TestJSR88Concurrency.java
+++ /dev/null
@@ -1,408 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-/*
- * TestJSR88Concurrency.java
- *
- * Created on September 19, 2006, 3:52 PM
- *
- */
-
-package devtests.deployment.jsr88.apitests;
-
-import com.sun.enterprise.deployapi.SunDeploymentFactory;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicBoolean;
-import javax.enterprise.deploy.shared.ModuleType;
-import javax.enterprise.deploy.spi.DeploymentManager;
-import javax.enterprise.deploy.spi.Target;
-import javax.enterprise.deploy.spi.TargetModuleID;
-import javax.enterprise.deploy.spi.exceptions.DeploymentManagerCreationException;
-import javax.enterprise.deploy.spi.exceptions.TargetException;
-import javax.enterprise.deploy.spi.factories.DeploymentFactory;
-
-/**
- *Tests concurrent use of the same deployment connection to the back-end.
- *<p>
- *You can use this program to create multiple threads in the same JVM (all
- *running the same task) or to run multiple copies of the program in different
- *JVMs but synchronized.
- *<p>
- *arguments:
- * --host <host>
- * --port <port>
- * --username <username>
- * --password <password>
- * --operation <operation>[*<n>]
- * --startTime <testStartTime> (as H:mm:ss)
- * --delay <delayTime) (in ms)
- * --secure <true or false>
- *<p>
- *where <operation> can be getTargets, getApps, loopGetTargets");
- *  n (default=1) is the number of concurrent threads to share the connection at once
- *  testStartTime is a time in the current day, specified as [H]H:mm:ss  default is to start immediately
- *<p>
- *The getTargets and getApps tasks invoke the corresponding back-end method only
- *once in each thread.  The loopGetTargets is more likely to induce problems if
- *there are race conditions somewhere in the code path, since it invokes the
- *getTargets method multiple times from each thread.
- *<p>
- *The system property sleep.time, if set, is used as the delay between when
- *multiple threads are started.  This is normally not needed but could be used
- *to stagger the requests from the threads that are started to see if doing
- *so avoids any race conditon that is revealed by starting the threads
- *without delay.
- *
- *The classpath must include:
- *  javaee.jar
- *  appserv-deployment-client.jar
- *  appserv-admin.jar
- *
- * @author tjquinn
- */
-public class TestJSR88Concurrency {
-
-    private DeploymentFactory factory;
-
-    private DeploymentManager manager;
-
-    private static final String HOST = "--host";
-    private static final String PORT = "--port";
-    private static final String USERNAME = "--username";
-    private static final String PASSWORD = "--password";
-    private static final String OPERATION = "--operation";
-    private static final String START_TIME = "--startTime";
-    private static final String DELAY = "--delay";
-    private static final String SECURE = "--secure";
-    private static final String TIMEOUT = "--timeout";
-
-    /** initialization info for the command-line option names and defaults, if any */
-    private static final String[][] optionsAndDefaults = new String[][]
-        { {HOST, "localhost"},
-          {PORT, "4848"},
-          {USERNAME, "admin"},
-          {PASSWORD, "adminadmin"},
-          {OPERATION, null}, // no default value
-          {START_TIME, null}, // no default value
-          {DELAY, "0"},
-          {SECURE, "false"},
-          {TIMEOUT, "10000"} // 10 seconds
-    };
-
-    /* command-line option names and values */
-    private HashMap<String,String> options;
-
-    /* used to control how many iterations of the loopGetTargets will run */
-    private static final int LOOP_MAX = 100;
-
-    /**
-     * Creates a new instance of TestJSR88Concurrency
-     */
-    public TestJSR88Concurrency() {
-    }
-
-    /**
-     * @param args the command line arguments
-     */
-    public static void main(String[] args) {
-        try {
-            new TestJSR88Concurrency().run(args);
-        } catch (Throwable thr) {
-            thr.printStackTrace();
-            System.exit(1);
-        }
-    }
-
-    private void run(String[] args) throws DeploymentManagerCreationException, TargetException, InterruptedException, ParseException, UserException {
-        try {
-            prepareArgs(args);
-            factory = initFactory();
-            manager = initManager(
-                    getHost(),
-                    getPort(),
-                    getUsername(),
-                    getPassword(),
-                    options.get(SECURE).equalsIgnoreCase("true"));
-
-            waitForTargetTime();
-
-            processFunction(getOperation());
-        } catch (UserException ue) {
-            System.err.println("User error: " + ue.getMessage());
-            System.exit(1);
-        }
-
-    }
-
-    private void waitForTargetTime() throws ParseException, InterruptedException {
-        if (getTargetTimeText() == null) {
-            System.out.println("No start delay specified; continuing immediately");
-            return;
-        }
-        SimpleDateFormat targetTimeFormat = new SimpleDateFormat("H:mm:ss");
-        Calendar targetTime = Calendar.getInstance();
-        targetTime.setTime(targetTimeFormat.parse(getTargetTimeText()));
-
-        Calendar now = Calendar.getInstance();
-        targetTime.set(now.get(Calendar.YEAR), now.get(Calendar.MONTH), now.get(Calendar.DAY_OF_MONTH));
-        System.out.println("Currently it is " + now.getTime().toString());
-        System.out.println("Waiting until   " + targetTime.getTime().toString());
-        Thread.sleep(targetTime.getTimeInMillis() - System.currentTimeMillis());
-        System.out.println("Proceeding");
-    }
-
-    private void prepareArgs(String[] args) throws UserException {
-        options = initOptionsMap();
-
-        int i = 0;
-        while (i < args.length) {
-            if (options.containsKey(args[i])) {
-                options.put(args[i], getRequiredOptionValue(args, ++i));
-            } else if (args[i].startsWith("--")) {
-                throw new UserException("Unrecognized option " + args[i]);
-            }
-            i++;
-        }
-
-        ensureRequiredInfoSupplied();
-    }
-
-    private void ensureRequiredInfoSupplied() throws UserException {
-        if (getOperation() == null) {
-            throw new UserException("Expected --operation <operation[*n]> but none was found");
-        }
-    }
-
-    private HashMap<String,String> initOptionsMap() {
-        HashMap<String,String> result = new HashMap<String,String>();
-        for (String[] optionAndValue : optionsAndDefaults) {
-            result.put(optionAndValue[0], optionAndValue[1]);
-        }
-        return result;
-    }
-
-    private String getRequiredOptionValue(String[] args, int valuePosition) throws UserException {
-        if ((valuePosition >= args.length) || (args[valuePosition].startsWith("--"))) {
-            throw new UserException("No value available for " + args[valuePosition - 1]);
-        }
-        return args[valuePosition];
-    }
-
-    private void usage() {
-        System.out.println("devtests.deployment.jsr88.apitests.TestJSR88Concurrency --host <host> --port <port> --username <username> --password <password> --operation <operation>[*<n>] --startTime testStartTime (as H:mm:ss) --delay <delay-in-ms> --secure true/false");
-        System.out.println("  where <operation> can be getTargets, getApps, loopGetTargets");
-        System.out.println("  n (default=1) is the number of concurrent threads to share the connection at once");
-        System.out.println("  testStartTime is a time in the current day, specified as [H]H:mm:ss  default is to start immediately");
-        System.out.println("  delay is the number of milliseconds to wait between starting threads");
-    }
-
-    private DeploymentFactory initFactory() {
-        /*
-         *We know we are testing our factory, so just instantiate it.
-         */
-        return new SunDeploymentFactory();
-    }
-
-    private DeploymentManager initManager(
-            String host,
-            String port,
-            String username,
-            String password,
-            boolean secure) throws DeploymentManagerCreationException {
-        String url = "deployer:Sun:AppServer::" + host + ":" + port + getConnectionStringSuffix(secure);
-        return factory.getDeploymentManager(url, username, password);
-    }
-
-    private void processFunction(String function) throws TargetException, InterruptedException {
-        /*
-         *The star, if present, separates the operation name from the number of
-         *threads on which to run that operation.
-         */
-        String[] pieces = function.split("\\*");
-        long delay = getDelay();
-        int parallelThreadCount = 1;
-        if (pieces.length > 1) {
-            parallelThreadCount = Integer.parseInt(pieces[1]);
-        }
-        if (parallelThreadCount == 1) {
-            performFunction(pieces[0], 1);
-        } else {
-            Thread[] threads = new Thread[parallelThreadCount];
-            AtomicBoolean[] threadOK = new AtomicBoolean[parallelThreadCount];
-            for (int i = 0; i < parallelThreadCount; i++) {
-                threadOK[i] = new AtomicBoolean();
-                threads[i] = new Thread(new Runner(pieces[0], i, threadOK[i]));
-                threads[i].start();
-                /*
-                 *No need to wait if we just started the last thread.
-                 */
-                if (delay != 0 && i < parallelThreadCount - 1) {
-                    Thread.currentThread().sleep(delay);
-                }
-            }
-            boolean allThreadsOK = true;
-            for (int i = 0; i < parallelThreadCount; i++) {
-                Thread t = threads[i];
-                t.join(getTimeout());
-                allThreadsOK &= threadOK[i].get();
-            }
-
-            if ( ! allThreadsOK) {
-                throw new RuntimeException("At least one thread failed");
-            }
-        }
-    }
-
-    private void printTargets(int threadID) {
-
-        System.out.println("[" + threadID + "]Targets:");
-        for (Target t : getTargets()) {
-            System.out.println("[" + threadID + "]  " + t.getName());
-        }
-        System.out.println();
-    }
-
-    private Target[] getTargets() {
-        return manager.getTargets();
-    }
-
-    private TargetModuleID[] getApps() throws TargetException {
-        Target[] targets = getTargets();
-        ModuleType[] types = new ModuleType[] {ModuleType.EJB, ModuleType.EAR, ModuleType.CAR, ModuleType.RAR};
-        List<TargetModuleID> result = new ArrayList<TargetModuleID>();
-        for (ModuleType mt : types) {
-            result.addAll(Arrays.asList(manager.getAvailableModules(mt, targets)));
-        }
-        return result.toArray(new TargetModuleID[result.size()]);
-    }
-
-    private void printApps(int threadID) throws TargetException {
-        System.out.println("[" + threadID + "]Applications:");
-        for (TargetModuleID id : getApps()) {
-            System.out.println("[" + threadID + "]  " + id.getModuleID());
-        }
-        System.out.println("[" + threadID + "]");
-    }
-
-    private void loopGetTargets() {
-        getTargets(); // to warm up the connection
-        long startTime = System.currentTimeMillis();
-        for (int i = 0; i < LOOP_MAX; i++) {
-            getTargets();
-        }
-        System.out.println((System.currentTimeMillis() - startTime));
-    }
-
-    private void performFunction(String function, int threadID) throws TargetException {
-        if (function.equals("getTargets")) {
-            printTargets(threadID);
-        } else if (function.equals("getApps")) {
-            printApps(threadID);
-        } else if (function.equals("loopGetTargets")) {
-            loopGetTargets();
-        } else {
-            System.err.println("No recognized function in thread " + threadID);
-        }
-    }
-
-    private void multiGetApps() {
-
-    }
-
-    private String getStartTimeText() {
-        return options.get(START_TIME);
-    }
-
-    private String getHost() {
-        return options.get(HOST);
-    }
-
-    private String getPort() {
-        return options.get(PORT);
-    }
-
-    private String getUsername() {
-        return options.get(USERNAME);
-    }
-
-    private String getPassword() {
-        return options.get(PASSWORD);
-    }
-
-    private String getOperation() {
-        return options.get(OPERATION);
-    }
-
-    private String getTargetTimeText() {
-        return options.get(START_TIME);
-    }
-
-    private long getDelay() {
-        return Long.parseLong(options.get(DELAY));
-    }
-
-    private String getConnectionStringSuffix(boolean secure) {
-        return secure ? ":https" : "";
-    }
-
-    private long getTimeout() {
-        return Long.parseLong(options.get(TIMEOUT));
-    }
-
-    private class Runner implements Runnable {
-
-        private String function;
-        private int threadID;
-        private AtomicBoolean result;
-
-        public Runner(String function, int threadID, AtomicBoolean result) {
-            Runner.this.function = function;
-            this.threadID = threadID;
-            this.result = result;
-        }
-
-        public void run() {
-            try {
-                performFunction(function, threadID);
-                result.set(true);
-            } catch (Throwable thr) {
-                result.set(false);
-                synchronized (TestJSR88Concurrency.this) {
-                    System.err.println(Thread.currentThread().getName());
-                    thr.printStackTrace();
-                }
-            }
-
-        }
-    }
-
-    /**
-     *Indicates a user error, such as a missing command-line value, that should
-     *be displayed without a stack trace.
-     */
-    public class UserException extends Exception {
-        public UserException(String msg) {
-            super(msg);
-        }
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/apitests/build.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/apitests/build.xml
deleted file mode 100644
index 9502fb5..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/apitests/build.xml
+++ /dev/null
@@ -1,211 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="apitests" default="private-all" basedir=".">
-
-    <property file="./../../../../config.properties"/>
-
-    &commonBuild;
-    <property name="archivedir" value="${build}/archives"/>
-
-    <path id="jsr88api.test.classpath">
-        <pathelement location="${inst}/lib/j2ee.jar"/>
-        <pathelement location="${inst}/jdk/lib/tools.jar"/>
-        <pathelement location="${env.APS_HOME}/devtests/deployment/util/build"/>
-    </path>
-
-    <path id="jsr88api.concurrency.test.classpath">
-        <pathelement location="${inst}/lib/javaee.jar"/>
-        <pathelement location="${inst}/lib/appserv-admin.jar"/>
-        <pathelement location="${inst}/lib/appserv-deployment-client.jar"/>
-        <pathelement location="${env.APS_HOME}/devtests/deployment/util/build"/>
-    </path>
-
-    <target name="deployApps">
-                <delete dir="${testsRoot}/build/war/servletonly"/>
-                <delete dir="${testsRoot}/build/ejb/statelesshello"/>
-                <delete dir="${testsRoot}/build/ear/wstoejb"/>
-        <ant dir="../../war/servletonly" target="assemble">
-            <property name="build" value="${testsRoot}/build/war/servletonly"/>
-        </ant>
-        <ant dir="../../ejb/statelesshello" target="assemble">
-            <property name="build" value="${testsRoot}/build/ejb/statelesshello"/>
-        </ant>
-        <ant dir="../../ear/wstoejb" target="build">
-            <property name="build" value="${testsRoot}/build/ear/wstoejb"/>
-        </ant>
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="${testsRoot}/build/war/servletonly/servletonly.war"/>
-            <param name="testName" value="servletonly"/>
-        </antcall>
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="--retrieve ${archivedir} --name StatelessHelloEjb ${archivedir}/statelesshelloejb.jar"/>
-            <param name="testName" value="StatelessHelloEjb"/>
-        </antcall>
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="--name wstoejb --retrieve ${testsRoot}/build/ear/wstoejb ${testsRoot}/build/ear/wstoejb/wstoejb.ear"/>
-            <param name="testName" value="wstoejb"/>
-        </antcall>
-    </target>
-
-    <target name="undeployApps">
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="wstoejb"/>
-            <param name="testName" value="wstoejb"/>
-        </antcall>
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="StatelessHelloEjb"/>
-            <param name="testName" value="StatelessHelloEjb"/>
-        </antcall>
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="servletonly"/>
-            <param name="testName" value="servletonly"/>
-        </antcall>
-    </target>
-
-    <target name="compile" depends="init, compile.util">
-        <mkdir dir="${build}"/>
-        <javac srcdir="."
-               destdir="${build}"
-               debug="on"
-               failonerror="true"
-               excludes="**/ProgressObjectImpl.java">
-            <classpath refid="jsr88api.test.classpath"/>
-            <classpath refid="jsr88api.concurrency.test.classpath"/>
-        </javac>
-    </target>
-
-    <target name="runclient" depends="compile">
-        <echo message="TestClient ${arg.list}"/>
-        <javaWithResult
-            fork="true"
-            failonerror="false"
-            jvm="${JAVA}"
-            classname="devtests.deployment.jsr88.apitests.TestClient"
-            output="${build}/${log.id}.output.log"
-            resultproperty="result">
-            <classpath>
-                <path location="${build}"/>
-                <path location="${inst}/lib/j2ee.jar"/>
-                <path location="${inst}/lib/appserv-rt.jar"/>
-                <path location="${inst}/lib/appserv-admin.jar"/>
-                <path location="${inst}/lib/appserv-ext.jar"/>
-                <path location="${env.APS_HOME}/devtests/deployment/util/build"/>
-                <path location="${inst}/jdk/lib/tools.jar"/>
-            </classpath>
-            <sysproperty key="com.sun.aas.installRoot" value="${inst}"/>
-            <sysproperty key="server" value="${appserver.instance.name}"/>
-            <sysproperty key="java.library.path" value="${inst}/lib"/>
-            <sysproperty key="com.sun.aas.configRoot" value="${inst}/config"/>
-
-            <arg line="${arg.list}" />
-        </javaWithResult>
-
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/${log.id}.output.log"/>
-        </antcall>
-    </target>
-
-    <target name="runConcurrencyClient" depends="compile">
-        <echo message="ConcurrencyClient ${arg.list}"/>
-        <java
-            fork="true"
-            failonerror="false"
-            jvm="${JAVA}"
-            classname="devtests.deployment.jsr88.apitests.TestJSR88Concurrency"
-            output="${build}/${log.id}.output.log"
-            resultproperty="result">
-            <classpath>
-                <path location="${build}"/>
-                <path location="${inst}/lib/javaee.jar"/>
-                <path location="${inst}/lib/appserv-admin.jar"/>
-                <path location="${inst}/lib/appserv-deployment-client.jar"/>
-                <!-- <path location="${env.APS_HOME}/devtests/deployment/util/build"/> -->
-            </classpath>
-<!--
-            <sysproperty key="com.sun.aas.installRoot" value="${inst}"/>
-            <sysproperty key="server" value="${appserver.instance.name}"/>
-            <sysproperty key="java.library.path" value="${inst}/lib"/>
-            <sysproperty key="com.sun.aas.configRoot" value="${inst}/config"/>
--->
-            <arg line="${arg.list}" />
-        </java>
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/${log.id}.output.log"/>
-        </antcall>
-    </target>
-
-    <target name="private-all" depends="init,compile.util">
-
-        <antcall target="deployApps" />
-
-        <antcall target="declare-test">
-            <param name="description" value="jsr88/apitests Test getAvailableModules API for all WARs"/>
-        </antcall>
-        <antcall target="runclient">
-            <param name="arg.list" value="1 ${jsr88.uri} ${admin.user} ${admin.password} servletonly"/>
-            <param name="log.id" value="1"/>
-        </antcall>
-
-        <antcall target="declare-test">
-            <param name="description" value="jsr88/apitests Test getAvailableModules API for all EJB-JARs"/>
-        </antcall>
-        <antcall target="runclient">
-            <param name="arg.list" value="2 ${jsr88.uri} ${admin.user} ${admin.password} StatelessHelloEjb"/>
-            <param name="log.id" value="2"/>
-        </antcall>
-
-        <antcall target="declare-test">
-            <param name="description" value="jsr88/apitests Test getAvailableModules API for all EARs"/>
-        </antcall>
-        <antcall target="runclient">
-            <param name="arg.list" value="3 ${jsr88.uri} ${admin.user} ${admin.password} wstoejb"/>
-            <param name="log.id" value="3"/>
-        </antcall>
-
-        <antcall target="declare-test">
-            <param name="description" value="jsr88/apitests Test getRunningModules/getNonRunningModules API"/>
-        </antcall>
-        <antcall target="runclient">
-            <param name="arg.list" value="4 ${jsr88.uri} ${admin.user} ${admin.password} servletonly StatelessHelloEjb wstoejb"/>
-            <param name="log.id" value="4"/>
-        </antcall>
-
-<!--        <antcall target="runConcurrencyTest"/>
--->
-
-        <antcall target="undeployApps" />
-    </target>
-
-    <target name="runConcurrencyTest" depends="init">
-        <antcall target="declare-test">
-            <param name="description" value="jsr88/apitests Test JSR-88 concurrent usage"/>
-        </antcall>
-        <antcall target="runConcurrencyClient">
-            <param name="arg.list" value="--host ${admin.host} --port ${admin.port} --secure ${s1as.secure} --username ${admin.user} --passwordfile ${passwordFile} --operation loopGetTargets*2"/>
-            <param name="log.id" value="5"/>
-        </antcall>
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/build.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/build.xml
deleted file mode 100644
index 5debba1..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/build.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../config/common.xml">
-]>
-
-<project name="jsr88" default="all" basedir=".">
-
-    &commonBuild;
-
-    <target name="private-all">
-        <ant dir="war" target="private-all">
-            <property name="build" value="${build}/war"/>
-        </ant>
-        <!--
-        <ant dir="misc" target="private-all">
-            <property name="build" value="${build}/misc"/>
-        </ant>
-        <ant dir="apitests" target="private-all">
-            <property name="build" value="${build}/apitests"/>
-        </ant>
-        -->
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/build.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/build.xml
deleted file mode 100644
index 07d012a..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/build.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="deploymentmanager" default="all" basedir=".">
-
-        &commonBuild;
-    <property name="archivedir" value="${build}/archives"/>
-
-        <target name="private-all">
-                <ant dir="distribute" target="private-all">
-                        <property name="build" value="${build}/distribute"/>
-                </ant>
-                <ant dir="getXModules" target="private-all">
-                        <property name="build" value="${build}/getXModules"/>
-                </ant>
-        </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/distribute/build.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/distribute/build.xml
deleted file mode 100644
index 0409ec2..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/distribute/build.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../../config/common.xml">
-]>
-
-<project name="distribute" default="all" basedir=".">
-
-        &commonBuild;
-
-        <target name="private-all">
-                <ant dir="childtargetmoduleid" target="private-all">
-                        <property name="build" value="${build}"/>
-                </ant>
-                <ant dir="getweburl" target="private-all">
-                        <property name="build" value="${build}"/>
-                </ant>
-                <ant dir="clientconfiguration" target="private-all">
-                        <property name="build" value="${build}"/>
-                </ant>
-
-        </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/distribute/childtargetmoduleid/DeployTargetModuleIDTester.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/distribute/childtargetmoduleid/DeployTargetModuleIDTester.java
deleted file mode 100644
index 028de29..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/distribute/childtargetmoduleid/DeployTargetModuleIDTester.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-/*
- * DeployTargetModuleIDTester.java
- *
- * Created on January 27, 2004, 10:07 AM
- */
-
-package devtests.deployment.jsr88.targetmoduleid.deploytargetmoduleid;
-
-import java.io.File;
-import javax.enterprise.deploy.spi.TargetModuleID;
-import javax.enterprise.deploy.shared.ModuleType;
-import javax.enterprise.deploy.spi.Target;
-import javax.enterprise.deploy.spi.status.ProgressObject;
-
-import com.sun.enterprise.deployment.archivist.ApplicationArchivist;
-import com.sun.enterprise.deployment.Application;
-import com.sun.enterprise.deployment.BundleDescriptor;
-import com.sun.enterprise.deployment.util.ModuleDescriptor;
-
-import devtests.deployment.util.JSR88Deployer;
-
-/**
- *
- * @author Jerome Dochez
- */
-public class DeployTargetModuleIDTester extends JSR88Deployer {
-
-    /** Creates a new instance of DeployTargetModuleIDTester */
-    public DeployTargetModuleIDTester(String host, String port, String user, String password) {
-        super(host, port, user, password);
-    }
-
-    /**
-     * @param args the command line arguments
-     */
-    public static void main(String[] args) {
-
-        try {
-            DeployTargetModuleIDTester deployer = getDeployer(args);
-            TargetModuleID[] ids = deployer.deploy(args);
-            if (deployer.test(ids, args[6])) {
-                log("Test Passed");
-                System.exit(0);
-            } else {
-                log("Test FAILED");
-                deployer.dumpModulesIDs("", ids);
-                System.exit(1);
-            }
-
-        } catch(Exception e) {
-            e.printStackTrace();
-            System.exit(1);
-        }
-    }
-
-    protected static DeployTargetModuleIDTester getDeployer(String[] args) {
-       return new DeployTargetModuleIDTester(args[1], args[2], args[3], args[4]);
-    }
-
-
-    protected TargetModuleID[] deploy(String[] args) throws Exception {
-
-        File inputFile = new File(args[6]);
-        if (!inputFile.exists()) {
-            error("File not found : " + inputFile.getPath());
-            System.exit(1);
-        }
-        File deploymentFile = null;
-        if (args.length > 6) {
-            deploymentFile = new File(args[7]);
-            if (!args[7].equals("null")) {
-                if (!deploymentFile.exists()) {
-                    error("Deployment File not found : " + deploymentFile.getPath());
-                    System.exit(1);
-                }
-            }
-        }
-
-        log("Deploying " + inputFile + " plan: " + deploymentFile);
-        ProgressObject po =  deploy(inputFile, deploymentFile, false);
-        return po.getResultTargetModuleIDs();
-    }
-
-    protected boolean test(TargetModuleID[] moduleIDs, String path)
-        throws Exception
-    {
-
-        if (moduleIDs.length==0) {
-            // deployment failed ?
-            log("Deployment failed, got zero TargetModuleID");
-            System.exit(1);
-        }
-
-        // we are loading the deployed file and checking that the moduleIDs are
-        // correct
-        Application app = ApplicationArchivist.openArchive(new File(path));
-
-        if (app.isVirtual()) {
-            BundleDescriptor bd = app.getStandaloneBundleDescriptor();
-
-            // standalone module, should be fast.
-            if (moduleIDs.length!=1) {
-                // wrong number...
-                log("Error " + path + " is a standalone module, got more than 1 targetmoduleID");
-                dumpModulesIDs("", moduleIDs);
-                return false;
-            }
-        } else {
-            for (int i=0;i<moduleIDs.length;i++) {
-                TargetModuleID parent = moduleIDs[i];
-                Target target = parent.getTarget();
-                log("Deployed on " + target.getName() + " with module ID " + parent.getModuleID());
-
-                // now look at all the children
-                TargetModuleID[] children = parent.getChildTargetModuleID();
-                if (children==null) {
-                    log("ERROR : App from " + path + " has " + app.getBundleDescriptors().size() +
-                        " modules but I didn't get any children TagetModuleID");
-                    return false;
-                }
-
-                // size is consistent ?
-                if (children.length!=app.getBundleDescriptors().size()) {
-                    log("ERROR : App from " + path + " has " + app.getBundleDescriptors().size() +
-                        " modules but I got only " + children.length +
-                        " children TagetModuleID");
-                    return false;
-                } else {
-                    log("Expected " + app.getBundleDescriptors().size() +
-                        " children TargetModuleIDs and got " + children.length);
-                }
-
-                for (int j=0;j<children.length;j++) {
-                    TargetModuleID aChild = children[j];
-                    log("Processing " + aChild.getModuleID());
-
-                    String childModuleID = aChild.getModuleID();
-                    String[] splitted = childModuleID.split("#");
-                    if (splitted.length!=2) {
-                        log("Unknown sub module id " + childModuleID);
-                        return false;
-                    }
-
-                    // check that parent TargeTModuleID is correct
-                    if (aChild.getParentTargetModuleID().equals(parent)) {
-                        log("Child's parent TargetModuleID is correctly set");
-                    } else {
-                        log("Child's parent TargetModuleID is incorrect");
-                        return false;
-                    }
-
-                    String first = splitted[0];
-                    if (first.equals(parent.getModuleID())) {
-                        log("Correct parent module id for child " + childModuleID);
-                    } else {
-                        log("Incorrect parent module id for child " + childModuleID);
-                    }
-
-                    // look for the right module descriptor..
-                    ModuleDescriptor md = app.getModuleDescriptorByUri(splitted[1]);
-                    if (md==null) {
-                        log("Cannot find module descriptor for " + childModuleID);
-                        return false;
-                    } else {
-                        log("Found module descriptor for " + childModuleID);
-                    }
-                }
-            }
-        }
-        // if we are here, it's good !
-        return true;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/distribute/childtargetmoduleid/build.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/distribute/childtargetmoduleid/build.xml
deleted file mode 100644
index 2e6cb52..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/distribute/childtargetmoduleid/build.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
-]>
-
-<project name="deploytargetmoduleid" default="all" basedir=".">
-
-         &commonBuild;
-    <property name="archivedir" value="${build}/archives"/>
-
-        <target name="compile">
-                <mkdir dir="${build}" />
-                <javac srcdir="." destdir="${env.APS_HOME}/devtests/deployment/util/build"
-                        classpath="${inst}/lib/j2ee.jar:${inst}/lib/appserv-rt.jar:../../../../util/build"
-                />
-        </target>
-
-        <target name="build-ear" unless="earfile.built">
-            <echo message="file ${build}/save/wstoejb.ear is present : ${earfile.built}"/>
-            <ant dir="../../../ear/wstoejb" target="assemble"/>
-            <mkdir dir="${build}/../save"/>
-            <copy file="${archivedir}/wstoejb.ear" todir="${build}/../save"/>
-            <copy file="${archivedir}/plan.jar" todir="${build}/../save"/>
-        </target>
-
-        <target name="private-all" depends="compile">
-                <antcall target="declare-test">
-                    <param name="description" value="jsr88/distribute/ChildTargetModuleID test TargetModuleID and its children returned from deployment"/>
-                </antcall>
-                <available property="earfile.built" file="${archivedir}/wstoejb.ear"/>
-                <antcall target="build-ear"/>
-                <antcall target="specialized.run.jsr88">
-                        <param name="deployer.class" value="devtests.deployment.jsr88.targetmoduleid.deploytargetmoduleid.DeployTargetModuleIDTester"/>
-                        <param name="command" value="deploy"/>
-                        <param name="arg.list" value="true ${build}/../save/wstoejb.ear ${build}/../save/plan.jar"/>
-                </antcall>
-                <antcall target="processResult">
-                    <param name="result" value="0"/>
-                </antcall>
-                <antcall target="common.undeploy.asadmin">
-                    <param name="arg.list" value="wstoejb"/>
-                </antcall>
-        </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/distribute/clientconfiguration/ClientConfigurationTester.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/distribute/clientconfiguration/ClientConfigurationTester.java
deleted file mode 100644
index b23c3fe..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/distribute/clientconfiguration/ClientConfigurationTester.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-/*
- * GetWebUriTester.java
- *
- * Created on January 28, 2004, 3:36 PM
- */
-
-package jsr88.deploymentmanager.distribute.clientconfiguration;
-
-import java.io.File;
-import javax.enterprise.deploy.spi.TargetModuleID;
-import javax.enterprise.deploy.shared.ModuleType;
-import javax.enterprise.deploy.spi.Target;
-import javax.enterprise.deploy.spi.status.ClientConfiguration;
-import javax.enterprise.deploy.spi.status.ProgressObject;
-
-import com.sun.enterprise.deployment.archivist.ApplicationArchivist;
-import com.sun.enterprise.deployment.Application;
-import com.sun.enterprise.deployment.BundleDescriptor;
-import com.sun.enterprise.deployment.util.ModuleDescriptor;
-
-import devtests.deployment.util.JSR88Deployer;
-
-/**
- *
- * @author Jerome Dochez
- */
-public class ClientConfigurationTester extends JSR88Deployer {
-
-    /** Creates a new instance of DeployTargetModuleIDTester */
-    public ClientConfigurationTester(String host, String port, String user, String password) {
-        super(host, port, user, password);
-    }
-
-    /**
-     * @param args the command line arguments
-     */
-    public static void main(String[] args) {
-
-        try {
-            ClientConfigurationTester deployer = getDeployer(args);
-            ProgressObject po = deployer.deploy(args);
-            if (deployer.test(po, args[6])) {
-                System.exit(0);
-            } else {
-                deployer.dumpModulesIDs("", po.getResultTargetModuleIDs());
-                System.exit(1);
-            }
-
-        } catch(Exception e) {
-            e.printStackTrace();
-            System.exit(1);
-        }
-    }
-
-    protected static ClientConfigurationTester getDeployer(String[] args) {
-       return new ClientConfigurationTester(args[1], args[2], args[3], args[4]);
-    }
-
-
-    protected ProgressObject deploy(String[] args) throws Exception {
-
-        File inputFile = new File(args[6]);
-        if (!inputFile.exists()) {
-            error("File not found : " + inputFile.getPath());
-            System.exit(1);
-        }
-        File deploymentFile = null;
-        if (args.length > 6) {
-            deploymentFile = new File(args[7]);
-            if (!args[7].equals("null")) {
-                if (!deploymentFile.exists()) {
-                    error("Deployment File not found : " + deploymentFile.getPath());
-                    System.exit(1);
-                }
-            }
-        }
-
-        log("Deploying " + inputFile + " plan: " + deploymentFile);
-        return deploy(inputFile, deploymentFile, false);
-    }
-
-    protected boolean test(ProgressObject po, String path)
-        throws Exception
-    {
-
-        TargetModuleID[] moduleIDs = po.getResultTargetModuleIDs();
-        if (moduleIDs.length==0) {
-            // deployment failed ?
-            log("Deployment failed, got zero TargetModuleID");
-            System.exit(1);
-        }
-
-        // we are loading the deployed file and checking that the moduleIDs are
-        // correct
-        Application app = ApplicationArchivist.openArchive(new File(path));
-
-        if (app.isVirtual()) {
-            BundleDescriptor bd = app.getStandaloneBundleDescriptor();
-
-            // standalone module, should be fast.
-            if (moduleIDs.length!=1) {
-                // wrong number...
-                log("Error " + path + " is a standalone module, got more than 1 targetmoduleID");
-                dumpModulesIDs("", moduleIDs);
-                return false;
-            }
-
-            // let's just check that the web uri is fine
-            if (bd.getModuleType().equals(ModuleType.WAR)) {
-                if (moduleIDs[0].getWebURL()==null) {
-                    log("Error : standalone web module and getWebURI() returned null");
-                    return false;
-                }
-            }
-        } else {
-            for (int i=0;i<moduleIDs.length;i++) {
-                TargetModuleID parent = moduleIDs[i];
-                Target target = parent.getTarget();
-                log("Deployed on " + target.getName() + " with module ID " + parent.getModuleID());
-
-                // now look at all the children
-                TargetModuleID[] children = parent.getChildTargetModuleID();
-                if (children==null) {
-                    log("ERROR : App from " + path + " has " + app.getBundleDescriptors().size() +
-                        " modules but I didn't get any children TagetModuleID");
-                    return false;
-                }
-
-                for (int j=0;j<children.length;j++) {
-                    TargetModuleID aChild = children[j];
-                    log("Processing " + aChild.getModuleID());
-
-                    String childModuleID = aChild.getModuleID();
-                    String[] splitted = childModuleID.split("#");
-                    if (splitted.length!=2) {
-                        log("Unknown sub module id " + childModuleID);
-                        return false;
-                    }
-
-                    // look for the right module descriptor..
-                    ModuleDescriptor md = app.getModuleDescriptorByUri(splitted[1]);
-                    if (md==null) {
-                        log("Cannot find module descriptor for " + childModuleID);
-                        return false;
-                    } else {
-                        log("Found module descriptor for " + childModuleID);
-                    }
-                    if (md.getModuleType().equals(ModuleType.CAR)) {
-                        // this is an appcliemt, let's execute it
-                        ClientConfiguration cc = po.getClientConfiguration(aChild);
-                        cc.execute();
-                    }
-                }
-            }
-        }
-        // if we are here, it's good !
-        return true;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/distribute/clientconfiguration/build.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/distribute/clientconfiguration/build.xml
deleted file mode 100644
index bc51c41..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/distribute/clientconfiguration/build.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
-]>
-
-<project name="getweburl" default="all" basedir=".">
-
-         &commonBuild;
-    <property name="archivedir" value="${build}/archives"/>
-
-        <target name="compile">
-                <mkdir dir="${build}" />
-                <javac srcdir="." destdir="${env.APS_HOME}/devtests/deployment/util/build"
-                        classpath="${inst}/lib/j2ee.jar:${inst}/lib/appserv-rt.jar:../../../../util/build"
-                />
-        </target>
-
-        <target name="build-ear" unless="earfile.built">
-            <echo message="file ${build}/save/wstoejb.ear is present : ${earfile.built}"/>
-            <ant dir="../../../ear/wstoejb" target="assemble"/>
-            <mkdir dir="${build}/../save"/>
-            <copy file="${archivedir}/wstoejb.ear" todir="${build}/../save"/>
-            <copy file="${archivedir}/plan.jar" todir="${build}/../save"/>
-        </target>
-
-        <target name="private-all" depends="compile">
-                <antcall target="declare-test">
-                    <param name="description" value="jsr88/deploymentmanager/distribute/clientconfiguration test getClientConfiguraton API"/>
-                </antcall>
-                <available property="earfile.built" file="${build}/../save/wstoejb.ear"/>
-                <antcall target="build-ear"/>
-                <antcall target="specialized.run.jsr88">
-                        <param name="deployer.class" value="jsr88.deploymentmanager.distribute.clientconfiguration.ClientConfigurationTester"/>
-                        <param name="command" value="deploy"/>
-                        <param name="arg.list" value="true ${build}/../save//wstoejb.ear ${build}/../save/plan.jar"/>
-                </antcall>
-                <antcall target="processResult">
-                    <param name="result" value="0"/>
-                </antcall>
-                <antcall target="common.undeploy.asadmin">
-                    <param name="arg.list" value="wstoejb"/>
-                </antcall>
-        </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/distribute/getweburl/DeployGetWebUrlTester.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/distribute/getweburl/DeployGetWebUrlTester.java
deleted file mode 100644
index 9697fe2..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/distribute/getweburl/DeployGetWebUrlTester.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-/*
- * GetWebUriTester.java
- *
- * Created on January 28, 2004, 3:36 PM
- */
-
-package devtests.deployment.jsr88.targetmoduleid.deploygetweburl;
-
-import java.io.File;
-import javax.enterprise.deploy.spi.TargetModuleID;
-import javax.enterprise.deploy.shared.ModuleType;
-import javax.enterprise.deploy.spi.Target;
-import javax.enterprise.deploy.spi.status.ProgressObject;
-
-import com.sun.enterprise.deployment.archivist.ApplicationArchivist;
-import com.sun.enterprise.deployment.Application;
-import com.sun.enterprise.deployment.BundleDescriptor;
-import com.sun.enterprise.deployment.util.ModuleDescriptor;
-
-import devtests.deployment.util.JSR88Deployer;
-
-/**
- *
- * @author Jerome Dochez
- */
-public class DeployGetWebUrlTester extends JSR88Deployer {
-
-    /** Creates a new instance of DeployTargetModuleIDTester */
-    public DeployGetWebUrlTester(String host, String port, String user, String password) {
-        super(host, port, user, password);
-    }
-
-    /**
-     * @param args the command line arguments
-     */
-    public static void main(String[] args) {
-
-        try {
-            DeployGetWebUrlTester deployer = getDeployer(args);
-            TargetModuleID[] ids = deployer.deploy(args);
-            if (deployer.test(ids, args[6])) {
-                System.exit(0);
-            } else {
-                deployer.dumpModulesIDs("", ids);
-                System.exit(1);
-            }
-
-        } catch(Exception e) {
-            e.printStackTrace();
-            System.exit(1);
-        }
-    }
-
-    protected static DeployGetWebUrlTester getDeployer(String[] args) {
-       return new DeployGetWebUrlTester(args[1], args[2], args[3], args[4]);
-    }
-
-
-    protected TargetModuleID[] deploy(String[] args) throws Exception {
-
-        File inputFile = new File(args[6]);
-        if (!inputFile.exists()) {
-            error("File not found : " + inputFile.getPath());
-            System.exit(1);
-        }
-        File deploymentFile = null;
-        if (args.length > 6) {
-            deploymentFile = new File(args[7]);
-            if (!args[7].equals("null")) {
-                if (!deploymentFile.exists()) {
-                    error("Deployment File not found : " + deploymentFile.getPath());
-                    System.exit(1);
-                }
-            }
-        }
-
-        log("Deploying " + inputFile + " plan: " + deploymentFile);
-        ProgressObject po =  deploy(inputFile, deploymentFile, false);
-        return po.getResultTargetModuleIDs();
-    }
-
-    protected boolean test(TargetModuleID[] moduleIDs, String path)
-        throws Exception
-    {
-
-        if (moduleIDs.length==0) {
-            // deployment failed ?
-            log("Deployment failed, got zero TargetModuleID");
-            System.exit(1);
-        }
-
-        // we are loading the deployed file and checking that the moduleIDs are
-        // correct
-        Application app = ApplicationArchivist.openArchive(new File(path));
-
-        if (app.isVirtual()) {
-            BundleDescriptor bd = app.getStandaloneBundleDescriptor();
-
-            // standalone module, should be fast.
-            if (moduleIDs.length!=1) {
-                // wrong number...
-                log("Error " + path + " is a standalone module, got more than 1 targetmoduleID");
-                dumpModulesIDs("", moduleIDs);
-                return false;
-            }
-
-            // let's just check that the web uri is fine
-            if (bd.getModuleType().equals(ModuleType.WAR)) {
-                if (moduleIDs[0].getWebURL()==null) {
-                    log("Error : standalone web module and getWebURI() returned null");
-                    return false;
-                }
-            }
-        } else {
-            for (int i=0;i<moduleIDs.length;i++) {
-                TargetModuleID parent = moduleIDs[i];
-                Target target = parent.getTarget();
-                log("Deployed on " + target.getName() + " with module ID " + parent.getModuleID());
-
-                // now look at all the children
-                TargetModuleID[] children = parent.getChildTargetModuleID();
-                if (children==null) {
-                    log("ERROR : App from " + path + " has " + app.getBundleDescriptors().size() +
-                        " modules but I didn't get any children TagetModuleID");
-                    return false;
-                }
-
-                for (int j=0;j<children.length;j++) {
-                    TargetModuleID aChild = children[j];
-                    log("Processing " + aChild.getModuleID());
-
-                    String childModuleID = aChild.getModuleID();
-                    String[] splitted = childModuleID.split("#");
-                    if (splitted.length!=2) {
-                        log("Unknown sub module id " + childModuleID);
-                        return false;
-                    }
-
-                    // look for the right module descriptor..
-                    ModuleDescriptor md = app.getModuleDescriptorByUri(splitted[1]);
-                    if (md==null) {
-                        log("Cannot find module descriptor for " + childModuleID);
-                        return false;
-                    } else {
-                        log("Found module descriptor for " + childModuleID);
-                    }
-                    if (md.getModuleType().equals(ModuleType.WAR)) {
-                        if (aChild.getWebURL()==null) {
-                            log("Error : web module " + splitted[1] + " TargetModuleID.GetWebURI() returned null");
-                            return false;
-                        } else {
-                            log("Web module " + splitted[1] + " available at " + aChild.getWebURL());
-                        }
-                    }
-                }
-            }
-        }
-        // if we are here, it's good !
-        return true;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/distribute/getweburl/build.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/distribute/getweburl/build.xml
deleted file mode 100644
index f260790..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/distribute/getweburl/build.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
-]>
-
-<project name="getweburl" default="all" basedir=".">
-
-         &commonBuild;
-    <property name="archivedir" value="${build}/archives"/>
-
-        <target name="compile">
-                <mkdir dir="${build}" />
-                <javac srcdir="." destdir="${env.APS_HOME}/devtests/deployment/util/build"
-                        classpath="${inst}/lib/j2ee.jar:${inst}/lib/appserv-rt.jar:../../../../util/build"
-                />
-        </target>
-
-        <target name="build-ear" unless="earfile.built">
-            <echo message="file ${build}/save/wstoejb.ear is present : ${earfile.built}"/>
-            <ant dir="../../../ear/wstoejb" target="assemble"/>
-            <mkdir dir="${build}/../save"/>
-            <copy file="${archivedir}/wstoejb.ear" todir="${build}/../save"/>
-            <copy file="${archivedir}/plan.jar" todir="${build}/../save"/>
-        </target>
-
-        <target name="private-all" depends="compile">
-                <antcall target="declare-test">
-                    <param name="description" value="jsr88/targetmoduleid/DeployGetWebUrlTester test GetWebURL returned from deployment"/>
-                </antcall>
-                <available property="earfile.built" file="${build}/../save/wstoejb.ear"/>
-                <antcall target="build-ear"/>
-                <antcall target="specialized.run.jsr88">
-                        <param name="deployer.class" value="devtests.deployment.jsr88.targetmoduleid.deploygetweburl.DeployGetWebUrlTester"/>
-                        <param name="command" value="deploy"/>
-                        <param name="arg.list" value="true ${build}/../save//wstoejb.ear ${build}/../save/plan.jar"/>
-                </antcall>
-                <antcall target="processResult">
-                    <param name="result" value="0"/>
-                </antcall>
-                <antcall target="common.undeploy.asadmin">
-                    <param name="arg.list" value="wstoejb"/>
-                </antcall>
-        </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/getXModules/build.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/getXModules/build.xml
deleted file mode 100644
index 7d0f7d1..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/getXModules/build.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../../config/common.xml">
-]>
-
-<project name="getXModules" default="all" basedir=".">
-
-        &commonBuild;
-
-        <target name="private-all">
-                <ant dir="childtmid" target="private-all">
-                        <property name="build" value="${build}"/>
-                </ant>
-        </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/getXModules/childtmid/ChildTargetModuleIDTester.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/getXModules/childtmid/ChildTargetModuleIDTester.java
deleted file mode 100644
index 5952256..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/getXModules/childtmid/ChildTargetModuleIDTester.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-/*
- * DeployTargetModuleIDTester.java
- *
- * Created on January 27, 2004, 10:07 AM
- */
-
-package jsr88.deploymentmanager.getXModules.childtmid;
-
-import java.io.File;
-import javax.enterprise.deploy.spi.TargetModuleID;
-import javax.enterprise.deploy.shared.ModuleType;
-import javax.enterprise.deploy.spi.Target;
-import javax.enterprise.deploy.spi.status.*;
-
-import com.sun.enterprise.deployment.archivist.ApplicationArchivist;
-import com.sun.enterprise.deployment.Application;
-import com.sun.enterprise.deployment.BundleDescriptor;
-import com.sun.enterprise.deployment.util.ModuleDescriptor;
-
-import devtests.deployment.util.JSR88Deployer;
-
-/**
- *
- * @author Jerome Dochez
- */
-public class ChildTargetModuleIDTester extends JSR88Deployer {
-
-    /** Creates a new instance of DeployTargetModuleIDTester */
-    public ChildTargetModuleIDTester(String host, String port, String user, String password) {
-        super(host, port, user, password);
-    }
-
-    /**
-     * @param args the command line arguments
-     */
-    public static void main(String[] args) {
-
-        try {
-            ChildTargetModuleIDTester deployer = getDeployer(args);
-            TargetModuleID[] ids = deployer.deploy(args);
-            if (deployer.test(ids, args[6])) {
-                log("Test Passed");
-                System.exit(0);
-            } else {
-                log("Test FAILED");
-                deployer.dumpModulesIDs("", ids);
-                System.exit(1);
-            }
-
-        } catch(Exception e) {
-            e.printStackTrace();
-            System.exit(1);
-        }
-    }
-
-    protected static ChildTargetModuleIDTester getDeployer(String[] args) {
-       return new ChildTargetModuleIDTester(args[1], args[2], args[3], args[4]);
-    }
-
-
-    protected TargetModuleID[] deploy(String[] args) throws Exception {
-
-        File inputFile = new File(args[6]);
-        if (!inputFile.exists()) {
-            error("File not found : " + inputFile.getPath());
-            System.exit(1);
-        }
-        File deploymentFile = null;
-        if (args.length > 6) {
-            deploymentFile = new File(args[7]);
-            if (!args[7].equals("null")) {
-                if (!deploymentFile.exists()) {
-                    error("Deployment File not found : " + deploymentFile.getPath());
-                    System.exit(1);
-                }
-            }
-        }
-
-        log("Deploying " + inputFile + " plan: " + deploymentFile);
-        ProgressObject po = deploy(inputFile, deploymentFile, false);
-        return po.getResultTargetModuleIDs();
-    }
-
-    protected boolean test(TargetModuleID[] moduleIDs, String path)
-        throws Exception
-    {
-
-            // hack for std modules
-
-            TargetModuleID[] aTargetModuleIDs = findApplication("sayhello", ModuleType.WAR, null);
-
-            dumpModulesIDs("war", aTargetModuleIDs);
-
-        if (moduleIDs.length==0) {
-            // deployment failed ?
-            log("Deployment failed, got zero TargetModuleID");
-            System.exit(1);
-        }
-
-        // we are loading the deployed file and checking that the moduleIDs are
-        // correct
-        Application app = ApplicationArchivist.openArchive(new File(path));
-
-        // check of non running modules
-        ModuleType modType;
-        if (app.isVirtual()) {
-            modType = app.getStandaloneBundleDescriptor().getModuleType();
-        } else {
-            modType = ModuleType.EAR;
-        }
-
-        // now we need to start the application
-        for (int i=0;i<moduleIDs.length;i++) {
-            TargetModuleID aTargetModuleID = moduleIDs[i];
-
-            // should be part of the non running
-            TargetModuleID[] targetModuleIDs = findApplication(aTargetModuleID.getModuleID(),
-                                                    modType, Boolean.FALSE);
-            check(path, app, targetModuleIDs);
-
-            // should be part of the available apps
-            targetModuleIDs = findApplication(aTargetModuleID.getModuleID(),
-                                                    modType, null);
-            check(path, app, targetModuleIDs);
-
-            // now we start it..
-            start(aTargetModuleID.getModuleID());
-
-            // should be part of the running
-            targetModuleIDs = findApplication(aTargetModuleID.getModuleID(),
-                                                    modType, Boolean.TRUE);
-            check(path, app, targetModuleIDs);
-
-            // should be part of the available apps
-            targetModuleIDs = findApplication(aTargetModuleID.getModuleID(),
-                                                    modType, null);
-            check(path, app, targetModuleIDs);
-
-        }
-        return true;
-
-    }
-
-    private boolean check(String path, Application app, TargetModuleID[] moduleIDs) {
-
-        if (app.isVirtual()) {
-            BundleDescriptor bd = app.getStandaloneBundleDescriptor();
-
-            // standalone module, should be fast.
-            if (moduleIDs.length!=1) {
-                // wrong number...
-                log("Error " + path + " is a standalone module, got more than 1 targetmoduleID");
-                dumpModulesIDs("", moduleIDs);
-                return false;
-            }
-        } else {
-            for (int i=0;i<moduleIDs.length;i++) {
-                TargetModuleID parent = moduleIDs[i];
-                Target target = parent.getTarget();
-                log("Deployed on " + target.getName() + " with module ID " + parent.getModuleID());
-
-                // now look at all the children
-                TargetModuleID[] children = parent.getChildTargetModuleID();
-                if (children==null) {
-                    log("ERROR : App from " + path + " has " + app.getBundleDescriptors().size() +
-                        " modules but I didn't get any children TagetModuleID");
-                    return false;
-                }
-
-                // size is consistent ?
-                if (children.length!=app.getBundleDescriptors().size()) {
-                    log("ERROR : App from " + path + " has " + app.getBundleDescriptors().size() +
-                        " modules but I got only " + children.length +
-                        " children TagetModuleID");
-                    return false;
-                } else {
-                    log("Expected " + app.getBundleDescriptors().size() +
-                        " children TargetModuleIDs and got " + children.length);
-                }
-
-                for (int j=0;j<children.length;j++) {
-                    TargetModuleID aChild = children[j];
-                    log("Processing " + aChild.getModuleID());
-
-                    String childModuleID = aChild.getModuleID();
-                    String[] splitted = childModuleID.split("#");
-                    if (splitted.length!=2) {
-                        log("Unknown sub module id " + childModuleID);
-                        return false;
-                    }
-
-                    // check that parent TargeTModuleID is correct
-                    if (aChild.getParentTargetModuleID().equals(parent)) {
-                        log("Child's parent TargetModuleID is correctly set");
-                    } else {
-                        log("Child's parent TargetModuleID is incorrect");
-                        return false;
-                    }
-
-                    String first = splitted[0];
-                    if (first.equals(parent.getModuleID())) {
-                        log("Correct parent module id for child " + childModuleID);
-                    } else {
-                        log("Incorrect parent module id for child " + childModuleID);
-                    }
-
-                    // look for the right module descriptor..
-                    ModuleDescriptor md = app.getModuleDescriptorByUri(splitted[1]);
-                    if (md==null) {
-                        log("Cannot find module descriptor for " + childModuleID);
-                        //return false;
-                    } else {
-                        log("Found module descriptor for " + childModuleID);
-                    }
-                    if (md.getModuleType().equals(ModuleType.WAR)) {
-                        log("Web module deployed at : " + aChild.getWebURL());
-                    }
-                }
-            }
-        }
-        // if we are here, it's good !
-        return true;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/getXModules/childtmid/build.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/getXModules/childtmid/build.xml
deleted file mode 100644
index cefc68e..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/deploymentmanager/getXModules/childtmid/build.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
-]>
-
-<project name="deploytargetmoduleid" default="all" basedir=".">
-
-         &commonBuild;
-    <property name="archivedir" value="${build}/archives"/>
-
-        <target name="compile" depends="init">
-                <mkdir dir="${build}" />
-                <javac srcdir="." destdir="${env.APS_HOME}/devtests/deployment/util/build"
-                        classpath="${inst}/lib/j2ee.jar:${inst}/lib/appserv-rt.jar:../../../../util/build"
-                />
-        </target>
-
-        <target name="build-ear" unless="earfile.built">
-            <echo message="file ${build}/save/wstoejb.ear is present : ${earfile.built}"/>
-            <ant dir="../../../ear/wstoejb" target="assemble"/>
-            <mkdir dir="${build}/../save"/>
-            <copy file="${archivedir}/wstoejb.ear" todir="${build}/../save"/>
-            <copy file="${archivedir}/plan.jar" todir="${build}/../save"/>
-        </target>
-
-        <target name="private-all" depends="compile">
-                <antcall target="declare-test">
-                    <param name="description" value="jsr88/distribute/ChildTargetModuleID test TargetModuleID and its children returned from deployment"/>
-                </antcall>
-                <available property="earfile.built" file="${archivedir}/wstoejb.ear"/>
-                <antcall target="build-ear"/>
-                <antcall target="specialized.run.jsr88">
-                        <param name="deployer.class" value="jsr88.deploymentmanager.getXModules.childtmid.ChildTargetModuleIDTester"/>
-                        <param name="command" value="deploy"/>
-                        <param name="arg.list" value="true ${build}/../save/wstoejb.ear ${build}/../save/plan.jar"/>
-                </antcall>
-                <antcall target="processResult">
-                    <param name="result" value="0"/>
-                </antcall>
-                <antcall target="common.undeploy.asadmin">
-                    <param name="arg.list" value="wstoejb"/>
-                </antcall>
-        </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/ear/build.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/ear/build.xml
deleted file mode 100644
index c3afeb1..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/ear/build.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="ear" default="all" basedir=".">
-
-        &commonBuild;
-
-        <target name="private-all">
-                <ant dir="wstoejb" target="private-all">
-                        <property name="build" value="${build}/wstoejb"/>
-                </ant>
-        </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/META-INF/application-client.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/META-INF/application-client.xml
deleted file mode 100644
index 9467f3d..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/META-INF/application-client.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<application-client xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application-client_1_4.xsd">
-  <display-name>appclienttest</display-name>
-</application-client>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/META-INF/sun-application-client.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/META-INF/sun-application-client.xml
deleted file mode 100644
index f201635..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/META-INF/sun-application-client.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-application-client PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 8.0 Application Client 1.4//EN" "http://www.sun.com/softwaree/appserver/dtds/sun-application-client_1_4-0.dtd">
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<sun-application-client/>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/SimpleJSR88Client.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/SimpleJSR88Client.java
deleted file mode 100644
index 3f49164..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/SimpleJSR88Client.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-/*
- * SimpleJSR88Client.java
- *
- *Provides access to the JSR88 API through a convenient command line.
- *<p>
- *This is intended for internal testing use only.
- *
- * Created on January 21, 2004, 11:22 AM
- */
-
-import java.io.File;
-import java.util.jar.Manifest;
-
-import java.net.*;
-
-import javax.enterprise.deploy.shared.ModuleType;
-import javax.enterprise.deploy.spi.factories.*;
-import javax.enterprise.deploy.shared.factories.*;
-import javax.enterprise.deploy.spi.status.*;
-import javax.enterprise.deploy.spi.*;
-import javax.enterprise.deploy.spi.exceptions.*;
-
-//import javax.enterprise.deploy.model.*;
-
-/**
- *
- * @author  tjquinn
- */
-public class SimpleJSR88Client {
-
-
-    private final String J2EE_DEPLOYMENT_MANAGER = "J2EE-DeploymentFactory-Implementation-Class";
-
-    private DeploymentFactory deploymentFactory;
-
-    private DeploymentManager deploymentManager;
-
-    private String host;
-
-    private String port;
-
-    private String user;
-
-    private String password;
-
-    private String uri;
-
-    /** Creates a new instance of SimpleJSR88Client */
-    public SimpleJSR88Client(String host, String port, String user, String password) {
-        this.host = host;
-        this.port = port;
-        this.user = user;
-        this.password = password;
-        this.uri = "deployer:Sun:AppServer::" + host + ":" + port;
-    }
-
-    /**
-     * @param args the command line arguments
-     */
-    public static void main(String[] args) {
-        /*
-         *Get properties indicating the user, password, host, and port.
-         */
-        String host = null;
-        String port = null;
-        String user = null;
-        String password = null;
-
-        if (((host = System.getProperty("jsr88client.host")) == null)
-            || ((port = System.getProperty("jsr88client.port")) == null)
-            || ((user = System.getProperty("jsr88client.user")) == null)
-            || ((password = System.getProperty("jsr88client.password")) == null) ) {
-            System.out.println("The properties jsr88client.host, jsr88client.port, jsr88client.user, and jsr88client.password must be assigned");
-            System.exit(-1);
-        }
-
-        try {
-            new SimpleJSR88Client(host, port, user, password).run(args);
-            System.exit(0);
-        } catch (Throwable thr) {
-            System.out.println("Error executing simple JSR88 client");
-            thr.printStackTrace(System.out);
-            System.exit(1);
-        }
-    }
-
-    public void run(String[] args) throws TargetException, DeploymentManagerCreationException {
-        if (args.length == 0) {
-            throw new IllegalArgumentException("Specify the JSR88 client command you want to execute as the first command line parameter");
-        }
-
-        if (args[0].equals("getAvailableAppClientModules") ){
-            getAvailableModules(ModuleType.CAR);
-        } else {
-            throw new IllegalArgumentException("Unrecognized JSR88 client command specified: " + args[0]);
-        }
-    }
-
-    private void getAvailableModules(ModuleType type) throws TargetException, DeploymentManagerCreationException {
-        Target targets [] = getDeploymentManager().getTargets();
-        TargetModuleID [] moduleIDs = getDeploymentManager().getAvailableModules(type, targets);
-        System.out.println("Available modules listing");
-        for (int i = 0; i < moduleIDs.length; i++) {
-            System.out.println("Module " + i + ": " + moduleIDs[i].getModuleID());
-        }
-        System.out.println();
-    }
-
-    private DeploymentFactory loadDeploymentFactory() {
-        System.out.println("Loading deployment factory");
-        Object deploymentFactory = null;
-        File file = null;
-        String className = null;
-        try {
-            file = new File(System.getProperty("com.sun.aas.installRoot")
-                + File.separator+ "lib" + File.separator + "deployment"
-                + File.separator + "sun-as-jsr88-dm.jar");
-
-            Manifest mf = new java.util.jar.JarFile(file).getManifest();
-            className = mf.getMainAttributes().getValue(J2EE_DEPLOYMENT_MANAGER);
-            URL[] urls = new URL[]{file.toURL()};
-            URLClassLoader urlClassLoader = new java.net.URLClassLoader(urls, getClass().getClassLoader());
-            Class factory = null;
-            try {
-                factory=urlClassLoader.loadClass(className);
-            } catch (ClassNotFoundException cnfe) {
-                cnfe.printStackTrace();
-                System.exit(-1);
-            }
-
-            try {
-                deploymentFactory = factory.newInstance();
-            } catch (Exception ie) {
-                ie.printStackTrace();
-                System.exit(-1);
-            }
-            if (deploymentFactory instanceof DeploymentFactory) {
-                DeploymentFactoryManager.getInstance().registerDeploymentFactory((DeploymentFactory) deploymentFactory);
-            } else {
-                    System.out.println("Expected instance of DeploymentFactory from class loading of " + className + " but got " + deploymentFactory.getClass().getName() + " instead");
-                    System.exit(-1);
-            }
-
-            } catch (Exception ex) {
-                log("Failed to load the deployment factory using URL " + file.getAbsolutePath() + " and class " + className);
-                ex.printStackTrace();
-                System.exit(-1);
-            }
-            System.out.println("Deployment factory loaded.");
-            return (DeploymentFactory) deploymentFactory;
-
-    }
-
-    private static void log(String message) {
-        System.out.println("[" + getJSRClientName() + "]:: " + message);
-    }
-
-    protected static String getJSRClientName() {
-        return "SimpleJSR88Client";
-    }
-
-    protected DeploymentFactory getDeploymentFactory() {
-        if (this.deploymentFactory == null) {
-            this.deploymentFactory = loadDeploymentFactory();
-        }
-        return this.deploymentFactory;
-    }
-
-    private DeploymentManager loadDeploymentManager() throws DeploymentManagerCreationException {
-        System.out.println("Loading deployment manager using uri " + this.uri + " under user " + this.user);
-        DeploymentManager answer = getDeploymentFactory().getDeploymentManager(this.uri, this.user, this.password);
-        System.out.println("Deployment manager loaded.");
-        return answer;
-    }
-
-    protected DeploymentManager getDeploymentManager() throws DeploymentManagerCreationException {
-        if (this.deploymentManager == null) {
-            this.deploymentManager = loadDeploymentManager();
-        }
-        return this.deploymentManager;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/TestOpenJarFileWorkaround.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/TestOpenJarFileWorkaround.java
deleted file mode 100644
index f29ddc6..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/TestOpenJarFileWorkaround.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-/*
- * TestOpenJarFileWorkaround.java
- *
- * Created on February 8, 2004, 3:36 PM
- */
-
-import devtests.deployment.util.JSR88Deployer;
-
-import javax.enterprise.deploy.model.*;
-import javax.enterprise.deploy.spi.*;
-import javax.enterprise.deploy.shared.ModuleType;
-
-import java.io.File;
-
-/**
- *
- * @author  tjquinn
- */
-public class TestOpenJarFileWorkaround {
-
-    private static final String here = "devtests/deployment/jsr88/misc";
-
-    /**
-     Values taken from command-line arguments
-     */
-    private String host = null;
-    private String port = null;
-    private String user = null;
-    private String password = null;
-    private String warFileToDeploy = null;
-
-    private JSR88Deployer depl = null;
-
-    /** Creates a new instance of TestOpenJarFileWorkaround */
-    public TestOpenJarFileWorkaround() {
-    }
-
-    private void initDeployer(String host, String port, String user, String password) throws Exception {
-        log("Getting access to JSR88 deployer");
-        depl = new JSR88Deployer(host, port, user, password);
-    }
-
-    /**
-     * @param args the command line arguments
-     */
-    public static void main(String[] args) {
-        TestOpenJarFileWorkaround test = new TestOpenJarFileWorkaround();
-        try {
-            test.run(args);
-            test.pass();
-        } catch (Throwable th) {
-            th.printStackTrace(System.out);
-            test.fail();
-        }
-    }
-
-    private void log(String message) {
-        System.out.println("[TestProgressObjectImpl]:: " + message);
-    }
-
-    private void pass() {
-        log("PASSED: " + here);
-        System.exit(0);
-    }
-
-    private void fail() {
-        log("FAILED: " + here);
-        System.exit(-1);
-    }
-
-    private void prepareArgs(String[] args) {
-        if (args.length < 5) {
-            log("Expected 5 arguments (host, port, user, password, war) but found " + args.length);
-            fail();
-        }
-
-        this.host = args[0];
-        this.port = args[1];
-        this.user = args[2];
-        this.password = args[3];
-        this.warFileToDeploy = args[4];
-    }
-
-    public void run(String[] args) throws Throwable {
-
-        /*
-         *Prepare instance variables from the command-line arguments for convenience.
-         */
-        prepareArgs(args);
-
-        /*
-         *Locate the web archive to deploy.
-         */
-        File warFile = new File(this.warFileToDeploy);
-        if ( ! warFile.exists()) {
-            log("Could not find war file " + warFile.getAbsolutePath());
-            fail();
-        }
-
-        /*
-         *Initialize the deployer for use during the test.
-         */
-        initDeployer(host, port, user, password);
-
-        /*
-         *Start by deploying the web app.
-         */
-        int firstDeployResult = depl.deploy(warFile, /*deploymentPlan */ null, /* startByDefault */ true);
-
-        if (firstDeployResult != 0) {
-            log("Failed to deploy war file " + warFile.getAbsolutePath() + " the first time.");
-            fail();
-        }
-
-        /*
-         *Next, undeploy the same web app.
-         *Get the list of modules acted upon so we can specify the correct module ID to undeploy.
-         */
-        TargetModuleID [] firstListOfApps = depl.getMostRecentTargetModuleIDs();
-
-        if (firstListOfApps.length != 1) {
-            log("Expected exactly one result module from the deployer but found " + firstListOfApps.length);
-            for (int i = 0; i < firstListOfApps.length; i++) {
-                log("    " + firstListOfApps[i].getModuleID());
-            }
-            fail();
-        }
-
-        int firstUndeployResult = depl.undeploy(firstListOfApps[0].getModuleID());
-
-        if (firstUndeployResult != 0) {
-            log("Error undeploying the web application the first time.");
-            fail();
-        }
-
-        /*
-         *Now, try to deploy the app again.
-         */
-        int secondDeployResult = depl.deploy(warFile, /*deploymentPlan */ null, /* startByDefault */ true);
-
-        if (secondDeployResult != 0) {
-            log("Failed to deploy war file " + warFile.getAbsolutePath() + " the second time.");
-            fail();
-        }
-
-        /*
-         *Undeploy the web app one last time.
-         */
-        TargetModuleID [] secondListOfApps = depl.getMostRecentTargetModuleIDs();
-
-        if (secondListOfApps.length != 1) {
-            log("Expected exactly one application from the deployer but found " + secondListOfApps.length);
-            for (int i = 0; i < secondListOfApps.length; i++) {
-                log("    " + secondListOfApps[i].getModuleID());
-            }
-            fail();
-        }
-
-        int secondUndeployResult = depl.undeploy(secondListOfApps[0].getModuleID());
-
-        if (secondUndeployResult != 0) {
-            log("Error undeploying the web application the second time.");
-            fail();
-        }
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/TestProgressObjectImpl.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/TestProgressObjectImpl.java
deleted file mode 100644
index 20178cf..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/TestProgressObjectImpl.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-/*
- * TestProgressObjectImpl.java
- *
- * Created on January 15, 2004, 10:10 AM
- */
-
-import javax.enterprise.deploy.spi.status.ProgressListener;
-import org.glassfish.deployapi.ProgressObjectImpl;
-import org.glassfish.deployapi.TargetImpl;
-import org.glassfish.deployment.client.DeploymentFacilityFactory;
-import org.glassfish.deployment.client.DeploymentFacility;
-import org.glassfish.deployment.client.AbstractDeploymentFacility;
-import javax.enterprise.deploy.shared.StateType;
-
-import java.io.File;
-import java.io.PrintStream;
-import java.io.FileOutputStream;
-import java.io.FileNotFoundException;
-
-/**
- *Makes sure that the ProgressObjectImpl class functions correctly.
- *<p>
- *In particular, bug 4977764 reported that the ProgressObjectImpl class was susceptible to
- *concurrent update failures in the vector that holds registered progress listeners.  The
- *fireProgressEvent method worked with the vector of listeners itself rather than a clone of the vector.
- *One of the listeners unregistered itself from the progress object, so when the iterator tried to
- *get the next element it detected the concurrent update.   So, the progress object now clones the vector
- *temporarily in fireProgressEvent and iterates through the clone.
- *
- * @author  tjquinn
- */
-public class TestProgressObjectImpl {
-
-    private static final String here = "devtests/deployment/jsr88/misc";
-
-    /**
-     *Provides a concrete implementation of the progress object for testing.  Note that the behavior being
-     *tested is actually that of the superclass ProgressObjectImpl.
-     */
-    public class MyProgressObjectImpl extends ProgressObjectImpl {
-
-        public MyProgressObjectImpl(TargetImpl target) {
-            super(target);
-        }
-
-        /**
-         *Required by the abstract class definition but not used during testing.
-         */
-        public void run() {}
-
-        /**
-         *Stands in as an operation that fires an event to registered listeners.
-         */
-        public void act() {
-            fireProgressEvent(StateType.RUNNING, "starting");
-            /*
-             *This is where any real work would be done.  It's useful to test with two events just in case
-             *that would uncover any problems.
-             */
-            fireProgressEvent(StateType.COMPLETED, "done");
-        }
-    }
-
-    /**
-     *Adds a new listener during the event handling.
-     */
-    public class MeddlingListenerAdder implements ProgressListener {
-
-
-        public void handleProgressEvent(javax.enterprise.deploy.spi.status.ProgressEvent progressEvent) {
-            /*
-             *Meddle in the listener list by adding a new listener to the list.  This should trigger the error
-             *in the original version of ProgressObjectImpl but should not in the fixed version.
-             */
-            TestProgressObjectImpl.this.theProgressObjectImpl.addProgressListener(new TestProgressObjectImpl.MeddlingListenerRemover());
-        }
-
-    }
-
-    /**
-     *Removes itself as a listener during the event handling.
-     */
-    public class MeddlingListenerRemover implements ProgressListener {
-
-
-        public void handleProgressEvent(javax.enterprise.deploy.spi.status.ProgressEvent progressEvent) {
-            /*
-             *Meddle in the listener list by removing itself from the list.  This should trigger the error
-             *in the original version of ProgressObjectImpl but should not in the fixed version.
-             */
-            TestProgressObjectImpl.this.theProgressObjectImpl.removeProgressListener(this);
-        }
-
-    }
-
-    /* Local progress object implementation to be tested. */
-    private MyProgressObjectImpl theProgressObjectImpl;
-
-    /** Creates a new instance of TestProgressObjectImpl */
-    public TestProgressObjectImpl() {
-    }
-
-    /**
-     * @param args the command line arguments
-     */
-    public static void main(String[] args) {
-        TestProgressObjectImpl test = new TestProgressObjectImpl();
-        try {
-            test.run(args);
-            test.pass();
-        } catch (Throwable th) {
-            th.printStackTrace(System.out);
-            test.fail();
-        }
-    }
-
-    public void run(String[] args) {
-        addNewListenerDuringEventHandling();
-    }
-
-    /**
-     * Tamper with the listener list by adding a new listener during event handling.
-     */
-    private void addNewListenerDuringEventHandling() {
-        /*
-         *Create a TargetImpl just to satisfy the signature of the constructor for the progress object implementation.
-         */
-        DeploymentFacility df = DeploymentFacilityFactory.getDeploymentFacility();
-        TargetImpl target = new TargetImpl((AbstractDeploymentFacility)df, "test", "test");
-        theProgressObjectImpl = new MyProgressObjectImpl(target);
-        TestProgressObjectImpl.MeddlingListenerAdder meddlingListener1 = new TestProgressObjectImpl.MeddlingListenerAdder();
-        TestProgressObjectImpl.MeddlingListenerAdder meddlingListener2 = new TestProgressObjectImpl.MeddlingListenerAdder();
-
-        theProgressObjectImpl.addProgressListener(meddlingListener1);
-        theProgressObjectImpl.addProgressListener(meddlingListener2);
-
-        /*
-         *Fire an event that will change the listener set.
-         */
-        theProgressObjectImpl.act();
-
-    }
-
-    private void log(String message) {
-        System.out.println("[TestProgressObjectImpl]:: " + message);
-    }
-
-    private void pass() {
-        log("PASSED: " + here);
-        System.exit(0);
-    }
-
-    private void fail() {
-        log("FAILED: " + here);
-        System.exit(-1);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/build.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/build.xml
deleted file mode 100644
index 294d430..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/build.xml
+++ /dev/null
@@ -1,232 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="miscellaneousTestForJSR88" default="usage" basedir=".">
-
-    &commonBuild;
-
-    <property name="appClientName" value="appclienttest"/>
-    <property name="appClientJarFile" value="${build}/${appClientName}.jar"/>
-    <property name="appClientModuleName" value="testAppClient"/>
-
-    <property name="webServicesWorkaroundCheckWarFile" value="exampleFromJ2EETutorial/cb/provided-wars/jaxrpc-coffee-distributor.war"/>
-
-    <path id="jsr88.exec.classpath">
-        <path refid="gfv3.classpath"/>
-        <pathelement location="${env.APS_HOME}/devtests/deployment/util/build"/>
-        <pathelement location="${inst}/jdk/lib/tools.jar"/>
-    </path>
-
-    <target name="prepare" depends="init">
-        <mkdir dir="${build}"/>
-    </target>
-
-    <target name="compile" depends="prepare">
-        <javac srcdir="."
-               destdir="${build}"
-               includes="*.java"
-               debug="on"
-               failonerror="true">
-            <classpath>
-                <path refid="gfv3.classpath"/>
-                <path refid="test.compile.classpath"/>
-                <pathelement location="../../util/build"/> <!-- need this to find the JSR88Deployer -->
-            </classpath>
-        </javac>
-    </target>
-
-<!--
-        Run all the tests.
--->
-    <target name="run" depends="compile,assemble">
-        <antcall target="runTestProgressObjectImpl"/>
-        <antcall target="runGetModulesTest"/>
-        <antcall target="runOpenJarWorkaroundTest"/>
-    </target>
-
-    <!--
-        The test for the ProgressObjectImpl class is a very simple Java class with
-        a few methods.  No archives or deployments or undeployments are needed.
-        The test run should throw no exceptions if the code functions correctly.
-    -->
-    <target name="runTestProgressObjectImpl">
-        <antcall target="declare-test">
-            <param name="description" value="jsr88/misc - Test ProgressObjectImpl class (for correct management of listener list to avoid concurrent update errors)"/>
-        </antcall>
-
-        <javaWithResult classname="TestProgressObjectImpl"
-           fork="true"
-           failonerror="false"
-           output="${build}/TestProgressObjectImpl.log"
-           dir="${build}"
-           resultProperty="result"
-           >
-          <classpath>
-             <path refid="jsr88.exec.classpath"/>
-             <pathelement path="${build}"/>
-          </classpath>
-        </javaWithResult>
-
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/TestProgressObjectImpl.log"/>
-        </antcall>
-    </target>
-
-
-
-    <target name="assemble" depends="compile">
-        <antcall target="buildAppClientJar"/>
-    </target>
-
-    <target name="buildAppClientJar">
-        <!--
-            Create the application-client.xml file.
-        -->
-        <jar
-        destfile="${appClientJarFile}">
-            <fileset dir="${basedir}" includes="**/application-client.xml **/sun-application-client.xml"/>
-        </jar>
-    </target>
-
-    <!--
-        To test the ability to get information about the modules through JSR88, first deploy an app client
-        (which exposed a bug), then use JSR88 to retrieve information about app client components, then undeploy
-        the app client.
-    -->
-    <target name="runGetModulesTest" depends="assemble">
-        <antcall target="declare-test">
-            <param name="description" value="jsr88/misc - Test ApplicationsConfigMBean class (for correct handling of app client object-type and enabled)"/>
-        </antcall>
-
-        <!--
-            Deploy an app client so we can test the bug fix.
-        -->
-        <antcall target="common.deploy.asadmin">
-                <param name="arg.list" value="--name ${appClientModuleName} ${appClientJarFile}"/>
-        </antcall>
-
-         <javaWithResult
-            fork="true"
-            failonerror="false"
-            jvm="${JAVA}"
-            classname="SimpleJSR88Client"
-            resultproperty="result"
-        >
-            <sysproperty key="jsr88client.user" value="${admin.user}"/>
-            <sysproperty key="jsr88client.password" value="${admin.password}"/>
-            <sysproperty key="jsr88client.host" value="${admin.host}"/>
-            <sysproperty key="jsr88client.port" value="${admin.port}"/>
-            <sysproperty key="com.sun.aas.installRoot" value="${inst}"/>
-
-            <classpath>
-                <pathelement location="${inst}/lib/j2ee.jar"/>
-                <pathelement location="${build}"/>
-                <path refid="jsr88.exec.classpath"/>
-            </classpath>
-
-            <!--
-                The first command line argument to SimpleJSR88Client is the function to be performed.
-            -->
-            <arg line="getAvailableAppClientModules"/>
-
-        </javaWithResult>
-
-        <!--
-            Undeploy the app client that we just deployed.
-        -->
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="${appClientModuleName}"/>
-        </antcall>
-
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/GetModulesTest.log"/>
-        </antcall>
-    </target>
-
-    <!--
-        This test checks on a workaround that avoids a bug in J2SE that opens a jar file but never closes it.
-        This happens during web services compilation during deployment (in some cases) and the open jar file
-        prevents the app server from completely undeploying the app.  A later attempt to deploy the app
-        again fails because of the open jar file.  The administrator must shut down and restart the app
-        server to clear the open jar and permit the later deployment to succeed.
-
-        Deployment has worked around this problem, and this test makes sure the workaround continues to work.
-    -->
-    <target name="runOpenJarWorkaroundTest" depends="init">
-        <antcall target="declare-test">
-            <param name="description" value="jsr88/misc - Test workaround of J2SE bug that leaves a jar file open during deployment"/>
-        </antcall>
-
-        <!--
-            Run the test program that deploys, undeploys, and deploys again.
-        -->
-         <javaWithResult
-            fork="true"
-            failonerror="false"
-            output="${build}/TestOpenJarFileWorkaround.log"
-            jvm="${JAVA}"
-            classname="TestOpenJarFileWorkaround"
-            resultproperty="result"
-        >
-            <sysproperty key="jsr88client.user" value="${admin.user}"/>
-            <sysproperty key="jsr88client.password" value="${admin.password}"/>
-            <sysproperty key="jsr88client.host" value="${admin.host}"/>
-            <sysproperty key="jsr88client.port" value="${admin.port}"/>
-            <sysproperty key="com.sun.aas.installRoot" value="${inst}"/>
-
-            <classpath>
-                <pathelement location="${inst}/lib/j2ee.jar"/>
-                <pathelement location="${build}"/>
-                <pathelement location="../../util/build"/> <!-- need this to find the JSR88Deployer -->
-                <path refid="jsr88.exec.classpath"/>
-            </classpath>
-
-            <!--
-                The command line arguments are host, port, user, password, and the war to deploy.
-            -->
-            <arg line="${admin.host} ${admin.port} ${admin.user} ${admin.password} ${webServicesWorkaroundCheckWarFile}"/>
-
-        </javaWithResult>
-
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/TestOpenJarFileWorkaround.log"/>
-        </antcall>
-
-    </target>
-
-    <target name="private-all">
-        <antcall target="run"/>
-    </target>
-
-    <target name="clobber" depends="clean">
-        <delete dir="${build}"/>
-    </target>
-
-    <target name="usage">
-        <antcall target="all"/>
-    </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/build.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/build.xml
deleted file mode 100644
index 10a09b4..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/build.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<project name="Coffee Break, common" default="build" basedir=".">
-  <target name="init">
-      <tstamp/>
-  </target>
-
-  <property name="build" value="build" />
-  <property name="src" value="src" />
-
-  <target name="prepare" depends="init"
-           description="Create build directories.">
-    <mkdir dir="${build}" />
-  </target>
-
-  <!-- Executable Targets -->
-
-  <target name="compile" depends="prepare"
-     description="Compile .java files." >
-    <javac
-       srcdir="${src}"
-       destdir="${build}"
-       includes="**/*.java"
-     />
-  </target>
-
-  <target name="build" depends="compile"
-     description="Compiles source.">
-  </target>
-
-  <target name="clean"
-     description="Removes the build directory.">
-    <delete dir="${build}" />
-  </target>
-
-</project>
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/AddressBean.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/AddressBean.java
deleted file mode 100644
index f0587dd..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/AddressBean.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import java.io.Serializable;
-
-public class AddressBean implements Serializable {
-
-    private String street;
-    private String city;
-    private String state;
-    private String zip;
-
-    public AddressBean() { }
-
-    public AddressBean(String street, String city,
-        String state, String zip) {
-
-        this.street = street;
-        this.city = city;
-        this.state = state;
-        this.zip = zip;
-    }
-
-    public String getStreet() {
-        return street;
-    }
-
-    public void setStreet(String street) {
-        this.street = street;
-    }
-
-    public String getCity() {
-        return city;
-    }
-
-    public void setCity(String city) {
-        this.city = city;
-    }
-
-    public String getState() {
-        return state;
-    }
-
-    public void setState(String state) {
-        this.state = state;
-    }
-
-    public String getZip() {
-        return zip;
-    }
-
-    public void setZip(String zip) {
-        this.zip =  zip;
-    }
-
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/CoffeeBreak.properties b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/CoffeeBreak.properties
deleted file mode 100644
index c2c912a..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/CoffeeBreak.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-#
-# This program and the accompanying materials are made available under the
-# terms of the Eclipse Public License v. 2.0, which is available at
-# http://www.eclipse.org/legal/epl-2.0.
-#
-# This Source Code may also be made available under the following Secondary
-# Licenses when the conditions for such availability set forth in the
-# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-# version 2 with the GNU Classpath Exception, which is available at
-# https://www.gnu.org/software/classpath/license.html.
-#
-# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-#
-
-
-query.url=http://localhost:8082/RegistryServer/
-publish.url=http://localhost:8082/RegistryServer/
-endpoint.url=http://localhost:8080/jaxrpc-coffee-supplier/jaxrpc
-saaj.url=http://localhost:8080/saaj-coffee-supplier
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/ConfirmationBean.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/ConfirmationBean.java
deleted file mode 100644
index 0ab383d..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/ConfirmationBean.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import java.io.Serializable;
-import java.util.*;
-
-public class ConfirmationBean implements Serializable {
-
-    private String orderId;
-    private Calendar shippingDate;
-
-    public ConfirmationBean() { }
-
-    public ConfirmationBean(String orderId, Calendar shippingDate) {
-
-        this.orderId = orderId;
-        this.shippingDate = shippingDate;
-    }
-
-    public String getOrderId() {
-        return orderId;
-    }
-
-    public void setOrderId(String orderId) {
-        this.orderId = orderId;
-    }
-
-    public Calendar getShippingDate() {
-        return shippingDate;
-    }
-
-    public void setShippingDate(Calendar shippingDate) {
-        this.shippingDate = shippingDate;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/CustomerBean.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/CustomerBean.java
deleted file mode 100644
index f042d52..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/CustomerBean.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import java.io.Serializable;
-
-public class CustomerBean implements Serializable {
-
-    private String firstName;
-    private String lastName;
-    private String phoneNumber;
-    private String emailAddress;
-
-    public CustomerBean() { }
-
-    public CustomerBean(String firstName, String lastName,
-        String phoneNumber, String emailAddress) {
-
-        this.firstName = firstName;
-        this.lastName = lastName;
-        this.phoneNumber = phoneNumber;
-        this.emailAddress = emailAddress;
-    }
-
-    public String getFirstName() {
-        return firstName;
-    }
-
-    public void setFirstName(String firstName) {
-        this.firstName = firstName;
-    }
-
-    public String getLastName() {
-        return lastName;
-    }
-
-    public void setLastName(String lastName) {
-        this.lastName = lastName;
-    }
-
-    public String getPhoneNumber() {
-        return phoneNumber;
-    }
-
-    public void setPhoneNumber(String phoneNumber) {
-        this.phoneNumber = phoneNumber;
-    }
-
-    public String getEmailAddress() {
-        return emailAddress;
-    }
-
-    public void setEmailAddress(String emailAddress) {
-        this.emailAddress = emailAddress;
-    }
-
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/DateHelper.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/DateHelper.java
deleted file mode 100644
index a267359..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/DateHelper.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import java.util.*;
-import java.text.SimpleDateFormat;
-
-/**
- * This class contains helper methods for dealing with
- * Date objects.
- */
-
-public final class DateHelper {
-
-    public static final Date getDate(int year, int month, int day,
-        int hour, int minute) {
-
-        // returns a Date with the specified time elements
-
-        Calendar cal = new GregorianCalendar(year, intToCalendarMonth(month),
-            day, hour, minute);
-
-        return cal.getTime();
-
-    } // getDate
-
-    public static final Date getDate(int year, int month, int day) {
-
-        // returns a Date with the specified time elements,
-        // with the hour and minutes both set to 0 (midnight)
-
-        Calendar cal = new GregorianCalendar(year, intToCalendarMonth(month),
-            day);
-
-        return cal.getTime();
-
-    } // getDate
-
-    static public final Date addDays(Date target, int days) {
-
-        // returns a Date that is the sum of the target Date
-        // and the specified number of days;
-        // to subtract days from the target Date, the days
-        // argument should be negative
-
-        long msPerDay = 1000 * 60 * 60 * 24;
-        long msTarget = target.getTime();
-        long msSum = msTarget + (msPerDay * days);
-        Date result = new Date();
-        result.setTime(msSum);
-        return result;
-    } // addDays
-
-
-    static public int dayDiff(Date first, Date second) {
-
-        // returns the difference, in days, between the first
-        // and second Date arguments
-
-        long msPerDay = 1000 * 60 * 60 * 24;
-        long diff = (first.getTime() / msPerDay) - (second.getTime() / msPerDay);
-        Long convertLong = new Long(diff);
-        return convertLong.intValue();
-    } // dayDiff
-
-
-    static public int getYear(Date date) {
-
-        Calendar cal = new GregorianCalendar();
-        cal.setTime(date);
-        return cal.get(Calendar.YEAR);
-    } // getYear
-
-    static public int getMonth(Date date) {
-
-        Calendar cal = new GregorianCalendar();
-        cal.setTime(date);
-        int calendarMonth = cal.get(Calendar.MONTH);
-        return calendarMonthToInt(calendarMonth);
-    } // getMonth
-
-    static public int getDay(Date date) {
-
-        Calendar cal = new GregorianCalendar();
-        cal.setTime(date);
-        return cal.get(Calendar.DAY_OF_MONTH);
-    } // getDay
-
-    static public int getHour(Date date) {
-
-        Calendar cal = new GregorianCalendar();
-        cal.setTime(date);
-        return cal.get(Calendar.HOUR_OF_DAY);
-    } // geHour
-
-    static public int getMinute(Date date) {
-
-        Calendar cal = new GregorianCalendar();
-        cal.setTime(date);
-        return cal.get(Calendar.MINUTE);
-    } // geMinute
-
-    private static int calendarMonthToInt(int calendarMonth) {
-
-        if (calendarMonth == Calendar.JANUARY)
-            return 1;
-        else if (calendarMonth == Calendar.FEBRUARY)
-            return 2;
-        else if (calendarMonth == Calendar.MARCH)
-            return 3;
-        else if (calendarMonth == Calendar.APRIL)
-            return 4;
-        else if (calendarMonth == Calendar.MAY)
-            return 5;
-        else if (calendarMonth == Calendar.JUNE)
-            return 6;
-        else if (calendarMonth == Calendar.JULY)
-            return 7;
-        else if (calendarMonth == Calendar.AUGUST)
-            return 8;
-        else if (calendarMonth == Calendar.SEPTEMBER)
-            return 9;
-        else if (calendarMonth == Calendar.OCTOBER)
-            return 10;
-        else if (calendarMonth == Calendar.NOVEMBER)
-            return 11;
-        else if (calendarMonth == Calendar.DECEMBER)
-            return 12;
-        else
-            return 1;
-
-    } // calendarMonthToInt
-
-    public static String format(Date date, String pattern) {
-
-        // returns a String representation of the date argument,
-        // formatted according to the pattern argument, which
-        // has the same syntax as the argument of the SimpleDateFormat
-        // class
-
-        SimpleDateFormat formatter = new SimpleDateFormat(pattern);
-        return formatter.format(date);
-
-    } // format
-
-    public static String format(Calendar cal, String pattern) {
-
-        SimpleDateFormat formatter = new SimpleDateFormat(pattern);
-        return formatter.format(calendarToDate(cal));
-
-    } // format
-
-    private static int intToCalendarMonth(int month) {
-
-        if (month == 1)
-           return Calendar.JANUARY;
-        else if (month == 2)
-           return Calendar.FEBRUARY;
-        else if (month == 3)
-           return Calendar.MARCH;
-        else if (month == 4)
-           return Calendar.APRIL;
-        else if (month == 5)
-           return Calendar.MAY;
-        else if (month == 6)
-           return Calendar.JUNE;
-        else if (month == 7)
-           return Calendar.JULY;
-        else if (month == 8)
-           return Calendar.AUGUST;
-        else if (month == 9)
-           return Calendar.SEPTEMBER;
-        else if (month == 10)
-           return Calendar.OCTOBER;
-        else if (month == 11)
-           return Calendar.NOVEMBER;
-        else if (month == 12)
-           return Calendar.DECEMBER;
-        else
-           return Calendar.JANUARY;
-
-    } // intToCalendarMonth
-
-   public static Calendar dateToCalendar(Date date) {
-
-        Calendar cal = new GregorianCalendar();
-        cal.setTime(date);
-        return cal;
-
-    } // dateToCalendar
-
-   public static Date calendarToDate(Calendar cal) {
-
-           return cal.getTime();
-
-   } // calendarToDate
-
-} // class
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/LineItemBean.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/LineItemBean.java
deleted file mode 100644
index 17f887e..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/LineItemBean.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-
-public class LineItemBean implements Serializable {
-
-    private String coffeeName;
-    private BigDecimal pounds;
-    private BigDecimal price;
-
-    public LineItemBean() { }
-
-    public LineItemBean(String coffeeName, BigDecimal pounds,
-        BigDecimal price) {
-
-        this.coffeeName = coffeeName;
-        this.pounds = pounds;
-        this.price = price;
-    }
-
-    public String getCoffeeName() {
-        return coffeeName;
-    }
-
-    public void setCoffeeName(String coffeeName) {
-        this.coffeeName = coffeeName;
-    }
-
-    public BigDecimal getPounds() {
-        return pounds;
-    }
-
-    public void setPounds(BigDecimal pounds) {
-        this.pounds = pounds;
-    }
-
-    public BigDecimal getPrice() {
-        return price;
-    }
-
-    public void setPrice(BigDecimal price) {
-        this.price = price;
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/OrderBean.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/OrderBean.java
deleted file mode 100644
index 4e03601..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/OrderBean.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-
-public class OrderBean implements Serializable {
-
-    private String id;
-    private CustomerBean customer;
-    private LineItemBean[] lineItems;
-    private BigDecimal total;
-    private AddressBean address;
-
-    public OrderBean() {
-    }
-
-    public OrderBean( AddressBean address, CustomerBean customer, String id,
-        LineItemBean[] lineItems, BigDecimal total) {
-
-        this.id = id;
-        this.customer = customer;
-        this.total = total;
-        this.lineItems = lineItems;
-        this.address = address;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public CustomerBean getCustomer() {
-        return customer;
-    }
-
-    public void setCustomer(CustomerBean customer) {
-        this.customer = customer;
-    }
-
-    public BigDecimal getTotal() {
-        return total;
-    }
-
-    public void setTotal(BigDecimal total) {
-        this.total = total;
-    }
-
-    public LineItemBean[] getLineItems() {
-        return lineItems;
-    }
-
-    public void setLineItems(LineItemBean[] lineItems) {
-        this.lineItems = lineItems;
-    }
-
-    public AddressBean getAddress() {
-        return address;
-    }
-
-    public void setAddress(AddressBean address) {
-        this.address = address;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/PriceItemBean.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/PriceItemBean.java
deleted file mode 100644
index b4124e1..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/PriceItemBean.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-
-public class PriceItemBean implements Serializable {
-
-    private String coffeeName;
-    private BigDecimal pricePerPound;
-
-    public PriceItemBean() { }
-
-    public PriceItemBean(String coffeeName, BigDecimal pricePerPound) {
-
-        this.coffeeName = coffeeName;
-        this.pricePerPound = pricePerPound;
-    }
-
-    public String getCoffeeName() {
-        return coffeeName;
-    }
-
-    public void setCoffeeName(String coffeeName) {
-        this.coffeeName = coffeeName;
-    }
-
-    public BigDecimal getPricePerPound() {
-        return pricePerPound;
-    }
-
-    public void setPricePerPound(BigDecimal pricePerPound) {
-        this.pricePerPound = pricePerPound;
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/PriceListBean.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/PriceListBean.java
deleted file mode 100644
index cdec3a7..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/PriceListBean.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import java.io.Serializable;
-import java.util.*;
-
-public class PriceListBean implements Serializable {
-
-    private Calendar startDate;
-    private Calendar endDate;
-    private PriceItemBean[] priceItems;
-
-    public PriceListBean() {
-    }
-
-    public PriceListBean(Calendar startDate, Calendar endDate,
-        PriceItemBean[] priceItems) {
-
-        this.startDate = startDate;
-        this.endDate = endDate;
-        this.priceItems = priceItems;
-    }
-
-    public Calendar getStartDate() {
-        return startDate;
-    }
-
-    public void setStartDate(Calendar date) {
-        this.startDate = date;
-    }
-
-    public Calendar getEndDate() {
-        return endDate;
-    }
-
-    public void setEndDate(Calendar date) {
-        this.endDate = date;
-    }
-
-    public PriceItemBean[] getPriceItems() {
-        return priceItems;
-    }
-
-    public void setPriceItems(PriceItemBean[] priceItems) {
-        this.priceItems = priceItems;
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/URLHelper.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/URLHelper.java
deleted file mode 100644
index de381cf..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/common/src/com/sun/cb/URLHelper.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-import java.util.ResourceBundle;
-
-public final class URLHelper {
-
-    public static final String getSaajURL() {
-
-        ResourceBundle registryBundle =
-           ResourceBundle.getBundle("com.sun.cb.CoffeeBreak");
-
-        String saajURL = registryBundle.getString("saaj.url");
-
-
-        return saajURL;
-
-    } // getDate
-
-    public static final String getEndpointURL() {
-
-        ResourceBundle registryBundle =
-           ResourceBundle.getBundle("com.sun.cb.CoffeeBreak");
-
-        String endPointURL = registryBundle.getString("endpoint.url");
-
-
-        return endPointURL;
-
-    } // getDate
-
-    public static final String getQueryURL() {
-
-        ResourceBundle registryBundle =
-           ResourceBundle.getBundle("com.sun.cb.CoffeeBreak");
-
-        String queryURL = registryBundle.getString("query.url");
-
-
-        return queryURL;
-
-    } // getDate
-
-    public static final String getPublishURL() {
-
-        ResourceBundle registryBundle =
-           ResourceBundle.getBundle("com.sun.cb.CoffeeBreak");
-
-        String publishURL = registryBundle.getString("publish.url");
-
-        return publishURL;
-
-    } // getDate
-
-
-} // class
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/build.properties b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/build.properties
deleted file mode 100644
index 8599a87..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/build.properties
+++ /dev/null
@@ -1,55 +0,0 @@
-<!--
-
-    Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-
-# This file is referenced by the build.xml file.
-
-wscompile.dir=${j2ee.home}/bin
-
-example=supplier
-package=com.sun.cb
-package.path=com/sun/cb
-
-build=build
-server.src=src/server/${package.path}
-client.src=src/client/${package.path}
-registry.src=src/registry/${package.path}
-dist=dist
-common=../common/build
-
-stage.ear=stage-ear
-stage.war=stage-war
-
-wsdl.file=Supplier.wsdl
-client.class=${package}.SupplierClient
-
-config.wsdl.file=config-wsdl.xml
-config.interface.file=config-interface.xml
-start.interface.file=conf/start-interface.xml
-server.start.wsdl.file=conf/server-start-wsdl.xml
-client.start.wsdl.file=conf/client-start-wsdl.xml
-mapping.file=mapping.xml
-
-context.path=jaxrpc-coffee-supplier
-url.pattern=jaxrpc
-client.jar=jaxrpc-client.jar
-registry.jar=registry-org.jar
-war.file=${context.path}.war
-
-endpoint-address=http://localhost:${domain.resources.port}/${context.path}/${url.pattern}
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/build.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/build.xml
deleted file mode 100644
index 3cfefa9..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/build.xml
+++ /dev/null
@@ -1,289 +0,0 @@
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<project name="Coffee Break Supplier, JAX-RPC" default="build-service" basedir=".">
-
-  <property file="../../common/build.properties"/>
-  <property file="build.properties"/>
-
-<!-- ========================== CLASSPATHS ============================= -->
-
-  <path id="run.classpath">
-    <fileset dir="${dist}">
-      <include name="*.jar"/>
-    </fileset>
-    <fileset dir="${j2ee.home}/lib">
-      <include name="*.jar"/>
-    </fileset>
-    <fileset dir="${j2ee.home}/lib/endorsed">
-      <include name="*.jar"/>
-    </fileset>
-  </path>
-
-  <path id="compile.classpath">
-    <pathelement location="${build}/server"/>
-    <pathelement location="${common}"/>
-    <fileset dir="${j2ee.home}/lib">
-      <include name="*.jar"/>
-    </fileset>
-  </path>
-
- <!-- ========================== PREPARE ============================= -->
-
-  <target name="prepare"
-     description="Creates the build and dist directories" >
-     <echo message="Creating the required directories...." />
-     <mkdir dir="${build}/client" />
-     <mkdir dir="${build}/server" />
-     <mkdir dir="${build}/registry" />
-     <mkdir dir="${dist}" />
-   </target>
-
-   <target name="init">
-      <tstamp/>
-   </target>
-
-
- <!-- ========================== WSCOMPILE ============================= -->
-
- <target name="set-wscompile" >
-     <condition property="wscompile" value="${wscompile.dir}/wscompile.bat">
-        <os family="windows"/>
-     </condition>
-     <condition property="wscompile" value="${wscompile.dir}/wscompile">
-        <not>
-           <os family="windows"/>
-        </not>
-     </condition>
-  </target>
-
-  <target name="run-wscompile"  depends="prepare,set-wscompile"
-       description="Runs wscompile">
-    <echo message="Running wscompile:"/>
-    <echo message="  ${wscompile} ${param1}"/>
-    <exec executable="${wscompile}">
-       <arg line="${param1}"/>
-    </exec>
-  </target>
-
-  <target name="generate-wsdl"
-      description="Runs wscompile to generate the WSDL file">
-    <antcall target="run-wscompile">
-      <param name="param1" value="-define -mapping ${build}/server/${mapping.file} -d ${build}/server -nd ${build}/server  -classpath ${build}/server ${config.interface.file}"/>
-    </antcall>
-  </target>
-
-  <target name="generate-stubs"
-      description="Runs wscompile to generate the client stub classes">
-    <antcall target="run-wscompile">
-      <param name="param1" value="-gen:client -d ${build}/client -classpath ${build}/client ${config.wsdl.file}"/>
-    </antcall>
-  </target>
-
-<!-- ========================== COMPILE ============================= -->
-
-  <target name="compile-common" depends="prepare"
-      description="Compiles the common beans">
-      <echo message="Compiling the common bean source code...."/>
-      <ant antfile="../common/build.xml"
-           dir="../common"
-           target="build">
-      </ant>
-  </target>
-
-  <target name="compile-service" depends="prepare"
-      description="Compiles the server-side source code">
-      <echo message="Compiling the server-side source code...."/>
-      <javac
-         srcdir="${server.src}"
-         destdir="${build}/server"
-         classpath="${common}:dist/${registry.jar}"
-         includes="*.java"
-      />
-     <copy todir="${build}/server/${package.path}">
-         <fileset dir="src/server/${package.path}">
-         <include name="*.properties"/>
-         </fileset>
-     </copy>
-  </target>
-
-  <target name="compile-registry" depends="prepare"
-        description="Compiles the registry source code"  >
-        <echo message="Compiling the registry source code...."/>
-      <javac srcdir="${registry.src}" destdir="${build}/registry">
-          <include name="**/*.java" />
-          <classpath refid="compile.classpath"/>
-      </javac>
-      <javac
-         srcdir="../common/src"
-         destdir="${build}/registry"
-         includes="**/URLHelper.java"
-      >
-      <classpath refid="compile.classpath" />
-      <classpath path="${common}" />
-      </javac>
-      <copy file="../common/src/${package.path}/CoffeeBreak.properties"
-        todir="${build}/registry/${package.path}" />
-  </target>
-
-  <target name="compile-client" depends="prepare"
-         description="Compiles the client-side source code"  >
-         <echo message="Compiling the client source code...."/>
-       <javac srcdir="${client.src}" destdir="${build}/client">
-           <include name="**/*.java" />
-           <classpath refid="compile.classpath"/>
-       </javac>
-  </target>
-
- <!-- ========================== COPY & REMOVE ===================== -->
-
-  <target name="copy-common-service"
-     description="Copies common class files to build/service
-        because multiple classpaths for a wscompile command run
-        within ant do not work.">
-     <echo message="Copying common classes...."/>
-     <copy todir="${build}/server/${package.path}">
-         <fileset dir="../common/build/${package.path}"  />
-     </copy>
-  </target>
-
-    <target name="copy-common-client"
-       description="Copies common class files to build/client
-       but doesn't copy beans because they are created w. generate-stubs.">
-       <echo message="Copying common classes...."/>
-       <copy file="../common/build/${package.path}/DateHelper.class"
-        todir="${build}/client/${package.path}"/>
-    </target>
-
-
-<!-- ========================== PACKAGE ============================= -->
-
-
-  <target name="package-client"
-      description="Builds the JAR file that contains the client ">
-      <echo message="Building the client JAR file...."/>
-      <delete file="${dist}/${client.jar}" />
-      <jar jarfile="${dist}/${client.jar}" >
-        <fileset dir="${build}/client" />
-      </jar>
-  </target>
-
-  <target name="package-registry"
-      description="Builds the JAR file that contains the registry routines">
-      <echo message="Building the registry JAR file...."/>
-      <copy file="${registry.src}/CoffeeRegistry.properties" todir="${build}/registry/${package.path}" />
-      <delete file="${dist}/${registry.jar}" />
-      <jar jarfile="${dist}/${registry.jar}" >
-        <fileset dir="${build}/registry" />
-      </jar>
-  </target>
-
-
-<!-- ========================== RUN ============================= -->
-
-  <target name="run-test-order"
-     description="Runs TestOrderCaller">
-     <antcall target="run-test-client">
-       <param name="client.class" value="com.sun.cb.TestOrderCaller"/>
-     </antcall>
-  </target>
-
-  <target name="run-test-price"
-     description="Runs TestPriceFetcher">
-     <antcall target="run-test-client">
-       <param name="client.class" value="com.sun.cb.TestPriceFetcher"/>
-     </antcall>
-  </target>
-
-  <target name="run-test-client"
-     description="Runs a test JAX-RPC client.">
-      <java
-            fork="on"
-            classpath="dist/${client.jar}"
-            classname="${client.class}" >
-           <arg value="${endpoint-address}" />
-                       <classpath refid="run.classpath" />
-      </java>
-  </target>
-
-  <target name="run-registry-publish"
-     description="Publishes an organization in the registry server.  Note: You must start the registry server before executing this task." >
-     <echo message="Running OrgPublisher." />
-     <echo message="Note: Remember to start the registry server before running this program." />
-    <java classname="com.sun.cb.OrgPublisher"
-      fork="yes"
-      classpath="dist/${registry.jar}" >
-      <classpath refid="run.classpath" />
-      <sysproperty key="useSOAP" value="false"/>
-    </java>
-  </target>
-
-  <target name="run-registry-remove"
-     description="Removes an organization from the registry. Note: You must start the registry server before executing this task." >
-     <echo message="Running OrgRemover." />
-     <echo message="Note: Remember to start the registry server before running this program." />
-    <java classname="com.sun.cb.OrgRemover"
-      fork="yes"
-      classpath="dist/${registry.jar}:${foo}" >
-      <classpath refid="run.classpath" />
-      <sysproperty key="useSOAP" value="false"/>
-    </java>
-  </target>
-
-<!-- ========================== BUILD ============================= -->
-
-
-
-   <target name="build-service"
-       depends="compile-service,copy-common-service,generate-wsdl"
-       description="Executes the targets needed to build the service.">
-    </target>
-
-    <target name="build-client"
-       depends="generate-stubs,copy-common-client,compile-client,package-client"
-       description="Executes the targets needed to build the client files.">
-    </target>
-
-    <target name="build-registry"
-        depends="compile-registry,package-registry"
-        description="Executes the targets needed to build the registry JAR.">
-    </target>
-
-
-<!-- ========================== UTIL ============================= -->
-
-
-  <target name="clean"
-     description="Removes the build and dist directory">
-    <delete dir="${build}" />
-    <delete dir="dist" />
-  </target>
-
-  <target name="listprops" depends="set-wscompile"
-     description="Displays values of some of the properties of this build file">
-     <echo message="j2ee.home: ${j2ee.home}" />
-     <echo message="foo: ${foo}" />
-     <echo message="war.file: ${war.file}" />
-     <echo message="client.jar: ${client.jar}" />
-     <echo message="registry.jar: ${registry.jar}" />
-     <echo message="wscompile: ${wscompile}" />
-     <echo message="endpoint-address:  ${endpoint-address}" />
-  </target>
-
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/conf/client-start-wsdl.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/conf/client-start-wsdl.xml
deleted file mode 100644
index 69d19c4..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/conf/client-start-wsdl.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<configuration
-         xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
-  <wsdl location="http://localhost:8080/jaxrpc-coffee-supplier/jaxrpc?WSDL"
-       packageName="com.sun.cb"/>
-</configuration>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/conf/server-start-wsdl.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/conf/server-start-wsdl.xml
deleted file mode 100644
index 90b0b4e..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/conf/server-start-wsdl.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<configuration
-         xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
-  <wsdl location="build/Supplier.wsdl"
-       packageName="com.sun.cb"/>
-</configuration>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/conf/start-interface.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/conf/start-interface.xml
deleted file mode 100644
index 3c3d693..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/conf/start-interface.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<configuration
-  xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
-  <service
-      name="Supplier"
-      targetNamespace="urn:Foo"
-      typeNamespace="urn:Foo"
-      packageName="com.sun.cb">
-      <interface name="com.sun.cb.SupplierIF"/>
-      <typeMappingRegistry>
-         <additionalTypes>
-           <class name="com.sun.cb.PriceItemBean"/>
-           <class name="com.sun.cb.LineItemBean"/>
-         </additionalTypes>
-       </typeMappingRegistry>
-  </service>
-</configuration>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/config-interface.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/config-interface.xml
deleted file mode 100644
index 3c3d693..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/config-interface.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<configuration
-  xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
-  <service
-      name="Supplier"
-      targetNamespace="urn:Foo"
-      typeNamespace="urn:Foo"
-      packageName="com.sun.cb">
-      <interface name="com.sun.cb.SupplierIF"/>
-      <typeMappingRegistry>
-         <additionalTypes>
-           <class name="com.sun.cb.PriceItemBean"/>
-           <class name="com.sun.cb.LineItemBean"/>
-         </additionalTypes>
-       </typeMappingRegistry>
-  </service>
-</configuration>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/config-wsdl.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/config-wsdl.xml
deleted file mode 100644
index 69d19c4..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/config-wsdl.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<configuration
-         xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
-  <wsdl location="http://localhost:8080/jaxrpc-coffee-supplier/jaxrpc?WSDL"
-       packageName="com.sun.cb"/>
-</configuration>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/client/com/sun/cb/OrderCaller.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/client/com/sun/cb/OrderCaller.java
deleted file mode 100644
index a624df5..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/client/com/sun/cb/OrderCaller.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-import javax.xml.rpc.Stub;
-
-public class OrderCaller {
-
-    private SupplierIF supplier;
-
-    public OrderCaller(String endpoint) {
-
-        try {
-                    Stub stub = (Stub)(new Supplier_Impl().getSupplierIFPort());
-            //stub = (SupplierIF_Stub)(new Supplier_Impl().getSupplierIFPort());
-            stub._setProperty(
-                javax.xml.rpc.Stub.ENDPOINT_ADDRESS_PROPERTY,
-                endpoint);
-            supplier = (SupplierIF) stub;
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        }
-    }
-
-
-    public ConfirmationBean placeOrder(OrderBean order) {
-
-        ConfirmationBean result = null;
-        try {
-            result = supplier.placeOrder(order);
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        }
-        return result;
-    }
-
-} // class
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/client/com/sun/cb/PriceFetcher.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/client/com/sun/cb/PriceFetcher.java
deleted file mode 100644
index 7fc7113..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/client/com/sun/cb/PriceFetcher.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-public final class PriceFetcher {
-
-    public static final PriceListBean getPriceList(String endpoint) {
-
-        PriceListBean result = null;
-
-        try {
-            SupplierIF_Stub stub =
-                (SupplierIF_Stub)(new Supplier_Impl().getSupplierIFPort());
-            stub._setProperty(
-                javax.xml.rpc.Stub.ENDPOINT_ADDRESS_PROPERTY,
-                endpoint);
-            result = stub.getPriceList();
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        }
-
-        return result;
-
-    } // getPriceList
-
-} // class
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/client/com/sun/cb/TestOrderCaller.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/client/com/sun/cb/TestOrderCaller.java
deleted file mode 100644
index f565d08..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/client/com/sun/cb/TestOrderCaller.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import java.math.BigDecimal;
-import java.util.*;
-
-public class TestOrderCaller {
-    public static void main(String[] args) {
-        try {
-
-            AddressBean address = new AddressBean("455 Apple Way",
-               "Santa Clara", "CA", "95123");
-            CustomerBean customer = new CustomerBean("Buzz",
-               "Murphy", "247-5566", "buzz.murphy@clover.com");
-
-            LineItemBean itemA = new LineItemBean("mocha", new BigDecimal("1.0"), new BigDecimal("9.50"));
-            LineItemBean itemB = new LineItemBean("special blend", new BigDecimal("5.0"), new BigDecimal("8.00"));
-            LineItemBean itemC = new LineItemBean("wakeup call", new BigDecimal("0.5"), new BigDecimal("10.00"));
-            LineItemBean[] lineItems = {itemA, itemB, itemC};
-
-            OrderBean order = new OrderBean(address, customer, "123", lineItems,
-                new BigDecimal("55.67"));
-
-            OrderCaller oc = new OrderCaller(args[0]);
-            ConfirmationBean confirmation = oc.placeOrder(order);
-
-            System.out.println(confirmation.getOrderId()  + " " +
-                DateHelper.format(confirmation.getShippingDate(), "MM/dd/yy"));
-
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        }
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/client/com/sun/cb/TestPriceFetcher.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/client/com/sun/cb/TestPriceFetcher.java
deleted file mode 100644
index d523f54..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/client/com/sun/cb/TestPriceFetcher.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import java.math.BigDecimal;
-import java.util.*;
-
-public class TestPriceFetcher {
-
-    public static void main(String[] args) {
-        try {
-
-            PriceListBean priceList = PriceFetcher.getPriceList(args[0]);
-            System.out.println(args[0]);
-            System.out.println(
-                DateHelper.format(priceList.getStartDate(), "MM/dd/yy")
-                + " " +
-                DateHelper.format(priceList.getEndDate(), "MM/dd/yy"));
-
-            PriceItemBean[] items = priceList.getPriceItems();
-            for (int i = 0; i < items.length; i++) {
-            System.out.println(
-                items[i].getCoffeeName() + " " + items[i].getPricePerPound());
-            }
-
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        }
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/registry/com/sun/cb/CoffeeRegistry.properties b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/registry/com/sun/cb/CoffeeRegistry.properties
deleted file mode 100644
index ffb5e08..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/registry/com/sun/cb/CoffeeRegistry.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-#
-# This program and the accompanying materials are made available under the
-# terms of the Eclipse Public License v. 2.0, which is available at
-# http://www.eclipse.org/legal/epl-2.0.
-#
-# This Source Code may also be made available under the following Secondary
-# Licenses when the conditions for such availability set forth in the
-# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-# version 2 with the GNU Classpath Exception, which is available at
-# https://www.gnu.org/software/classpath/license.html.
-#
-# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-#
-
-
-registry.username=testuser
-registry.password=testuser
-org.name=JAXRPCCoffeeDistributor
-org.description=A supplier of fine coffees since 2002.
-person.name=Jane Doe
-phone.number=(800) 555-1212
-email.address=jane.doe@jaxrpccoffee.com
-classification.scheme=ntis-gov:naics
-classification.name=Other Grocery and Related Products Wholesalers
-classification.value=42249
-service.name=JAXRPCCoffee Service
-service.description=JAXRPCCoffee Service description
-service.binding=JAXRPCCoffee Service binding
-key.file=orgkey.txt
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/registry/com/sun/cb/JAXRPublisher.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/registry/com/sun/cb/JAXRPublisher.java
deleted file mode 100644
index 122a0f8..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/registry/com/sun/cb/JAXRPublisher.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import javax.xml.registry.*;
-import javax.xml.registry.infomodel.*;
-import java.net.*;
-import java.security.*;
-import java.util.*;
-import javax.naming.*;
-
-/**
- * The JAXRPublisher class consists of a makeConnection
- * method and an executePublish method. The makeConnection
- * method establishes a connection to the Registry Server.
- * The executePublish method creates an organization and
- * publishes it to the registry.
- */
-public class JAXRPublisher {
-
-    Connection connection = null;
-
-    public JAXRPublisher() {}
-
-    /**
-     * Establishes a connection to a registry.
-     *
-     * @param queryUrl        the URL of the query registry
-     * @param publishUrl        the URL of the publish registry
-     */
-    public void makeConnection(String queryUrl,
-        String publishUrl) {
-
-        Context           context = null;
-        ConnectionFactory factory = null;
-
-        /*
-         * Define connection configuration properties.
-         * To publish, you need both the query URL and the
-         * publish URL.
-         */
-        Properties props = new Properties();
-        props.setProperty("javax.xml.registry.queryManagerURL",
-            queryUrl);
-        props.setProperty("javax.xml.registry.lifeCycleManagerURL",
-            publishUrl);
-
-        try {
-            // Create the connection, passing it the
-            // configuration properties
-            context = new InitialContext();
-            factory = (ConnectionFactory)
-                context.lookup("java:comp/env/eis/JAXR");
-            factory.setProperties(props);
-            connection = factory.createConnection();
-            System.out.println("Created connection to registry");
-        } catch (Exception e) {
-            e.printStackTrace();
-            if (connection != null) {
-                try {
-                    connection.close();
-                } catch (JAXRException je) {}
-            }
-        }
-    }
-
-    /**
-     * Creates an organization, its classification, and its
-     * services, and saves it to the registry.
-     */
-    public String executePublish(String username,
-        String password, String endpoint) {
-
-        String id = null;
-        RegistryService rs = null;
-        BusinessLifeCycleManager blcm = null;
-        BusinessQueryManager bqm = null;
-
-        try {
-            rs = connection.getRegistryService();
-            blcm = rs.getBusinessLifeCycleManager();
-            bqm = rs.getBusinessQueryManager();
-            System.out.println("Got registry service, query " +
-                "manager, and life cycle manager");
-
-            // Get authorization from the registry
-            PasswordAuthentication passwdAuth =
-                new PasswordAuthentication(username,
-                    password.toCharArray());
-
-            Set creds = new HashSet();
-            creds.add(passwdAuth);
-            connection.setCredentials(creds);
-            System.out.println("Established security credentials");
-
-            // Get hardcoded strings from a ResourceBundle
-            ResourceBundle bundle =
-                ResourceBundle.getBundle("com.sun.cb.CoffeeRegistry");
-
-            // Create organization name and description
-            Organization org =
-                blcm.createOrganization(bundle.getString("org.name"));
-            InternationalString s =
-                blcm.createInternationalString
-                (bundle.getString("org.description"));
-            org.setDescription(s);
-
-            // Create primary contact, set name
-            User primaryContact = blcm.createUser();
-            PersonName pName =
-                blcm.createPersonName(bundle.getString("person.name"));
-            primaryContact.setPersonName(pName);
-
-            // Set primary contact phone number
-            TelephoneNumber tNum = blcm.createTelephoneNumber();
-            tNum.setNumber(bundle.getString("phone.number"));
-            Collection phoneNums = new ArrayList();
-            phoneNums.add(tNum);
-            primaryContact.setTelephoneNumbers(phoneNums);
-
-            // Set primary contact email address
-            EmailAddress emailAddress =
-                blcm.createEmailAddress(bundle.getString("email.address"));
-            Collection emailAddresses = new ArrayList();
-            emailAddresses.add(emailAddress);
-            primaryContact.setEmailAddresses(emailAddresses);
-
-            // Set primary contact for organization
-            org.setPrimaryContact(primaryContact);
-
-            // Set classification scheme to NAICS
-            ClassificationScheme cScheme =
-                bqm.findClassificationSchemeByName
-                    (null, bundle.getString("classification.scheme"));
-
-            // Create and add classification
-            Classification classification = (Classification)
-                blcm.createClassification(cScheme,
-                    bundle.getString("classification.name"),
-                    bundle.getString("classification.value"));
-            Collection classifications = new ArrayList();
-            classifications.add(classification);
-            org.addClassifications(classifications);
-
-            // Create services and service
-            Collection services = new ArrayList();
-            Service service =
-                blcm.createService(bundle.getString("service.name"));
-            InternationalString is =
-                blcm.createInternationalString
-                (bundle.getString("service.description"));
-            service.setDescription(is);
-
-            // Create service bindings
-            Collection serviceBindings = new ArrayList();
-            ServiceBinding binding = blcm.createServiceBinding();
-            is = blcm.createInternationalString
-                (bundle.getString("service.binding"));
-            binding.setDescription(is);
-                                           binding.setValidateURI(false);
-            binding.setAccessURI(endpoint);
-            serviceBindings.add(binding);
-
-            // Add service bindings to service
-            service.addServiceBindings(serviceBindings);
-
-            // Add service to services, then add services to organization
-            services.add(service);
-            org.addServices(services);
-
-            // Add organization and submit to registry
-            // Retrieve key if successful
-            Collection orgs = new ArrayList();
-            orgs.add(org);
-            BulkResponse response = blcm.saveOrganizations(orgs);
-            Collection exceptions = response.getExceptions();
-            if (exceptions == null) {
-                System.out.println("Organization saved");
-
-                Collection keys = response.getCollection();
-                Iterator keyIter = keys.iterator();
-                if (keyIter.hasNext()) {
-                    javax.xml.registry.infomodel.Key orgKey =
-                        (javax.xml.registry.infomodel.Key) keyIter.next();
-                    id = orgKey.getId();
-                    System.out.println("Organization key is " + id);
-                }
-            } else {
-                Iterator excIter = exceptions.iterator();
-                Exception exception = null;
-                while (excIter.hasNext()) {
-                    exception = (Exception) excIter.next();
-                    System.err.println("Exception on save: " +
-                        exception.toString());
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            if (connection != null) {
-                try {
-                    connection.close();
-                } catch (JAXRException je) {
-                    System.err.println("Connection close failed");
-                }
-            }
-        }
-    return id;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/registry/com/sun/cb/JAXRRemover.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/registry/com/sun/cb/JAXRRemover.java
deleted file mode 100644
index c53e045..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/registry/com/sun/cb/JAXRRemover.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import javax.xml.registry.*;
-import javax.xml.registry.infomodel.*;
-import java.net.*;
-import java.security.*;
-import java.util.*;
-import javax.naming.*;
-
-/**
- * The JAXRRemover class consists of a makeConnection method,
- * a createOrgKey method, and an executeRemove method. It
- * finds and deletes the organization that the OrgPublisher
- * class created.
- */
-public class JAXRRemover {
-
-    Connection connection = null;
-    RegistryService rs = null;
-
-    public JAXRRemover() {}
-
-    /**
-     * Establishes a connection to a registry.
-     *
-     * @param queryUrl        the URL of the query registry
-     * @param publishUrl        the URL of the publish registry
-     */
-    public void makeConnection(String queryUrl,
-        String publishUrl) {
-
-        Context           context = null;
-        ConnectionFactory factory = null;
-        /*
-         * Define connection configuration properties.
-         * To delete, you need both the query URL and the
-         * publish URL.
-         */
-        Properties props = new Properties();
-        props.setProperty("javax.xml.registry.queryManagerURL",
-            queryUrl);
-        props.setProperty("javax.xml.registry.lifeCycleManagerURL",
-            publishUrl);
-
-        try {
-            // Create the connection, passing it the
-            // configuration properties
-            context = new InitialContext();
-            factory = (ConnectionFactory)
-                context.lookup("java:comp/env/eis/JAXR");
-            factory.setProperties(props);
-            connection = factory.createConnection();
-            System.out.println("Created connection to registry");
-        } catch (Exception e) {
-            e.printStackTrace();
-            if (connection != null) {
-                try {
-                    connection.close();
-                } catch (JAXRException je) {}
-            }
-        }
-    }
-
-    /**
-     * Searches for the organization created by the JAXRPublish
-     * program, verifying it by checking that the key strings
-     * match.
-     *
-     * @param keyStr        the key of the published organization
-     *
-     * @return        the key of the organization found
-     */
-    public javax.xml.registry.infomodel.Key createOrgKey(String keyStr) {
-
-        BusinessLifeCycleManager blcm = null;
-        javax.xml.registry.infomodel.Key orgKey = null;
-
-        try {
-            rs = connection.getRegistryService();
-            blcm = rs.getBusinessLifeCycleManager();
-            System.out.println("Got registry service and " +
-                "life cycle manager");
-
-            orgKey = blcm.createKey(keyStr);
-        } catch (Exception e) {
-            e.printStackTrace();
-            if (connection != null) {
-                try {
-                    connection.close();
-                } catch (JAXRException je) {
-                    System.err.println("Connection close failed");
-                }
-            }
-        }
-        return orgKey;
-    }
-
-    /**
-     * Removes the organization with the specified key value.
-     *
-     * @param key        the Key of the organization
-     */
-    public void executeRemove(javax.xml.registry.infomodel.Key key,
-        String username, String password) {
-
-        BusinessLifeCycleManager blcm = null;
-
-        try {
-            blcm = rs.getBusinessLifeCycleManager();
-
-            // Get authorization from the registry
-            PasswordAuthentication passwdAuth =
-                new PasswordAuthentication(username,
-                    password.toCharArray());
-
-            Set creds = new HashSet();
-            creds.add(passwdAuth);
-            connection.setCredentials(creds);
-            System.out.println("Established security credentials");
-
-            String id = key.getId();
-            System.out.println("Deleting organization with id " + id);
-            Collection keys = new ArrayList();
-            keys.add(key);
-            BulkResponse response = blcm.deleteOrganizations(keys);
-            Collection exceptions = response.getExceptions();
-            if (exceptions == null) {
-                System.out.println("Organization deleted");
-                Collection retKeys = response.getCollection();
-                Iterator keyIter = retKeys.iterator();
-                javax.xml.registry.infomodel.Key orgKey = null;
-                if (keyIter.hasNext()) {
-                    orgKey = (javax.xml.registry.infomodel.Key) keyIter.next();
-                    id = orgKey.getId();
-                    System.out.println("Organization key was " + id);
-                }
-            } else {
-                Iterator excIter = exceptions.iterator();
-                Exception exception = null;
-                while (excIter.hasNext()) {
-                    exception = (Exception) excIter.next();
-                    System.err.println("Exception on delete: " +
-                    exception.toString());
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally  {
-            // At end, close connection to registry
-            if (connection != null) {
-                try {
-                    connection.close();
-                } catch (JAXRException je) {
-                    System.err.println("Connection close failed");
-                }
-            }
-        }
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/registry/com/sun/cb/OrgPublisher.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/registry/com/sun/cb/OrgPublisher.java
deleted file mode 100644
index 1024fd1..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/registry/com/sun/cb/OrgPublisher.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import javax.xml.registry.*;
-import java.util.ResourceBundle;
-import java.io.*;
-
-public class OrgPublisher {
-
-    public static void main(String[] args) {
-
-        String queryURL = URLHelper.getQueryURL();
-        String publishURL = URLHelper.getPublishURL();
-        String endpoint = URLHelper.getEndpointURL();
-
-        ResourceBundle registryBundle =
-           ResourceBundle.getBundle("com.sun.cb.CoffeeRegistry");
-
-        String username =
-            registryBundle.getString("registry.username");
-        String password =
-            registryBundle.getString("registry.password");
-        String keyFile = registryBundle.getString("key.file");
-
-        JAXRPublisher publisher = new JAXRPublisher();
-        publisher.makeConnection(queryURL, publishURL);
-        String key = publisher.executePublish(username,
-            password, endpoint);
-        try {
-            FileWriter out = new FileWriter(keyFile);
-            out.write(key);
-            out.flush();
-            out.close();
-        } catch (IOException ex) {
-            System.out.println(ex.getMessage());
-        }
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/registry/com/sun/cb/OrgRemover.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/registry/com/sun/cb/OrgRemover.java
deleted file mode 100644
index fbd8771..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/registry/com/sun/cb/OrgRemover.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import java.util.ResourceBundle;
-import javax.xml.registry.*;
-import javax.xml.registry.infomodel.Key;
-import java.io.*;
-
-public class OrgRemover {
-
-    Connection connection = null;
-
-    public static void main(String[] args) {
-
-        String keyStr = null;
-
-        String queryURL = URLHelper.getQueryURL();
-        String publishURL = URLHelper.getPublishURL();
-
-        ResourceBundle registryBundle =
-            ResourceBundle.getBundle("com.sun.cb.CoffeeRegistry");
-
-        String username =
-            registryBundle.getString("registry.username");
-        String password =
-            registryBundle.getString("registry.password");
-        String keyFile = registryBundle.getString("key.file");
-
-        try {
-            FileReader in = new FileReader(keyFile);
-            char[] buf = new char[512];
-            while (in.read(buf, 0, 512) >= 0) { }
-            in.close();
-            keyStr = new String(buf).trim();
-        } catch (IOException ex) {
-            System.out.println(ex.getMessage());
-        }
-
-        JAXRRemover remover = new JAXRRemover();
-        remover.makeConnection(queryURL, publishURL);
-        javax.xml.registry.infomodel.Key modelKey = null;
-        modelKey = remover.createOrgKey(keyStr);
-        remover.executeRemove(modelKey, username, password);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/server/com/sun/cb/ContextListener.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/server/com/sun/cb/ContextListener.java
deleted file mode 100644
index 6bfcbe9..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/server/com/sun/cb/ContextListener.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import jakarta.servlet.*;
-import javax.xml.registry.*;
-import java.util.ResourceBundle;
-import java.io.*;
-
-public final class ContextListener
-    implements ServletContextListener {
-
-    public void contextInitialized(ServletContextEvent event) {
-        String queryURL = URLHelper.getQueryURL();
-        String publishURL = URLHelper.getPublishURL();
-        String endpoint = URLHelper.getEndpointURL();
-
-        ResourceBundle registryBundle =
-           ResourceBundle.getBundle("com.sun.cb.CoffeeRegistry");
-
-        String username =
-            registryBundle.getString("registry.username");
-        String password =
-            registryBundle.getString("registry.password");
-        String keyFile = registryBundle.getString("key.file");
-
-        JAXRPublisher publisher = new JAXRPublisher();
-        publisher.makeConnection(queryURL, publishURL);
-        String key = publisher.executePublish(username,
-            password, endpoint);
-        try {
-            FileWriter out = new FileWriter(keyFile);
-            out.write(key);
-            out.flush();
-            out.close();
-        } catch (IOException ex) {
-            System.out.println(ex.getMessage());
-        }
-    }
-
-    public void contextDestroyed(ServletContextEvent event) {
-        String keyStr = null;
-
-        String queryURL = URLHelper.getQueryURL();
-        String publishURL = URLHelper.getPublishURL();
-
-        ResourceBundle registryBundle =
-            ResourceBundle.getBundle("com.sun.cb.CoffeeRegistry");
-
-        String username =
-            registryBundle.getString("registry.username");
-        String password =
-            registryBundle.getString("registry.password");
-        String keyFile = registryBundle.getString("key.file");
-
-        try {
-            FileReader in = new FileReader(keyFile);
-            char[] buf = new char[512];
-            while (in.read(buf, 0, 512) >= 0) { }
-            in.close();
-            keyStr = new String(buf).trim();
-        } catch (IOException ex) {
-            System.out.println(ex.getMessage());
-        }
-
-        JAXRRemover remover = new JAXRRemover();
-        remover.makeConnection(queryURL, publishURL);
-        javax.xml.registry.infomodel.Key modelKey = null;
-        modelKey = remover.createOrgKey(keyStr);
-        remover.executeRemove(modelKey, username, password);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/server/com/sun/cb/PriceLoader.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/server/com/sun/cb/PriceLoader.java
deleted file mode 100644
index 252cbed..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/server/com/sun/cb/PriceLoader.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import java.util.*;
-import java.math.BigDecimal;
-import java.lang.reflect.Array;
-
-public final class PriceLoader {
-
-    public static final PriceItemBean[] loadItems(String propsName) {
-
-       ResourceBundle priceBundle =
-           ResourceBundle.getBundle(propsName);
-
-       Enumeration bundleKeys = priceBundle.getKeys();
-       ArrayList keyList = new ArrayList();
-
-       while (bundleKeys.hasMoreElements()) {
-           String key = (String)bundleKeys.nextElement();
-           String value  = priceBundle.getString(key);
-           keyList.add(value);
-       }
-
-       PriceItemBean[] items =
-           (PriceItemBean[])Array.newInstance(PriceItemBean.class, keyList.size());
-       int k = 0;
-       for (Iterator it=keyList.iterator(); it.hasNext(); ) {
-           String s = (String)it.next();
-           int commaIndex = s.indexOf(",");
-           String name = s.substring(0, commaIndex).trim();
-           String price = s.substring(commaIndex + 1, s.length()).trim();
-           items[k] = new PriceItemBean(name, new BigDecimal(price));
-           k++;
-       }
-
-       return items;
-   }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/server/com/sun/cb/SupplierIF.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/server/com/sun/cb/SupplierIF.java
deleted file mode 100644
index f58ac8d..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/server/com/sun/cb/SupplierIF.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import java.rmi.Remote;
-import java.rmi.RemoteException;
-
-public interface SupplierIF extends Remote {
-
-    public ConfirmationBean placeOrder(OrderBean order) throws RemoteException;
-    public PriceListBean getPriceList() throws RemoteException;
-}
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/server/com/sun/cb/SupplierImpl.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/server/com/sun/cb/SupplierImpl.java
deleted file mode 100644
index ac265b5..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/server/com/sun/cb/SupplierImpl.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import java.math.BigDecimal;
-import java.util.*;
-
-public class SupplierImpl implements SupplierIF {
-
-    public ConfirmationBean placeOrder(OrderBean order) {
-
-         Date tomorrow = com.sun.cb.DateHelper.addDays(new Date(), 1);
-         ConfirmationBean confirmation =
-             new ConfirmationBean(order.getId(),
-                 DateHelper.dateToCalendar(tomorrow));
-         return confirmation;
-    }
-
-    public PriceListBean getPriceList() {
-
-       PriceListBean priceList = loadPrices();
-       return priceList;
-    }
-
-    private PriceListBean loadPrices() {
-
-       String propsName = "com.sun.cb.SupplierPrices";
-       Date today = new Date();
-       Date endDate = DateHelper.addDays(today, 30);
-
-       PriceItemBean[] priceItems = PriceLoader.loadItems(propsName);
-       PriceListBean priceList =
-           new PriceListBean(DateHelper.dateToCalendar(today),
-               DateHelper.dateToCalendar(endDate), priceItems);
-
-       return priceList;
-    }
-
-} // class
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/server/com/sun/cb/SupplierPrices.properties b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/server/com/sun/cb/SupplierPrices.properties
deleted file mode 100644
index f380edc..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/server/com/sun/cb/SupplierPrices.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-# Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-#
-# This program and the accompanying materials are made available under the
-# terms of the Eclipse Public License v. 2.0, which is available at
-# http://www.eclipse.org/legal/epl-2.0.
-#
-# This Source Code may also be made available under the following Secondary
-# Licenses when the conditions for such availability set forth in the
-# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-# version 2 with the GNU Classpath Exception, which is available at
-# https://www.gnu.org/software/classpath/license.html.
-#
-# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-#
-
-
-c1=Mocca, 4.00
-c2=Wake Up Call, 5.50
-c3=French Roast, 5.00
-c4=Kona, 6.50
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/server/com/sun/cb/TestText.txt.txt b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/server/com/sun/cb/TestText.txt.txt
deleted file mode 100644
index 3150fbe..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/jaxrpc/src/server/com/sun/cb/TestText.txt.txt
+++ /dev/null
@@ -1 +0,0 @@
-This file should be ignored by the deployed and running app.
\ No newline at end of file
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/provided-wars/cbserver.war b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/provided-wars/cbserver.war
deleted file mode 100644
index 6c32fdc..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/provided-wars/cbserver.war
+++ /dev/null
Binary files differ
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/provided-wars/jaxrpc-coffee-distributor.war b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/provided-wars/jaxrpc-coffee-distributor.war
deleted file mode 100644
index bf62d3c..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/provided-wars/jaxrpc-coffee-distributor.war
+++ /dev/null
Binary files differ
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/provided-wars/saaj-coffee-supplier.war b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/provided-wars/saaj-coffee-supplier.war
deleted file mode 100644
index 279cc3d..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/provided-wars/saaj-coffee-supplier.war
+++ /dev/null
Binary files differ
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/build.properties b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/build.properties
deleted file mode 100644
index e7025be..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/build.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-<!--
-
-    Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-
-# This file contains properties common to the tutorial examples for SAAJ.
-
-client-jar=saaj-client.jar
-build=build
-src=src
-common=../common/build
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/build.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/build.xml
deleted file mode 100644
index e91daa8..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/build.xml
+++ /dev/null
@@ -1,123 +0,0 @@
-<!--
-
-    Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!DOCTYPE project [
-  <!ENTITY targets SYSTEM "../../common/targets.xml">
-]>
-
-<project name="SAAJ Tutorial, Coffee Break" default="build" basedir=".">
-  <target name="init">
-      <tstamp/>
-  </target>
-
-  <property file="../../common/build.properties"/>
-  <property file="build.properties"/>
-
-  &targets;
-
-  <path id="run.classpath">
-    <fileset dir="${j2ee.home}/lib">
-      <include name="*.jar"/>
-    </fileset>
-    <fileset dir="${j2ee.home}/lib/endorsed">
-      <include name="*.jar"/>
-    </fileset>
-  </path>
-
-  <target name="prepare"
-     description="Creates the build and dist directories" >
-     <echo message="Creating the required directories...." />
-     <mkdir dir="${build}/client" />
-     <mkdir dir="${build}/server" />
-     <mkdir dir="dist" />
-  </target>
-
-  <target name="compile-server" depends="prepare"
-      description="Compiles the server-side source code">
-      <echo message="Compiling the server-side source code...."/>
-      <javac
-         srcdir="${src}"
-         destdir="${build}/server"
-         includes="**/PriceListServlet.java, **/ConfirmationServlet.java">
-      <classpath refid="classpath" />
-      <classpath path="${common}" />
-      </javac>
-  </target>
-
-  <target name="compile-client"
-      description="Compiles the client source code"  >
-      <echo message="Compiling the client source code...."/>
-      <javac
-         srcdir="${src}"
-         destdir="${build}/client"
-         includes="**/OrderRequest.java, **/PriceListRequest.java, **/Test*.java">
-      <classpath refid="classpath" />
-      <classpath path="${common}" />
-      </javac>
-      <javac
-         srcdir="../common/src"
-         destdir="${build}/client"
-         includes="**/URLHelper.java"
-      >
-      <classpath refid="classpath" />
-      <classpath path="${common}" />
-      </javac>
-      <copy file="../common/src/com/sun/cb/CoffeeBreak.properties"
-        todir="${build}/client/com/sun/cb" />
-  </target>
-
-  <target name="package-client" depends="compile-client"
-      description="Builds the JAR file that contains the SAAJ client routines">
-      <echo message="Building the ${client-jar} file...."/>
-      <delete file="dist/${client-jar}" />
-      <jar jarfile="dist/${client-jar}" >
-        <fileset dir="${build}/client" >
-             <exclude name="**/*Test*" />
-        </fileset>
-      </jar>
-  </target>
-
-  <target name="run-test-order">
-     <antcall target="run-test-client">
-       <param name="client-class" value="com.sun.cb.TestOrderRequest"/>
-     </antcall>
-  </target>
-
-  <target name="run-test-price">
-     <antcall target="run-test-client">
-       <param name="client-class" value="com.sun.cb.TestPriceListRequest"/>
-     </antcall>
-  </target>
-
-  <target name="run-test-client"
-     description="Runs a test client">
-     <echo message="Running the ${client-class} program:" />
-     <echo message=" " />
-      <java
-            fork="on"
-            classname="${client-class}">
-      <classpath refid="run.classpath" />
-      <classpath path="${build}/client" />
-      </java>
-  </target>
-
-  <target name="build" depends="compile-server, package-client"
-     description="Executes the targets needed to build this example.">
-  </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/dtds/coffee-order.dtd b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/dtds/coffee-order.dtd
deleted file mode 100644
index 511ab56..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/dtds/coffee-order.dtd
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ELEMENT coffee-order (orderID, customer, address, line-item+, total)>
-
-<!ELEMENT orderID (#PCDATA)>
-
-<!ELEMENT customer (last-name, first-name, phone-number, 
-   email-address)>
-<!ELEMENT last-name (#PCDATA)>
-<!ELEMENT first-name (#PCDATA)>
-<!ELEMENT phone-number (#PCDATA)>
-<!ELEMENT email-address (#PCDATA)>
-
-<!ELEMENT address (street, city, state, zip)>
-<!ELEMENT street (#PCDATA)>
-<!ELEMENT city (#PCDATA)>
-<!ELEMENT state (#PCDATA)>
-<!ELEMENT zip (#PCDATA)>
- 
-<!ELEMENT line-item (coffee-name, pounds, price)>
-<!ELEMENT coffee-name (#PCDATA)>
-<!ELEMENT pounds (#PCDATA)>
-<!ELEMENT price (#PCDATA)>
-   
-<!ELEMENT total (#PCDATA)>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/dtds/coffee-order.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/dtds/coffee-order.xml
deleted file mode 100644
index d2aa353..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/dtds/coffee-order.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
-
-    Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!DOCTYPE coffee-order
-    PUBLIC "-//Sun Microsystems, Inc.//DTD Coffee Order//EN"
-    "http://java.sun.com/webservices/dtds/coffee-order.dtd">
-
-<coffee-order>
-    <orderID>
-                "1234"
-    </orderID>
-
-    <customer>
-        <last-name>
-            "Pental"
-        </last-name>
-        <first-name>
-            "Ragni"
-        </first-name>
-    </customer>
-
-    <address>
-        <street>
-            "9876 Central Way"
-        </street>
-        <city>
-            "Rainbow"
-        </city>
-        <state>
-            "CA"
-        </state>
-        <zip>
-            "99999"
-        </zip>
-        <phone-number>
-            "908 873-6789"
-        </phone-number>
-        <email-address>
-            "ragnip@aol.com"
-        </email-address>
-    </address>
-
-    <line-item>
-        <coffee-name>
-            "arabica"
-        </coffee-name>
-        <pounds>
-            "2"
-        </pounds>
-        <price>
-            "10.95"
-        </price>
-    </line-item>
-
-    <total>
-        "10.95"
-    </total>
-
-</coffee-order>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/dtds/confirm.dtd b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/dtds/confirm.dtd
deleted file mode 100644
index 544c9af..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/dtds/confirm.dtd
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ELEMENT confirmation (orderID, ship-date)>
-
-<!ELEMENT orderID (#PCDATA)>
-
-<!ELEMENT ship-date (#PCDATA)>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/dtds/confirm.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/dtds/confirm.xml
deleted file mode 100644
index b802692..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/dtds/confirm.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<!--
-
-    Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!DOCTYPE confirm
-    PUBLIC "-//Sun Microsystems, Inc.//DTD confirmation//EN"
-    "http://java.sun.com/webservices/dtds/confirm.dtd">
-
-<confirmation>
-    <orderID>
-                "1234"
-        </orderID>
-
-    <ship-date>
-                "01-01-2001"
-        </ship-date>
-</confirmation>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/dtds/price-list.dtd b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/dtds/price-list.dtd
deleted file mode 100644
index 507604a..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/dtds/price-list.dtd
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ELEMENT price-list (coffee+)>
-
-<!ELEMENT coffee (coffee-name, price)>
-
-<!ELEMENT coffee-name (#PCDATA)>
-<!ELEMENT price (#PCDATA)>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/dtds/price-list.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/dtds/price-list.xml
deleted file mode 100644
index ca2f4f0..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/dtds/price-list.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<!DOCTYPE price-list
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-    PUBLIC "-//Sun Microsystems, Inc.//DTD priceList//EN"
-    "http://java.sun.com/webservices/dtds/price-list.dtd">
-
-<price-list
-    <coffee>
-                <coffee-name> Arabica </coffee-name>
-                <price> 4.50 </price>
-    </coffee>
-
-    <coffee>
-                <coffee-name> HouseBlend </coffee-name>
-                <price> 5.00 </price>
-    </coffee>
-
-    <coffee>
-                <coffee-name> Espresso </coffee-name>
-                <price> 5.00 </price>
-    </coffee>
-
-    <coffee>
-                <coffee-name> Dorada </coffee-name>
-                <price> 6.00 </price>
-    </coffee>
-
-</price-list>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/dtds/request-prices.dtd b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/dtds/request-prices.dtd
deleted file mode 100644
index c64645e..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/dtds/request-prices.dtd
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ELEMENT request-prices (request)>
-
-<!ELEMENT request (#PCDATA)>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/dtds/request-prices.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/dtds/request-prices.xml
deleted file mode 100644
index f6c4568..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/dtds/request-prices.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<!--
-
-    Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!DOCTYPE request-prices
-    PUBLIC "-//Sun Microsystems, Inc.//DTD priceRequest//EN"
-    "http://java.sun.com/webservices/dtds/request-prices.dtd">
-
-<request-prices>
-    <request>
-                "Send current price list."
-        </request>
-</request-prices>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/src/com/sun/cb/ConfirmationServlet.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/src/com/sun/cb/ConfirmationServlet.java
deleted file mode 100644
index 6c66272..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/src/com/sun/cb/ConfirmationServlet.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import jakarta.xml.soap.*;
-import jakarta.servlet.*;
-import jakarta.servlet.http.*;
-
-import javax.xml.transform.*;
-
-import java.util.*;
-import java.io.*;
-
-public class ConfirmationServlet extends HttpServlet {
-    static MessageFactory fac = null;
-
-    static {
-        try {
-            fac = MessageFactory.newInstance();
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        }
-    }
-
-    public void init(ServletConfig servletConfig)
-            throws ServletException {
-        super.init(servletConfig);
-    }
-
-    public void doPost( HttpServletRequest req,
-        HttpServletResponse resp)
-            throws ServletException, IOException {
-        try {
-            // Get all the headers from the HTTP request
-            MimeHeaders headers = getHeaders(req);
-
-            // Get the body of the HTTP request
-            InputStream is = req.getInputStream();
-
-            // Now internalize the contents of a HTTP request
-            // and create a SOAPMessage
-            SOAPMessage msg = fac.createMessage(headers, is);
-
-            SOAPMessage reply = null;
-            reply = onMessage(msg);
-
-            if (reply != null) {
-
-                /*
-                 * Need to call saveChanges because we're
-                 * going to use the MimeHeaders to set HTTP
-                 * response information. These MimeHeaders
-                 * are generated as part of the save.
-                 */
-                if (reply.saveRequired()) {
-                    reply.saveChanges();
-                }
-
-                resp.setStatus(HttpServletResponse.SC_OK);
-                putHeaders(reply.getMimeHeaders(), resp);
-
-                // Write out the message on the response stream
-                OutputStream os = resp.getOutputStream();
-                reply.writeTo(os);
-                os.flush();
-            } else {
-                resp.setStatus(
-                    HttpServletResponse.SC_NO_CONTENT);
-            }
-        } catch (Exception ex) {
-            throw new ServletException("SAAJ POST failed: " +
-                ex.getMessage());
-        }
-    }
-
-    static MimeHeaders getHeaders(HttpServletRequest req) {
-
-        Enumeration enum = req.getHeaderNames();
-        MimeHeaders headers = new MimeHeaders();
-
-        while (enum.hasMoreElements()) {
-            String headerName = (String)enum.nextElement();
-            String headerValue = req.getHeader(headerName);
-
-            StringTokenizer values =
-                new StringTokenizer(headerValue, ",");
-            while (values.hasMoreTokens()) {
-                headers.addHeader(headerName,
-                    values.nextToken().trim());
-            }
-        }
-        return headers;
-    }
-
-    static void putHeaders(MimeHeaders headers,
-            HttpServletResponse res) {
-
-        Iterator it = headers.getAllHeaders();
-        while (it.hasNext()) {
-            MimeHeader header = (MimeHeader)it.next();
-
-            String[] values = headers.getHeader(header.getName());
-            if (values.length == 1) {
-                res.setHeader(header.getName(),
-                    header.getValue());
-            } else {
-                StringBuffer concat = new StringBuffer();
-                int i = 0;
-                while (i < values.length) {
-                    if (i != 0) {
-                        concat.append(',');
-                    }
-                    concat.append(values[i++]);
-                }
-                res.setHeader(header.getName(), concat.toString());
-            }
-        }
-    }
-
-    // This is the application code for handling the message.
-
-    public SOAPMessage onMessage(SOAPMessage message) {
-
-        SOAPMessage confirmation = null;
-
-        try {
-            // Retrieve orderID from message received
-            SOAPBody sentSB =
-                message.getSOAPPart().getEnvelope().getBody();
-            Iterator sentIt = sentSB.getChildElements();
-            SOAPBodyElement sentSBE =
-                (SOAPBodyElement)sentIt.next();
-            Iterator sentIt2 = sentSBE.getChildElements();
-            SOAPElement sentSE = (SOAPElement)sentIt2.next();
-
-            // Get the orderID text to put in confirmation
-            String sentID = sentSE.getValue();
-
-            // Create the confirmation message
-            confirmation = fac.createMessage();
-            SOAPPart sp = confirmation.getSOAPPart();
-            SOAPEnvelope env = sp.getEnvelope();
-            SOAPBody sb = env.getBody();
-
-            Name newBodyName = env.createName("confirmation",
-                "Confirm", "http://sonata.coffeebreak.com");
-            SOAPBodyElement confirm =
-                sb.addBodyElement(newBodyName);
-
-            // Create the orderID element for confirmation
-            Name newOrderIDName = env.createName("orderId");
-            SOAPElement newOrderNo =
-                confirm.addChildElement(newOrderIDName);
-            newOrderNo.addTextNode(sentID);
-
-            // Create ship-date element
-            Name shipDateName = env.createName("ship-date");
-            SOAPElement shipDate =
-                confirm.addChildElement(shipDateName);
-
-            // Create the shipping date
-            Date today = new Date();
-            long msPerDay = 1000 * 60 * 60 * 24;
-            long msTarget = today.getTime();
-            long msSum = msTarget + (msPerDay * 2);
-            Date result = new Date();
-            result.setTime(msSum);
-            String sd = result.toString();
-            shipDate.addTextNode(sd);
-
-            confirmation.saveChanges();
-
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        }
-        return confirmation;
-    }
-}
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/src/com/sun/cb/OrderRequest.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/src/com/sun/cb/OrderRequest.java
deleted file mode 100644
index 66c37d3..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/src/com/sun/cb/OrderRequest.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import java.net.*;
-import java.io.*;
-import java.util.*;
-import java.text.SimpleDateFormat;
-import java.math.BigDecimal;
-
-import jakarta.xml.soap.*;
-
-public class OrderRequest {
-    String url;
-
-    public OrderRequest(String url){
-        this.url = url;
-    }
-
-    public ConfirmationBean placeOrder(OrderBean orderBean) {
-        ConfirmationBean cb = null;
-
-        try {
-            SOAPConnectionFactory scf =
-                SOAPConnectionFactory.newInstance();
-            SOAPConnection con = scf.createConnection();
-
-            MessageFactory mf = MessageFactory.newInstance();
-            SOAPMessage msg = mf.createMessage();
-
-            // Access the SOAPBody object
-            SOAPPart part = msg.getSOAPPart();
-            SOAPEnvelope envelope = part.getEnvelope();
-            SOAPBody body = envelope.getBody();
-
-            // Create the appropriate elements and add them
-            Name bodyName = envelope.createName("coffee-order", "PO",
-                "http://sonata.coffeebreak.com");
-            SOAPBodyElement order = body.addBodyElement(bodyName);
-
-            // orderID
-            Name orderIDName = envelope.createName("orderID");
-            SOAPElement orderID = order.addChildElement(orderIDName);
-            orderID.addTextNode(orderBean.getId());
-
-            // customer
-            Name childName = envelope.createName("customer");
-            SOAPElement customer = order.addChildElement(childName);
-
-            childName = envelope.createName("last-name");
-            SOAPElement lastName = customer.addChildElement(childName);
-            lastName.addTextNode(orderBean.getCustomer().getLastName());
-
-            childName = envelope.createName("first-name");
-            SOAPElement firstName = customer.addChildElement(childName);
-            firstName.addTextNode(orderBean.getCustomer().getFirstName());
-
-            childName = envelope.createName("phone-number");
-            SOAPElement phoneNumber = customer.addChildElement(childName);
-            phoneNumber.addTextNode(
-                orderBean.getCustomer().getPhoneNumber());
-
-            childName = envelope.createName("email-address");
-            SOAPElement emailAddress =
-                customer.addChildElement(childName);
-            emailAddress.addTextNode(
-                orderBean.getCustomer().getEmailAddress());
-
-            // address
-            childName = envelope.createName("address");
-            SOAPElement address = order.addChildElement(childName);
-
-            childName = envelope.createName("street");
-            SOAPElement street = address.addChildElement(childName);
-            street.addTextNode(orderBean.getAddress().getStreet());
-
-            childName = envelope.createName("city");
-            SOAPElement city = address.addChildElement(childName);
-            city.addTextNode(orderBean.getAddress().getCity());
-
-            childName = envelope.createName("state");
-            SOAPElement state = address.addChildElement(childName);
-            state.addTextNode(orderBean.getAddress().getState());
-
-            childName = envelope.createName("zip");
-            SOAPElement zip = address.addChildElement(childName);
-            zip.addTextNode(orderBean.getAddress().getZip());
-
-            LineItemBean[] lineItems=orderBean.getLineItems();
-            for (int i=0;i < lineItems.length;i++) {
-                LineItemBean lib = lineItems[i];
-
-                childName = envelope.createName("line-item");
-                SOAPElement lineItem = order.addChildElement(childName);
-
-                childName = envelope.createName("coffeeName");
-                SOAPElement coffeeName =
-                    lineItem.addChildElement(childName);
-                coffeeName.addTextNode(lib.getCoffeeName());
-
-                childName = envelope.createName("pounds");
-                SOAPElement pounds = lineItem.addChildElement(childName);
-                pounds.addTextNode(lib.getPounds().toString());
-
-                childName = envelope.createName("price");
-                SOAPElement price = lineItem.addChildElement(childName);
-                price.addTextNode(lib.getPrice().toString());
-            }
-
-            // total
-            childName = envelope.createName("total");
-            SOAPElement total =
-                order.addChildElement(childName);
-            total.addTextNode(orderBean.getTotal().toString());
-
-            URL endpoint = new URL(url);
-            SOAPMessage reply = con.call(msg, endpoint);
-            con.close();
-
-            // Extract content of reply
-            // Extract order ID and ship date
-            SOAPBody sBody = reply.getSOAPPart().getEnvelope().getBody();
-            Iterator bodyIt = sBody.getChildElements();
-            SOAPBodyElement sbEl = (SOAPBodyElement)bodyIt.next();
-            Iterator bodyIt2 = sbEl.getChildElements();
-
-            // Get orderID
-            SOAPElement ID = (SOAPElement)bodyIt2.next();
-            String id = ID.getValue();
-
-            // Get ship date
-            SOAPElement sDate = (SOAPElement)bodyIt2.next();
-            String shippingDate = sDate.getValue();
-            SimpleDateFormat df =
-                new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
-            Date date = df.parse(shippingDate);
-            Calendar cal = new GregorianCalendar();
-            cal.setTime(date);
-            cb = new ConfirmationBean(id, cal);
-        } catch(Exception e) {
-            e.printStackTrace();
-        }
-        return cb;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/src/com/sun/cb/PriceListRequest.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/src/com/sun/cb/PriceListRequest.java
deleted file mode 100644
index 8febd35..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/src/com/sun/cb/PriceListRequest.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import jakarta.xml.soap.*;
-import java.util.*;
-import java.math.BigDecimal;
-
-import java.net.*;
-
-public class PriceListRequest {
-    String url;
-
-    public PriceListRequest(String url){
-        this.url = url;
-    }
-
-    public PriceListBean getPriceList() {
-        PriceListBean plb = null;
-        try {
-            SOAPConnectionFactory scf =
-                SOAPConnectionFactory.newInstance();
-            SOAPConnection con = scf.createConnection();
-
-            MessageFactory mf = MessageFactory.newInstance();
-            SOAPMessage msg = mf.createMessage();
-
-            // Access the SOAPBody object
-            SOAPPart part = msg.getSOAPPart();
-            SOAPEnvelope envelope = part.getEnvelope();
-            SOAPBody body = envelope.getBody();
-
-            // Create SOAPBodyElement request
-            Name bodyName = envelope.createName("request-prices",
-                "RequestPrices", "http://sonata.coffeebreak.com");
-            SOAPBodyElement requestPrices =
-                body.addBodyElement(bodyName);
-
-            Name requestName = envelope.createName("request");
-            SOAPElement request =
-                requestPrices.addChildElement(requestName);
-            request.addTextNode("Send updated price list.");
-
-            msg.saveChanges();
-
-            // Create the endpoint and send the message
-            URL endpoint = new URL(url);
-            SOAPMessage response = con.call(msg, endpoint);
-            con.close();
-
-            // Get contents of response
-
-            Vector list = new Vector();
-
-            SOAPBody responseBody =
-                response.getSOAPPart().getEnvelope().getBody();
-            Iterator it1 = responseBody.getChildElements();
-
-            // Get price-list element
-            while (it1.hasNext()) {
-                SOAPBodyElement bodyEl = (SOAPBodyElement)it1.next();
-                Iterator it2 = bodyEl.getChildElements();
-                // Get coffee elements
-                while (it2.hasNext()) {
-                    SOAPElement child2 = (SOAPElement)it2.next();
-                    Iterator it3 = child2.getChildElements();
-                    // get coffee-name and price elements
-                    while (it3.hasNext()) {
-                        SOAPElement child3 = (SOAPElement)it3.next();
-                        String value = child3.getValue();
-                        list.addElement(value);
-                    }
-                }
-            }
-
-            ArrayList items = new ArrayList();
-            for (int i = 0; i < list.size(); i = i + 2) {
-                items.add(
-                    new PriceItemBean(list.elementAt(i).toString(),
-                    new BigDecimal(list.elementAt(i + 1).toString())));
-                System.out.print(list.elementAt(i) + "        ");
-                System.out.println(list.elementAt(i + 1));
-            }
-
-            PriceItemBean[] priceItems = new PriceItemBean[items.size()];
-            int i=0;
-                              for (Iterator it=items.iterator(); it.hasNext(); ) {
-              priceItems[i] = (PriceItemBean)it.next();
-              i++;
-            }
-            Date today = new Date();
-            Date endDate = DateHelper.addDays(today, 30);
-            Calendar todayCal = new GregorianCalendar();
-            todayCal.setTime(today);
-            Calendar cal = new GregorianCalendar();
-            cal.setTime(endDate);
-            plb = new PriceListBean();
-            plb.setStartDate(todayCal);
-            plb.setPriceItems(priceItems);
-            plb.setEndDate(cal);
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        }
-        return plb;
-    }
-}
-
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/src/com/sun/cb/PriceListServlet.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/src/com/sun/cb/PriceListServlet.java
deleted file mode 100644
index adc2842..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/src/com/sun/cb/PriceListServlet.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import jakarta.xml.soap.*;
-import jakarta.servlet.*;
-import jakarta.servlet.http.*;
-
-import javax.xml.transform.*;
-
-import java.util.*;
-import java.io.*;
-
-public class PriceListServlet extends HttpServlet {
-    static MessageFactory fac = null;
-
-    static {
-        try {
-            fac = MessageFactory.newInstance();
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        }
-    };
-
-    public void init(ServletConfig servletConfig)
-            throws ServletException {
-        super.init(servletConfig);
-    }
-
-    public void doPost(HttpServletRequest req,
-        HttpServletResponse resp)
-            throws ServletException, IOException {
-        try {
-            // Get all the headers from the HTTP request
-            MimeHeaders headers = getHeaders(req);
-
-            // Get the body of the HTTP request
-            InputStream is = req.getInputStream();
-
-            // Now internalize the contents of the HTTP request
-            // and create a SOAPMessage
-            SOAPMessage msg = fac.createMessage(headers, is);
-
-            SOAPMessage reply = null;
-            reply = onMessage(msg);
-
-            if (reply != null) {
-
-                /*
-                 * Need to call saveChanges because we're
-                 * going to use the MimeHeaders to set HTTP
-                 * response information. These MimeHeaders
-                 * are generated as part of the save.
-                 */
-                if (reply.saveRequired()) {
-                    reply.saveChanges();
-                }
-
-                resp.setStatus(HttpServletResponse.SC_OK);
-                putHeaders(reply.getMimeHeaders(), resp);
-
-                // Write out the message on the response stream
-                OutputStream os = resp.getOutputStream();
-                reply.writeTo(os);
-                os.flush();
-            } else {
-                resp.setStatus(
-                    HttpServletResponse.SC_NO_CONTENT);
-            }
-        } catch (Exception ex) {
-            throw new ServletException("SAAJ POST failed: " +
-               ex.getMessage());
-        }
-    }
-
-    static MimeHeaders getHeaders(HttpServletRequest req) {
-
-        Enumeration enum = req.getHeaderNames();
-        MimeHeaders headers = new MimeHeaders();
-
-        while (enum.hasMoreElements()) {
-            String headerName = (String)enum.nextElement();
-            String headerValue = req.getHeader(headerName);
-
-            StringTokenizer values =
-                new StringTokenizer(headerValue, ",");
-            while (values.hasMoreTokens()) {
-                headers.addHeader(headerName,
-                    values.nextToken().trim());
-            }
-        }
-        return headers;
-    }
-
-    static void putHeaders(MimeHeaders headers,
-            HttpServletResponse res) {
-
-        Iterator it = headers.getAllHeaders();
-        while (it.hasNext()) {
-            MimeHeader header = (MimeHeader)it.next();
-
-            String[] values = headers.getHeader(header.getName());
-            if (values.length == 1) {
-                res.setHeader(header.getName(),
-                    header.getValue());
-            } else {
-                StringBuffer concat = new StringBuffer();
-                int i = 0;
-                while (i < values.length) {
-                    if (i != 0) {
-                        concat.append(',');
-                    }
-                    concat.append(values[i++]);
-                }
-                res.setHeader(header.getName(), concat.toString());
-            }
-        }
-    }
-
-    // This is the application code for responding to the message.
-
-    public SOAPMessage onMessage(SOAPMessage msg) {
-        SOAPMessage message = null;
-        try {
-            // create price list message
-            message = fac.createMessage();
-
-            // Access the SOAPBody object
-            SOAPPart part = message.getSOAPPart();
-            SOAPEnvelope envelope = part.getEnvelope();
-            SOAPBody body = envelope.getBody();
-
-            // Create the appropriate elements and add them
-
-            Name bodyName = envelope.createName("price-list",
-                "PriceList", "http://sonata.coffeebreak.com");
-            SOAPBodyElement list = body.addBodyElement(bodyName);
-
-            // coffee
-            Name coffeeN = envelope.createName("coffee");
-            SOAPElement coffee = list.addChildElement(coffeeN);
-
-            Name coffeeNm1 = envelope.createName("coffee-name");
-            SOAPElement coffeeName =
-                coffee.addChildElement(coffeeNm1);
-            coffeeName.addTextNode("Arabica");
-
-            Name priceName1 = envelope.createName("price");
-            SOAPElement price1 =
-                coffee.addChildElement(priceName1);
-            price1.addTextNode("4.50");
-
-            Name coffeeNm2 = envelope.createName("coffee-name");
-            SOAPElement coffeeName2 =
-                coffee.addChildElement(coffeeNm2);
-            coffeeName2.addTextNode("Espresso");
-
-            Name priceName2 = envelope.createName("price");
-            SOAPElement price2 =
-                coffee.addChildElement(priceName2);
-            price2.addTextNode("5.00");
-
-            Name coffeeNm3 = envelope.createName("coffee-name");
-            SOAPElement coffeeName3 =
-                coffee.addChildElement(coffeeNm3);
-            coffeeName3.addTextNode("Dorada");
-
-            Name priceName3 = envelope.createName("price");
-            SOAPElement price3 =
-                coffee.addChildElement(priceName3);
-            price3.addTextNode("6.00");
-
-            Name coffeeNm4 = envelope.createName("coffee-name");
-            SOAPElement coffeeName4 =
-                coffee.addChildElement(coffeeNm4);
-            coffeeName4.addTextNode("House Blend");
-
-            Name priceName4 = envelope.createName("price");
-            SOAPElement price4 =
-                coffee.addChildElement(priceName4);
-            price4.addTextNode("5.00");
-
-            message.saveChanges();
-
-        } catch(Exception e) {
-            e.printStackTrace();
-        }
-        return message;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/src/com/sun/cb/TestOrderRequest.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/src/com/sun/cb/TestOrderRequest.java
deleted file mode 100644
index 760be0e..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/src/com/sun/cb/TestOrderRequest.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import java.net.*;
-import java.io.*;
-import java.util.*;
-
-import jakarta.xml.soap.*;
-
-public class TestOrderRequest {
-    public static void main(String [] args) {
-        try {
-            SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance();
-            SOAPConnection con = scf.createConnection();
-
-            MessageFactory mf = MessageFactory.newInstance();
-
-            SOAPMessage msg = mf.createMessage();
-
-            // Access the SOABBody object
-            SOAPPart part = msg.getSOAPPart();
-            SOAPEnvelope envelope = part.getEnvelope();
-            SOAPBody body = envelope.getBody();
-
-            // Create the appropriate elements and add them
-
-            Name bodyName = envelope.createName("coffee-order", "PO",
-                            "http://sonata.coffeebreak.com");
-            SOAPBodyElement order = body.addBodyElement(bodyName);
-
-            // orderID
-            Name orderIDName = envelope.createName("orderID");
-            SOAPElement orderID =
-                order.addChildElement(orderIDName);
-            orderID.addTextNode("1234");
-
-            // customer
-            Name childName = envelope.createName("customer");
-            SOAPElement customer = order.addChildElement(childName);
-
-            childName = envelope.createName("last-name");
-            SOAPElement lastName = customer.addChildElement(childName);
-            lastName.addTextNode("Pental");
-
-            childName = envelope.createName("first-name");
-            SOAPElement firstName = customer.addChildElement(childName);
-            firstName.addTextNode("Ragni");
-
-            childName = envelope.createName("phone-number");
-            SOAPElement phoneNumber = customer.addChildElement(childName);
-            phoneNumber.addTextNode("908 983-6789");
-
-            childName = envelope.createName("email-address");
-            SOAPElement emailAddress =
-                customer.addChildElement(childName);
-            emailAddress.addTextNode("ragnip@aol.com");
-
-            // address
-            childName = envelope.createName("address");
-            SOAPElement address = order.addChildElement(childName);
-
-            childName = envelope.createName("street");
-            SOAPElement street = address.addChildElement(childName);
-            street.addTextNode("9876 Central Way");
-
-            childName = envelope.createName("city");
-            SOAPElement city = address.addChildElement(childName);
-            city.addTextNode("Rainbow");
-
-            childName = envelope.createName("state");
-            SOAPElement state = address.addChildElement(childName);
-            state.addTextNode("CA");
-
-            childName = envelope.createName("zip");
-            SOAPElement zip = address.addChildElement(childName);
-            zip.addTextNode("99999");
-
-            // line-item 1
-            childName = envelope.createName("line-item");
-            SOAPElement lineItem = order.addChildElement(childName);
-
-            childName = envelope.createName("coffeeName");
-            SOAPElement coffeeName = lineItem.addChildElement(childName);
-            coffeeName.addTextNode("arabica");
-
-            childName = envelope.createName("pounds");
-            SOAPElement pounds = lineItem.addChildElement(childName);
-            pounds.addTextNode("2");
-
-            childName = envelope.createName("price");
-            SOAPElement price = lineItem.addChildElement(childName);
-            price.addTextNode("10.95");
-
-            // line-item 2
-            childName = envelope.createName("coffee-name");
-            SOAPElement coffeeName2 = lineItem.addChildElement(childName);
-            coffeeName2.addTextNode("espresso");
-
-            childName = envelope.createName("pounds");
-            SOAPElement pounds2 = lineItem.addChildElement(childName);
-            pounds2.addTextNode("3");
-
-            childName = envelope.createName("price");
-            SOAPElement price2 = lineItem.addChildElement(childName);
-            price2.addTextNode("10.95");
-
-            // total
-            childName = envelope.createName("total");
-            SOAPElement total = order.addChildElement(childName);
-            total.addTextNode("21.90");
-
-            URL endpoint = new URL(
-                URLHelper.getSaajURL() + "/orderCoffee");
-            SOAPMessage reply = con.call(msg, endpoint);
-            con.close();
-
-            // extract content of reply
-            //Extracting order ID and ship date
-            SOAPBody sBody = reply.getSOAPPart().getEnvelope().getBody();
-            Iterator bodyIt = sBody.getChildElements();
-            SOAPBodyElement sbEl = (SOAPBodyElement)bodyIt.next();
-            Iterator bodyIt2 = sbEl.getChildElements();
-
-            // get orderID
-            SOAPElement ID = (SOAPElement)bodyIt2.next();
-            String id = ID.getValue();
-
-            // get ship date
-            SOAPElement sDate = (SOAPElement)bodyIt2.next();
-            String shippingDate = sDate.getValue();
-
-            System.out.println("");
-            System.out.println("");
-            System.out.println("Confirmation for order #" + id);
-            System.out.print("Your order will be shipped on ");
-            System.out.println(shippingDate);
-        } catch(Exception e) {
-            e.printStackTrace();
-        }
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/src/com/sun/cb/TestPriceListRequest.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/src/com/sun/cb/TestPriceListRequest.java
deleted file mode 100644
index 5ef7036..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/saaj/src/com/sun/cb/TestPriceListRequest.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import jakarta.xml.soap.*;
-import java.util.*;
-
-import java.net.*;
-
-public class TestPriceListRequest {
-
-    public static void main(String [] args) {
-
-        try {
-            SOAPConnectionFactory scf =
-                SOAPConnectionFactory.newInstance();
-            SOAPConnection con = scf.createConnection();
-
-                 MessageFactory mf = MessageFactory.newInstance();
-            SOAPMessage msg = mf.createMessage();
-
-            // Access the SOABBody object
-            SOAPPart part = msg.getSOAPPart();
-            SOAPEnvelope envelope = part.getEnvelope();
-            SOAPBody body = envelope.getBody();
-
-            // create SOAPBodyElement request
-            Name bodyName = envelope.createName("request-prices",
-                "RequestPrices", "http://sonata.coffeebreak.com");
-            SOAPBodyElement requestPrices =
-                body.addBodyElement(bodyName);
-
-            Name requestName = envelope.createName("request");
-            SOAPElement request =
-                requestPrices.addChildElement(requestName);
-            request.addTextNode("Send updated price list.");
-
-            msg.saveChanges();
-
-            // create the endpoint and send the message
-            URL endpoint = new URL(
-                 URLHelper.getSaajURL() + "/getPriceList");
-            SOAPMessage response = con.call(msg, endpoint);
-            con.close();
-
-            // get contents of response
-            Vector list = new Vector();
-
-            SOAPBody responseBody =
-                response.getSOAPPart().getEnvelope().getBody();
-            Iterator it1 = responseBody.getChildElements();
-            // get price-list element
-            while (it1.hasNext()) {
-                SOAPBodyElement bodyEl = (SOAPBodyElement)it1.next();
-                Iterator it2 = bodyEl.getChildElements();
-                // get coffee elements
-                while (it2.hasNext()) {
-                    SOAPElement child2 = (SOAPElement)it2.next();
-                    Iterator it3 = child2.getChildElements();
-                    // get coffee-name and price elements
-                    while (it3.hasNext()) {
-                        SOAPElement child3 = (SOAPElement)it3.next();
-                        String value = child3.getValue();
-                        list.addElement(value);
-                    }
-                }
-            }
-            for (int i = 0; i < list.size(); i = i + 2) {
-                System.out.print(list.elementAt(i) + "        ");
-                System.out.println(list.elementAt(i + 1));
-            }
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        }
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/build.properties b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/build.properties
deleted file mode 100644
index d50416d..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/build.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-
-    Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-
-build=build
-src=src
-common=../common/build
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/build.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/build.xml
deleted file mode 100644
index e791930..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/build.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<!--
-
-    Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!DOCTYPE project [
-  <!ENTITY targets SYSTEM "../../common/targets.xml">
-]>
-
-<project name="Coffee Break Server" default="build" basedir=".">
-  <target name="init">
-      <tstamp/>
-  </target>
-
-  <property file="../../common/build.properties"/>
-  <property file="build.properties"/>
-
-  &targets;
-
-  <target name="prepare" depends="init"
-           description="Create build directories.">
-    <mkdir dir="${build}" />
-  </target>
-
-  <target name="build" depends="prepare"
-     description="Compile CB server Java files and copy DD and static files." >
-    <javac
-      srcdir="${src}"
-      destdir="${build}">
-            <include name="**/*.java" />
-      <classpath refid="classpath" />
-      <classpath path="${common}:../jaxrpc/dist/jaxrpc-client.jar:../saaj/dist/saaj-client.jar" />
-    </javac>
-      <javac
-         srcdir="../common/src"
-         destdir="${build}"
-         includes="**/URLHelper.java"
-      >
-      <classpath refid="classpath" />
-      <classpath path="${common}" />
-      </javac>
-      <copy file="../common/src/com/sun/cb/CoffeeBreak.properties"
-        todir="${build}/com/sun/cb" />
-      <copy todir="${build}">
-      <fileset dir="web">
-        <include name="**/*.html" />
-        <include name="**/*.jsp" />
-        <include name="**/*.jspf" />
-        <include name="**/*.gif" />
-        <include name="**/*.xml" />
-        <include name="**/*.tld" />
-        <include name="**/*.jpg" />
-      </fileset>
-    </copy>
-  </target>
-
-  <target name="run-query" depends="build"
-     description="Run JAXRQueryByName." >
-    <java classname="com.sun.cb.JAXRQueryByName" fork="yes">
-      <arg line="${query-string}" />
-      <classpath refid="classpath" />
-      <classpath path="${build}" />
-    </java>
-  </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/CheckoutFormBean.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/CheckoutFormBean.java
deleted file mode 100644
index 69a3240..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/CheckoutFormBean.java
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import java.math.BigDecimal;
-import java.util.*;
-
-public class CheckoutFormBean {
-  private String firstName;
-  private String lastName;
-  private String email;
-  private String areaCode;
-  private String phoneNumber;
-  private String street;
-  private String city;
-  private String state;
-  private String zip;
-  private int CCOption;
-  private String CCNumber;
-  private HashMap errors;
-  private ShoppingCart cart;
-  private RetailPriceList rpl;
-  private OrderConfirmations ocs;
-  private ResourceBundle messages;
-
-
-  public boolean validate() {
-    boolean allOk=true;
-    if (firstName.equals("")) {
-      errors.put("firstName",messages.getString("FirstNameError"));
-      firstName="";
-      allOk=false;
-    } else {
-      errors.put("firstName","");
-    }
-
-    if (lastName.equals("")) {
-      errors.put("lastName",messages.getString("LastNameError"));
-      lastName="";
-      allOk=false;
-    } else {
-      errors.put("lastName","");
-    }
-
-    if (email.equals("") || (email.indexOf('@') == -1)) {
-      errors.put("email",messages.getString("EMailError"));
-      email="";
-      allOk=false;
-    } else {
-      errors.put("email","");
-    }
-
-    if (areaCode.equals("")) {
-      errors.put("areaCode",messages.getString("AreaCodeError"));
-      areaCode="";
-      allOk=false;
-    } else {
-      errors.put("areaCode","");
-    }
-
-    if (phoneNumber.equals("")) {
-      errors.put("phoneNumber",messages.getString("PhoneNumberError"));
-      phoneNumber="";
-      allOk=false;
-    } else {
-      errors.put("phoneNumber","");
-    }
-
-    if (street.equals("")) {
-      errors.put("street",messages.getString("StreetError"));
-      street="";
-      allOk=false;
-    } else {
-      errors.put("street","");
-    }
-
-    if (city.equals("")) {
-      errors.put("city",messages.getString("CityError"));
-      city="";
-      allOk=false;
-    } else {
-      errors.put("city","");
-    }
-
-    if (state.equals("")) {
-      errors.put("state",messages.getString("StateError"));
-      state="";
-      allOk=false;
-    } else {
-      errors.put("state","");
-    }
-
-    if (zip.equals("") || zip.length() !=5 ) {
-      errors.put("zip",messages.getString("ZipError"));
-      zip="";
-      allOk=false;
-    } else {
-      try {
-        int x = Integer.parseInt(zip);
-              errors.put("zip","");
-      } catch (NumberFormatException e) {
-        errors.put("zip",messages.getString("ZipError"));
-        zip="";
-        allOk=false;
-      }
-    }
-
-    if (CCNumber.equals("")) {
-      errors.put("CCNumber",messages.getString("CCNumberError"));
-      CCNumber="";
-      allOk=false;
-    } else {
-      errors.put("CCNumber","");
-    }
-
-    ocs.clear();
-
-    ConfirmationBean confirmation = null;
-
-    if (allOk) {
-      String orderId = CCNumber;
-
-      AddressBean address =
-        new AddressBean(street, city, state, zip);
-      CustomerBean customer =
-        new CustomerBean(firstName, lastName,
-          "(" + areaCode+ ") " + phoneNumber, email);
-
-      for (Iterator d = rpl.getDistributors().iterator();
-          d.hasNext(); ) {
-        String distributor = (String)d.next();
-        System.out.println(distributor);
-        ArrayList lis = new ArrayList();
-        BigDecimal price = new BigDecimal("0.00");
-        BigDecimal total = new BigDecimal("0.00");
-        for (Iterator c = cart.getItems().iterator();
-            c.hasNext(); ) {
-          ShoppingCartItem sci = (ShoppingCartItem) c.next();
-          if ((sci.getItem().getDistributor()).
-              equals(distributor) &&
-              sci.getPounds().floatValue() > 0) {
-            price = sci.getItem().getWholesalePricePerPound().
-              multiply(sci.getPounds());
-            total = total.add(price);
-            LineItemBean li = new LineItemBean(
-              sci.getItem().getCoffeeName(), sci.getPounds(),
-              sci.getItem().getWholesalePricePerPound());
-            lis.add(li);
-          }
-        }
-
-        LineItemBean[] lineItems = new LineItemBean[lis.size()];
-        int i=0;
-        for(Iterator j = lis.iterator(); j.hasNext();) {
-          lineItems[i] = (LineItemBean)j.next();
-          i++;
-        }
-
-        if (lineItems.length != 0) {
-          OrderBean order = new OrderBean(address, customer,
-            orderId, lineItems, total);
-
-          String SAAJOrderURL =
-            URLHelper.getSaajURL() + "/orderCoffee";
-          if (distributor.equals(SAAJOrderURL)) {
-            OrderRequest or = new OrderRequest(SAAJOrderURL);
-            confirmation = or.placeOrder(order);
-          }
-          else {
-            OrderCaller ocaller = new OrderCaller(distributor);
-            confirmation = ocaller.placeOrder(order);
-          }
-          OrderConfirmation oc =
-            new OrderConfirmation(order, confirmation);
-          ocs.add(oc);
-        }
-      }
-    }
-    return allOk;
-  }
-
-  public HashMap getErrors() {
-    return errors;
-  }
-
-  public String getErrorMsg(String s) {
-    String errorMsg =(String)errors.get(s.trim());
-    return (errorMsg == null) ? "":errorMsg;
-  }
-
-  public CheckoutFormBean(ShoppingCart cart, RetailPriceList rpl, ResourceBundle messages) {
-   firstName="";
-   lastName="";
-   email="";
-   areaCode="";
-   phoneNumber="";
-   street="";
-   city="";
-   state="";
-   zip="";
-   CCOption=0;
-   CCNumber="";
-   errors = new HashMap();
-   this.cart = cart;
-   this.rpl = rpl;
-   this.messages = messages;
-   ocs = new OrderConfirmations();
-  }
-
-  public String getFirstName() {
-    return firstName;
-  }
-
-  public String getLastName() {
-    return lastName;
-  }
-
-  public String getEmail() {
-    return email;
-  }
-
-  public String getZip() {
-    return zip;
-  }
-
-  public String getAreaCode() {
-    return areaCode;
-  }
-
-  public String getPhoneNumber() {
-    return phoneNumber;
-  }
-
-  public String getStreet() {
-    return street;
-  }
-
-  public String getCity() {
-    return city;
-  }
-
-  public String getState() {
-    return state;
-  }
-
-
-  public int getCCOption() {
-    return CCOption;
-  }
-
-
-  public String getCCNumber() {
-    return CCNumber;
-  }
-
-
-  public OrderConfirmations getOrderConfirmations() {
-    return ocs;
-  }
-
-  public void setMessages(ResourceBundle messages) {
-    this.messages=messages;
-  }
-
-  public void setFirstName(String firstname) {
-    this.firstName=firstname;
-  }
-
-  public void setLastName(String lastname) {
-    this.lastName=lastname;
-  }
-
-  public void setEmail(String email) {
-    this.email=email;
-  }
-
-  public void setZip(String zip) {
-    this.zip=zip;
-  }
-
-  public void setAreaCode(String areaCode) {
-    this.areaCode=areaCode ;
-  }
-  public void setPhoneNumber(String phoneNumber) {
-    this.phoneNumber=phoneNumber ;
-  }
-
-  public void setStreet(String street) {
-    this.street=street ;
-  }
-
-  public void setCity(String city) {
-    this.city=city ;
-  }
-
-  public void setState(String state) {
-    this.state=state ;
-  }
-
-  public void setCCOption(int CCOption) {
-    this.CCOption=CCOption ;
-  }
-  public void setCCNumber(String CCNumber) {
-    this.CCNumber=CCNumber ;
-  }
-
-  public void setErrors(String key, String msg) {
-    errors.put(key,msg);
-  }
-
-}
-
-
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/Dispatcher.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/Dispatcher.java
deleted file mode 100644
index 7fb4747..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/Dispatcher.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import jakarta.servlet.*;
-import jakarta.servlet.http.*;
-import java.util.*;
-import java.math.BigDecimal;
-
-public class Dispatcher extends HttpServlet {
-  public void doGet(HttpServletRequest request, HttpServletResponse response) {
-    HttpSession session = request.getSession();
-    ResourceBundle messages = (ResourceBundle)session.getAttribute("messages");
-    if (messages == null) {
-        Locale locale=request.getLocale();
-        messages = ResourceBundle.getBundle("com.sun.cb.messages.CBMessages", locale);
-        session.setAttribute("messages", messages);
-    }
-
-    ServletContext context = getServletContext();
-    RetailPriceList rpl = (RetailPriceList)context.getAttribute("retailPriceList");
-    if (rpl == null) {
-      try {
-          rpl = new RetailPriceList();
-          context.setAttribute("retailPriceList", rpl);
-        } catch (Exception ex) {
-          context.log("Couldn't create price list: " + ex.getMessage());
-        }
-    }
-    ShoppingCart cart = (ShoppingCart)session.getAttribute("cart");
-    if (cart == null) {
-        cart = new ShoppingCart(rpl);
-        session.setAttribute("cart", cart);
-    }
-
-
-    String selectedScreen = request.getServletPath();
-    if (selectedScreen.equals("/checkoutForm")) {
-      CheckoutFormBean checkoutFormBean = new CheckoutFormBean(cart, rpl, messages);
-
-      request.setAttribute("checkoutFormBean", checkoutFormBean);
-      try {
-        checkoutFormBean.setFirstName(request.getParameter("firstName"));
-        checkoutFormBean.setLastName(request.getParameter("lastName"));
-        checkoutFormBean.setEmail(request.getParameter("email"));
-        checkoutFormBean.setAreaCode(request.getParameter("areaCode"));
-        checkoutFormBean.setPhoneNumber(request.getParameter("phoneNumber"));
-        checkoutFormBean.setStreet(request.getParameter("street"));
-        checkoutFormBean.setCity(request.getParameter("city"));
-        checkoutFormBean.setState(request.getParameter("state"));
-        checkoutFormBean.setZip(request.getParameter("zip"));
-        checkoutFormBean.setCCNumber(request.getParameter("CCNumber"));
-        checkoutFormBean.setCCOption(Integer.parseInt(request.getParameter("CCOption")));
-      } catch (NumberFormatException e) {
-        // not possible
-      }
-    }
-    try {
-        request.getRequestDispatcher("/template/template.jsp").forward(request, response);
-    } catch(Exception ex) {
-      ex.printStackTrace();
-    }
-  }
-  public void doPost(HttpServletRequest request, HttpServletResponse response) {
-    HttpSession session = request.getSession();
-    ResourceBundle messages = (ResourceBundle)session.getAttribute("messages");
-    String selectedScreen = request.getServletPath();
-    ServletContext context = getServletContext();
-
-    RetailPriceList rpl = (RetailPriceList)context.getAttribute("retailPriceList");
-    if (rpl == null) {
-      try {
-          rpl = new RetailPriceList();
-          context.setAttribute("retailPriceList", rpl);
-        } catch (Exception ex) {
-          context.log("Couldn't create price list: " + ex.getMessage());
-        }
-    }
-    ShoppingCart cart = (ShoppingCart)session.getAttribute("cart");
-    if (cart == null ) {
-        cart = new ShoppingCart(rpl);
-        session.setAttribute("cart", cart);
-    }
-
-    if (selectedScreen.equals("/orderForm")) {
-      cart.clear();
-      for(Iterator i = rpl.getItems().iterator(); i.hasNext(); ) {
-        RetailPriceItem item = (RetailPriceItem) i.next();
-        String coffeeName = item.getCoffeeName();
-        BigDecimal pounds = new BigDecimal(request.getParameter(coffeeName + "_pounds"));
-        BigDecimal price = item.getRetailPricePerPound().multiply(pounds).setScale(2, BigDecimal.ROUND_HALF_UP);
-        ShoppingCartItem sci = new ShoppingCartItem(item, pounds, price);
-        cart.add(sci);
-      }
-
-    } else if (selectedScreen.equals("/checkoutAck")) {
-      CheckoutFormBean checkoutFormBean = new CheckoutFormBean(cart, rpl, messages);
-
-      request.setAttribute("checkoutFormBean", checkoutFormBean);
-      try {
-        checkoutFormBean.setFirstName(request.getParameter("firstName"));
-        checkoutFormBean.setLastName(request.getParameter("lastName"));
-        checkoutFormBean.setEmail(request.getParameter("email"));
-        checkoutFormBean.setAreaCode(request.getParameter("areaCode"));
-        checkoutFormBean.setPhoneNumber(request.getParameter("phoneNumber"));
-        checkoutFormBean.setStreet(request.getParameter("street"));
-        checkoutFormBean.setCity(request.getParameter("city"));
-        checkoutFormBean.setState(request.getParameter("state"));
-        checkoutFormBean.setZip(request.getParameter("zip"));
-        checkoutFormBean.setCCNumber(request.getParameter("CCNumber"));
-        checkoutFormBean.setCCOption(Integer.parseInt(request.getParameter("CCOption")));
-      } catch (NumberFormatException e) {
-        // not possible
-      }
-      if (!checkoutFormBean.validate()) {
-        try {
-            request.getRequestDispatcher("/checkoutForm.jsp").forward(request, response);
-        } catch(Exception e) {
-            e.printStackTrace();
-        }
-      }
-    }
-
-    try {
-        request.getRequestDispatcher("/template/template.jsp").forward(request, response);
-    } catch(Exception e) {
-    }
-  }
-}
-
-
-
-
-
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/JAXRQueryByName.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/JAXRQueryByName.java
deleted file mode 100644
index 177f44b..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/JAXRQueryByName.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import javax.xml.registry.*;
-import javax.xml.registry.infomodel.*;
-import java.net.*;
-import java.util.*;
-
-/**
- * The JAXRQueryByName class consists of a main method, a
- * makeConnection method, an executeQuery method, and some
- * helper methods. It searches a registry for
- * information about organizations whose names contain a
- * user-supplied string.
- *
- * To run this program, use the command
- *
- *     ant -Dquery-string=<value> run-query
- *
- * after starting Tomcat and Xindice.
- */
-public class JAXRQueryByName {
-    static Connection connection = null;
-
-    public JAXRQueryByName() {}
-
-    public static void main(String[] args) {
-      String queryURL = URLHelper.getQueryURL();
-      String publishURL = URLHelper.getPublishURL();
-
-        if (args.length < 1) {
-            System.out.println("Usage: ant " +
-                "-Dquery-string=<value> run-query");
-            System.exit(1);
-        }
-        String queryString = new String(args[0]);
-        System.out.println("Query string is " + queryString);
-
-        JAXRQueryByName jq = new JAXRQueryByName();
-
-        connection = jq.makeConnection(queryURL, publishURL);
-
-        jq.executeQuery(queryString);
-    }
-
-    /**
-     * Establishes a connection to a registry.
-     *
-     * @param queryUrl        the URL of the query registry
-     * @param publishUrl        the URL of the publish registry
-     * @return the connection
-     */
-    public Connection makeConnection(String queryUrl,
-        String publishUrl) {
-
-        /*
-         * Edit to provide your own proxy information
-         *  if you are going beyond your firewall.
-         * Host format: "host.subdomain.domain.com".
-         * Port is usually 8080.
-         * Leave blank to use Registry Server.
-         */
-        String httpProxyHost = "";
-        String httpProxyPort = "";
-
-        /*
-         * Define connection configuration properties.
-         * For simple queries, you need the query URL.
-         * To obtain the connection factory class, set a System
-         *   property.
-         */
-        Properties props = new Properties();
-        props.setProperty("javax.xml.registry.queryManagerURL",
-            queryUrl);
-        props.setProperty("com.sun.xml.registry.http.proxyHost",
-            httpProxyHost);
-        props.setProperty("com.sun.xml.registry.http.proxyPort",
-            httpProxyPort);
-
-        try {
-            // Create the connection, passing it the
-            // configuration properties
-            ConnectionFactory factory =
-                ConnectionFactory.newInstance();
-            factory.setProperties(props);
-            connection = factory.createConnection();
-            System.out.println("Created connection to registry");
-        } catch (Exception e) {
-            e.printStackTrace();
-            if (connection != null) {
-                try {
-                    connection.close();
-                } catch (JAXRException je) {}
-            }
-        }
-        return connection;
-    }
-
-    /**
-     * Returns  organizations containing a string.
-     *
-     * @param qString        the string argument
-     * @return a collection of organizations
-     */
-    public Collection executeQuery(String qString) {
-        RegistryService rs = null;
-        BusinessQueryManager bqm = null;
-        Collection orgs = null;
-
-        try {
-            // Get registry service and query manager
-            rs = connection.getRegistryService();
-            bqm = rs.getBusinessQueryManager();
-            System.out.println("Got registry service and " + "query manager");
-
-            // Define find qualifiers and name patterns
-            Collection findQualifiers = new ArrayList();
-            findQualifiers.add(FindQualifier.SORT_BY_NAME_DESC);
-            Collection namePatterns = new ArrayList();
-            // % still doesn't work
-            namePatterns.add(qString);
-            //namePatterns.add("%" + qString + "%");
-
-            // Find using the name
-            BulkResponse response =
-                bqm.findOrganizations(findQualifiers,
-                    namePatterns, null, null, null, null);
-            orgs = response.getCollection();
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        }
-
-        return orgs;
-    }
-
-    /**
-     * Returns the name value for a registry object.
-     *
-     * @param ro        a RegistryObject
-     * @return                the String value
-     */
-    public String getName(RegistryObject ro)
-        throws JAXRException {
-
-        try {
-            return ro.getName().getValue();
-        } catch (NullPointerException npe) {
-            return "No Name";
-        }
-    }
-
-    /**
-     * Returns the description value for a registry object.
-     *
-     * @param ro        a RegistryObject
-     * @return                the String value
-     */
-    public String getDescription(RegistryObject ro)
-        throws JAXRException {
-        try {
-            return ro.getDescription().getValue();
-        } catch (NullPointerException npe) {
-            return "No Description";
-        }
-    }
-
-    /**
-     * Returns the key id value for a registry object.
-     *
-     * @param ro        a RegistryObject
-     * @return                the String value
-     */
-    public String getKey(RegistryObject ro)
-        throws JAXRException {
-
-        try {
-            return ro.getKey().getId();
-        } catch (NullPointerException npe) {
-            return "No Key";
-        }
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/OrderConfirmation.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/OrderConfirmation.java
deleted file mode 100644
index a951549..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/OrderConfirmation.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-public class OrderConfirmation {
-
-  private OrderBean ob;
-  private ConfirmationBean cb;
-
-  public OrderConfirmation(OrderBean ob, ConfirmationBean cb) {
-     this.ob = ob;
-     this.cb = cb;
-  }
-
-  public OrderBean getOrderBean() {
-    return ob;
-  }
-
-  public ConfirmationBean getConfirmationBean() {
-    return cb;
-  }
-}
-
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/OrderConfirmations.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/OrderConfirmations.java
deleted file mode 100644
index de66dcd..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/OrderConfirmations.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import java.util.*;
-
-public class OrderConfirmations {
-  ArrayList items = null;
-
-  public OrderConfirmations() {
-          items = new ArrayList();
-  }
-
-  public synchronized void add(OrderConfirmation oc) {
-    items.add(oc);
-  }
-
-
-  public synchronized Collection getItems() {
-      return items;
-  }
-
-  protected void finalize() throws Throwable {
-      items.clear();
-  }
-
-  public synchronized void clear() {
-      items.clear();
-  }
-}
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/RetailPriceItem.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/RetailPriceItem.java
deleted file mode 100644
index 4818935..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/RetailPriceItem.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-
-public class RetailPriceItem implements Serializable {
-
-    private String coffeeName;
-    private BigDecimal wholesalePricePerPound;
-    private BigDecimal retailPricePerPound;
-    private String distributor;
-
-    public RetailPriceItem() {
-
-        this.coffeeName = null;
-        this.wholesalePricePerPound = new BigDecimal("0.00");
-        this.retailPricePerPound = new BigDecimal("0.00");
-        this.distributor = null;
-    }
-
-    public RetailPriceItem(String coffeeName, BigDecimal wholesalePricePerPound, BigDecimal retailPricePerPound, String distributor) {
-
-        this.coffeeName = coffeeName;
-        this.wholesalePricePerPound = wholesalePricePerPound;
-        this.retailPricePerPound = retailPricePerPound;
-        this.distributor = distributor;
-    }
-
-    public String getCoffeeName() {
-        return coffeeName;
-    }
-
-    public void setCoffeeName(String coffeeName) {
-        this.coffeeName = coffeeName;
-    }
-
-    public BigDecimal getWholesalePricePerPound() {
-        return wholesalePricePerPound;
-    }
-
-    public BigDecimal getRetailPricePerPound() {
-        return retailPricePerPound;
-    }
-
-    public void setRetailPricePerPound(BigDecimal retailPricePerPound) {
-        this.retailPricePerPound = retailPricePerPound;
-    }
-
-    public void setWholesalePricePerPound(BigDecimal wholesalePricePerPound) {
-        this.wholesalePricePerPound = wholesalePricePerPound;
-    }
-    public String getDistributor() {
-        return distributor;
-    }
-
-    public void setDistributor(String distributor) {
-        this.distributor = distributor;
-    }
-}
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/RetailPriceList.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/RetailPriceList.java
deleted file mode 100644
index f0e3f35..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/RetailPriceList.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.*;
-import javax.xml.registry.*;
-import javax.xml.registry.infomodel.*;
-
-public class RetailPriceList implements Serializable {
-
-    private ArrayList retailPriceItems;
-    private ArrayList distributors;
-
-    public RetailPriceList() {
-      String RegistryURL = URLHelper.getQueryURL();
-      String RPCDistributor = "JAXRPCCoffeeDistributor";
-      retailPriceItems = new ArrayList();
-      distributors = new ArrayList();
-
-      JAXRQueryByName jq = new JAXRQueryByName();
-      Connection connection =  jq.makeConnection(RegistryURL, RegistryURL);
-      Collection orgs = jq.executeQuery(RPCDistributor);
-      Iterator orgIter = orgs.iterator();
-      // Display organization information
-      try {
-        while (orgIter.hasNext()) {
-          Organization org = (Organization) orgIter.next();
-          System.out.println("Org name: " + jq.getName(org));
-          System.out.println("Org description: " + jq.getDescription(org));
-          System.out.println("Org key id: " + jq.getKey(org));
-
-          // Display service and binding information
-          Collection services = org.getServices();
-          Iterator svcIter = services.iterator();
-          while (svcIter.hasNext()) {
-            Service svc = (Service) svcIter.next();
-            System.out.println(" Service name: " + jq.getName(svc));
-            System.out.println(" Service description: " + jq.getDescription(svc));
-            Collection serviceBindings = svc.getServiceBindings();
-            Iterator sbIter = serviceBindings.iterator();
-            while (sbIter.hasNext()) {
-              ServiceBinding sb = (ServiceBinding) sbIter.next();
-              String distributor = sb.getAccessURI();
-              System.out.println("  Binding Description: " + jq.getDescription(sb));
-              System.out.println("  Access URI: " + distributor);
-
-              // Get price list from service at distributor URI
-              PriceListBean priceList = PriceFetcher.getPriceList(distributor);
-
-              PriceItemBean[] items = priceList.getPriceItems();
-              retailPriceItems = new ArrayList();
-              distributors = new ArrayList();
-              BigDecimal price = new BigDecimal("0.00");
-              for (int i = 0; i < items.length; i++) {
-                price = items[i].getPricePerPound().multiply(new BigDecimal("1.35")).setScale(2, BigDecimal.ROUND_HALF_UP);
-                RetailPriceItem pi = new RetailPriceItem(items[i].getCoffeeName(), items[i].getPricePerPound(), price , distributor);
-                retailPriceItems.add(pi);
-              }
-              distributors.add(distributor);
-            }
-          }
-          // Print spacer between organizations
-          System.out.println(" --- ");
-        }
-      } catch (Exception e) {
-        e.printStackTrace();
-      } finally  {
-        // At end, close connection to registry
-        if (connection != null) {
-          try {
-                  connection.close();
-          } catch (JAXRException je) {}
-        }
-      }
-      String SAAJPriceListURL = URLHelper.getSaajURL() + "/getPriceList";
-      String SAAJOrderURL = URLHelper.getSaajURL() + "/orderCoffee";
-      PriceListRequest plr = new PriceListRequest(SAAJPriceListURL);
-      PriceListBean priceList = plr.getPriceList();;
-      PriceItemBean[] priceItems = priceList.getPriceItems();
-      for (int i = 0; i < priceItems.length; i++ ) {
-        PriceItemBean pib = priceItems[i];
-        BigDecimal price = pib.getPricePerPound().multiply(new BigDecimal("1.35")).setScale(2, BigDecimal.ROUND_HALF_UP);
-        RetailPriceItem rpi = new RetailPriceItem(pib.getCoffeeName(), pib.getPricePerPound(), price, SAAJOrderURL);
-        retailPriceItems.add(rpi);
-      }
-      distributors.add(SAAJOrderURL);
-                 }
-
-    public ArrayList getItems() {
-        return retailPriceItems;
-    }
-
-    public ArrayList getDistributors() {
-        return distributors;
-    }
-
-    public void setItems(ArrayList priceItems) {
-        this.retailPriceItems = priceItems;
-    }
-
-    public void setDistributors(ArrayList distributors) {
-        this.distributors = distributors;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/RetailPriceListServlet.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/RetailPriceListServlet.java
deleted file mode 100644
index 417c438..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/RetailPriceListServlet.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import java.io.*;
-import jakarta.servlet.*;
-import jakarta.servlet.http.*;
-
-/**
- * This is a simple example of an HTTP Servlet.  It responds to the GET
- * method of the HTTP protocol.
- */
-public class RetailPriceListServlet extends HttpServlet {
-
-   public void doGet (HttpServletRequest request,
-                       HttpServletResponse response)
-   throws ServletException, IOException {
-
-                  HttpSession session = request.getSession();
-                         ServletContext context = getServletContext();
-      RetailPriceList rpl = new RetailPriceList();
-      context.setAttribute("retailPriceList", rpl);
-      ShoppingCart cart = new ShoppingCart(rpl);
-      session.setAttribute("cart", cart);
-
-      PrintWriter out = response.getWriter();
-
-
-                  // then write the data of the response
-      out.println("<html><body  bgcolor=\"#ffffff\">" +
-                  "Reloaded price list." + "</html></body>");
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/ShoppingCart.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/ShoppingCart.java
deleted file mode 100644
index 2f71ed7..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/ShoppingCart.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import java.util.*;
-import java.math.BigDecimal;
-import com.sun.cb.RetailPriceList;
-import com.sun.cb.RetailPriceItem;
-
-public class ShoppingCart {
-  ArrayList items = null;
-  BigDecimal total = new BigDecimal("0.00");
-  int numberOfItems = 0;
-
-  public ShoppingCart(RetailPriceList rpl) {
-      items = new ArrayList();
-
-      for(Iterator i = rpl.getItems().iterator(); i.hasNext(); ) {
-        RetailPriceItem item = (RetailPriceItem) i.next();
-        ShoppingCartItem sci = new ShoppingCartItem(item, new BigDecimal("0.0"), new BigDecimal("0.00"));
-        items.add(sci);
-        numberOfItems++;
-      }
-  }
-
-  public synchronized void add (ShoppingCartItem item) {
-    items.add(item);
-    total = total.add(item.getPrice()).setScale(2);
-    numberOfItems++;
-  }
-
-  public synchronized int getNumberOfItems() {
-    return numberOfItems;
-  }
-
-  public synchronized ArrayList getItems() {
-      return items;
-  }
-
-  protected void finalize() throws Throwable {
-      items.clear();
-  }
-
-  public synchronized BigDecimal getTotal() {
-    return total;
-  }
-
-
-  public synchronized void clear() {
-      numberOfItems = 0;
-      total = new BigDecimal("0.00");
-      items.clear();
-  }
-}
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/ShoppingCartItem.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/ShoppingCartItem.java
deleted file mode 100644
index 3fe7513..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/ShoppingCartItem.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb;
-
-import java.math.BigDecimal;
-
-public class ShoppingCartItem {
-    RetailPriceItem item;
-    BigDecimal pounds;
-    BigDecimal price;
-
-
-    public ShoppingCartItem() {}
-
-    public ShoppingCartItem(RetailPriceItem item, BigDecimal pounds, BigDecimal price) {
-        this.item = item;
-        this.pounds = pounds;
-        this.price = price;
-    }
-
-    public void setItem(RetailPriceItem item) {
-        this.item = item;
-    }
-
-    public void setPounds(BigDecimal pounds) {
-        this.pounds=pounds;
-    }
-
-    public void setPrice(BigDecimal price) {
-        this.price=price;
-    }
-
-    public RetailPriceItem getItem() {
-        return item;
-    }
-
-
-    public BigDecimal getPounds() {
-        return pounds;
-    }
-
-    public BigDecimal getPrice() {
-        return price;
-    }
-}
-
-
-
-
-
-
-
-
-
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/messages/CBMessages.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/messages/CBMessages.java
deleted file mode 100644
index c48f7e6..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/messages/CBMessages.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb.messages;
-
-import java.util.*;
-
-public class CBMessages extends ListResourceBundle {
-  public Object[][] getContents() {
-    return contents;
-  }
-
-  static final Object[][] contents = {
-
-  {"ServerError", "Your request cannot be completed.  The server got the following error: "},
-  {"TitleServerError", "Server Error"},
-  {"TitleOrderForm", "Order Form"},
-  {"TitleCheckoutForm", "Checkout Form"},
-  {"TitleCheckoutAck", "Confirmation"},
-  {"OrderInstructions", "Enter the amount of coffee and click Update to update the totals.<br>Click Checkout to proceed with your order. "},
-  {"OrderForm", "OrderForm"},
-  {"Price", "Price"},
-  {"Quantity", "Quantity"},
-  {"Total", "Total"},
-  {"Update", "Update"},
-  {"Checkout", "Checkout"},
-  {"CheckoutInstructions", "To complete your order, fill in the form and click Submit."},
-  {"YourOrder", "Your order totals "},
-  {"CheckoutForm", "Checkout Form"},
-  {"FirstName", "First Name"},
-  {"FirstNameError", "Please enter your first name."},
-  {"LastName", "Last Name"},
-  {"LastNameError", "Please enter your last name."},
-  {"EMail", " E-Mail"},
-  {"EMailError", "Please enter a valid e-mail address."},
-  {"PhoneNumber", "Phone Number"},
-  {"AreaCodeError", "Please enter your area code."},
-  {"PhoneNumberError", "Please enter your phone number."},
-  {"Street", "Street"},
-  {"StreetError", "Please enter your street."},
-  {"City", "City"},
-  {"CityError", "Please enter your city."},
-  {"State", "State"},
-  {"StateError", "Please enter your state."},
-  {"Zip", "Zip"},
-  {"ZipError", "Please enter a valid zip code."},
-  {"CCOption", "Credit Card"},
-  {"CCNumber", "Credit Card Number"},
-  {"CCNumberError", "Please enter your credit card number."},
-  {"Submit", "Submit"},
-  {"Reset", "Reset"},
-  {"ItemPrice", "Price"},
-  {"OrderConfirmed", "Your order has been confirmed."},
-  {"ShipDate", "Ship Date"},
-  {"Items", "Items"},
-  {"Coffee", "Coffee"},
-  {"Pounds", "Pounds"},
-  {"ContinueShopping", "Continue Shopping"}
-  };
-}
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/messages/CBMessages_en.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/messages/CBMessages_en.java
deleted file mode 100644
index 084e088..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/messages/CBMessages_en.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.cb.messages;
-
-import java.util.*;
-
-public class CBMessages_en extends ListResourceBundle {
-  public Object[][] getContents() {
-    return contents;
-  }
-
-  static final Object[][] contents = {
-
-  {"ServerError", "Your request cannot be completed.  The server got the following error: "},
-  {"TitleServerError", "Server Error"},
-  {"TitleOrderForm", "Order Form"},
-  {"TitleCheckoutForm", "Checkout Form"},
-  {"TitleCheckoutAck", "Confirmation"},
-  {"OrderInstructions", "Enter the amount of coffee and click Update to update the totals.<br>Click Checkout to proceed with your order. "},
-  {"OrderForm", "OrderForm"},
-  {"Price", "Price"},
-  {"Quantity", "Quantity"},
-  {"Total", "Total"},
-  {"Update", "Update"},
-  {"Checkout", "Checkout"},
-  {"CheckoutInstructions", "To complete your order, fill in the form and click Submit."},
-  {"YourOrder", "Your order totals "},
-  {"CheckoutForm", "Checkout Form"},
-  {"FirstName", "First Name"},
-  {"FirstNameError", "Please enter your first name."},
-  {"LastName", "Last Name"},
-  {"LastNameError", "Please enter your last name."},
-  {"EMail", " E-Mail"},
-  {"EMailError", "Please enter a valid e-mail address."},
-  {"PhoneNumber", "Phone Number"},
-  {"AreaCodeError", "Please enter your area code."},
-  {"PhoneNumberError", "Please enter your phone number."},
-  {"Street", "Street"},
-  {"StreetError", "Please enter your street."},
-  {"City", "City"},
-  {"CityError", "Please enter your city."},
-  {"State", "State"},
-  {"StateError", "Please enter your state."},
-  {"Zip", "Zip"},
-  {"ZipError", "Please enter a valid zip code."},
-  {"CCOption", "Credit Card"},
-  {"CCNumber", "Credit Card Number"},
-  {"CCNumberError", "Please enter your credit card number."},
-  {"Submit", "Submit"},
-  {"Reset", "Reset"},
-  {"ItemPrice", "Price"},
-  {"OrderConfirmed", "Your order has been confirmed."},
-  {"ShipDate", "Ship Date"},
-  {"Items", "Items"},
-  {"Coffee", "Coffee"},
-  {"Pounds", "Pounds"},
-  {"ContinueShopping", "Continue Shopping"}
-  };
-}
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/template/Debug.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/template/Debug.java
deleted file mode 100644
index d339c00..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/template/Debug.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package template;
-
-public final class Debug {
-
-    public static final boolean debuggingOn = true;
-
-    public static void print(String msg) {
-        if (debuggingOn) {
-            System.err.print(msg);
-        }
-    }
-
-    public static void println(String msg) {
-        if (debuggingOn) {
-            System.err.println(msg);
-        }
-    }
-
-    public static void print(Exception e, String msg) {
-        print((Throwable)e, msg);
-    }
-
-    public static void print(Exception e) {
-        print(e, null);
-    }
-
-    public static void print(Throwable t, String msg) {
-        if (debuggingOn) {
-            System.err.println("Received throwable with Message: "+t.getMessage());
-            if (msg != null)
-                System.err.print(msg);
-            t.printStackTrace();
-        }
-    }
-
-    public static void print(Throwable t) {
-        print(t, null);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/template/Definition.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/template/Definition.java
deleted file mode 100644
index b276a2a..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/template/Definition.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package template;
-import java.util.HashMap;
-
-public class Definition {
-   private HashMap params = new HashMap();
-
-   public void setParam(Parameter p) {
-      params.put(p.getName(), p);
-   }
-   public Parameter getParam(String name) {
-      return (Parameter) params.get(name);
-   }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/template/DefinitionTag.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/template/DefinitionTag.java
deleted file mode 100644
index 46d681e..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/template/DefinitionTag.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package template;
-import jakarta.servlet.jsp.JspTagException;
-import jakarta.servlet.jsp.PageContext;
-import jakarta.servlet.jsp.tagext.SimpleTagSupport;
-import java.util.*;
-
-public class DefinitionTag extends SimpleTagSupport {
-  private String definitionName = null;
-  private String screenId;
-  private        HashMap screens = null;
-
-  public DefinitionTag() {
-    super();
-  }
-  public HashMap getScreens() {
-    return screens;
-  }
-  public void setName(String name) {
-    this.definitionName = name;
-  }
-  public void setScreen(String screenId) {
-    this.screenId = screenId;
-  }
-  public void doTag() {
-    try {
-             screens = new HashMap();
-
-
-      getJspBody().invoke(null);
-
-      Definition definition = new Definition();
-      PageContext context = (PageContext)getJspContext();
-      ArrayList params = (ArrayList) screens.get(screenId);
-      Iterator        ir = null;
-      if (params != null) {
-        ir = params.iterator();
-        while (ir.hasNext())
-          definition.setParam((Parameter) ir.next());
-
-        // put the definition in the page context
-        context.setAttribute(definitionName, definition, context.APPLICATION_SCOPE);
-      }
-             else
-        Debug.println("DefinitionTag: params are not defined.");
-    } catch (Exception ex) {
-        ex.printStackTrace();
-    }
-  }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/template/InsertTag.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/template/InsertTag.java
deleted file mode 100644
index c2c9b04..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/template/InsertTag.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package template;
-
-import jakarta.servlet.ServletException;
-import jakarta.servlet.jsp.JspTagException;
-import jakarta.servlet.jsp.PageContext;
-import jakarta.servlet.jsp.tagext.SimpleTagSupport;
-import java.util.HashMap;
-
-public class InsertTag extends SimpleTagSupport {
-   private String parameterName = null;
-   private String definitionName = null;
-
-   public InsertTag() {
-      super();
-   }
-   public void setParameter(String parameter) {
-      this.parameterName = parameter;
-   }
-   public void setDefinition(String name) {
-      this.definitionName = name;
-   }
-   public void doTag() throws JspTagException {
-    Definition definition = null;
-    Parameter parameter = null;
-    boolean directInclude = false;
-    PageContext context = (PageContext)getJspContext();
-
-    // get the definition from the page context
-    definition = (Definition)context.getAttribute(definitionName, context.APPLICATION_SCOPE);
-    // get the parameter
-    if (parameterName != null && definition != null)
-        parameter = (Parameter) definition.getParam(parameterName);
-
-    if (parameter != null)
-        directInclude = parameter.isDirect();
-
-    try {
-        // if parameter is direct, print to out
-        if (directInclude && parameter  != null)
-          context.getOut().print(parameter.getValue());
-        // if parameter is indirect, include results of dispatching to page
-        else {
-          if ((parameter != null) && (parameter.getValue() !=  null))
-              context.include(parameter.getValue());
-        }
-      } catch (Exception ex) {
-          Throwable rootCause = null;
-          if (ex instanceof ServletException) {
-                              rootCause = ((ServletException) ex).getRootCause();
-          }
-                             throw new JspTagException(ex.getMessage(), rootCause);
-            }
-   }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/template/Parameter.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/template/Parameter.java
deleted file mode 100644
index e35cc5c..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/template/Parameter.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package template;
-public class Parameter {
-
-    private String name;
-    private boolean isDirect;
-    private String value;
-
-    public Parameter(String name,  String value, boolean isDirect) {
-        this.name = name;
-        this.isDirect = isDirect;
-        this.value = value;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public boolean isDirect() {
-        return isDirect;
-    }
-
-    public String getValue() {
-        return value;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/template/ParameterTag.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/template/ParameterTag.java
deleted file mode 100644
index 86815cc..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/template/ParameterTag.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package template;
-import jakarta.servlet.jsp.tagext.*;
-import jakarta.servlet.jsp.PageContext;
-import java.util.*;
-
-public class ParameterTag extends SimpleTagSupport {
-   private String paramName = null;
-   private String paramValue = null;
-   private String isDirectString = null;
-
-   public ParameterTag() {
-      super();
-   }
-   public void setName(String paramName) {
-      this.paramName = paramName;
-   }
-   public void setValue(String paramValue) {
-      this.paramValue = paramValue;
-   }
-   public void setDirect(String isDirectString) {
-      this.isDirectString = isDirectString;
-   }
-   public void doTag() {
-      boolean isDirect = false;
-
-      if ((isDirectString != null) &&
-         isDirectString.toLowerCase().equals("true"))
-         isDirect = true;
-
-      try {
-         // retrieve the parameters list
-        if (paramName != null) {
-          ArrayList parameters = ((ScreenTag)getParent()).getParameters();
-          if (parameters != null) {
-            Parameter param = new Parameter(paramName, paramValue, isDirect);
-            parameters.add(param);
-          } else
-            Debug.println("ParameterTag: parameters do not exist.");
-        }
-      } catch (Exception e) {
-         Debug.println("ParameterTag: error in doTag: " + e);
-      }
-   }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/template/ScreenTag.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/template/ScreenTag.java
deleted file mode 100644
index 185d2d7..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/src/com/sun/cb/template/ScreenTag.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package template;
-import jakarta.servlet.jsp.tagext.SimpleTagSupport;
-import jakarta.servlet.jsp.PageContext;
-import java.util.*;
-
-public class ScreenTag extends SimpleTagSupport {
-   private String screenId;
-   private ArrayList parameters = null;
-
-   public ArrayList getParameters() {
-                   return parameters;
-   }
-   public void setScreenId(String screenId) {
-      this.screenId = screenId;
-   }
-
-   public ScreenTag() {
-      super();
-   }
-   public void doTag() {
-    parameters = new ArrayList();
-    HashMap screens = (HashMap)((DefinitionTag)getParent()).getScreens();
-    if (screens != null) {
-      try {
-        if (!screens.containsKey(screenId))
-          screens.put(screenId, parameters);
-        getJspBody().invoke(null);
-      } catch (Exception ex) {
-        ex.printStackTrace();
-      }
-    }
-    else
-            Debug.println("ScreenTag: Unable to get screens object.");
-  }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/banner.jsp b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/banner.jsp
deleted file mode 100644
index 50c8d78..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/banner.jsp
+++ /dev/null
@@ -1,29 +0,0 @@
-<%--
-
-    Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
---%>
-
-<body  bgcolor="#FFFFFF">
-<center>
-<table>
-<tr>
-<td><img src="coffeebean.jpg"></td>
-<td><h1><font size="+3" color="black" face="sans">Coffee Break</font></h1></td>
-<td><img src="coffeebean.jpg"></td>
-</tr>
-</table>
-</center>
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/banner.txt b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/banner.txt
deleted file mode 100644
index 7e993a3..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/banner.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-<%--
-
-    Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
---%>
-
-<body  bgcolor="#FFFFFF">
-<center>
-<table>
-<tr>
-<td><img src="coffeebean.jpg"></td>
-<td><h1><font size="+3" color="black" face="sans">Coffee Break</font></h1></td>
-<td><img src="coffeebean.jpg"></td>
-</tr>
-</table>
-</center>
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/checkoutAck.jsp b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/checkoutAck.jsp
deleted file mode 100644
index 0709cee..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/checkoutAck.jsp
+++ /dev/null
@@ -1,54 +0,0 @@
-<%--
-
-    Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
---%>
-
-<c:remove var="cart" scope="session"/>
-<center>
-<table cellpadding=4 cellspacing=2 border=0>
-<tr>
-<td align=center colspan=3><fmt:message key="OrderConfirmed"/></td>
-</tr>
-<tr>
-<td colspan=3>&nbsp;</td>
-</tr>
-<tr bgcolor="#CC9999">
-<td rowspan=2 align=center><b><fmt:message key="ShipDate"/></b>
-<td colspan=2 align=center><b><fmt:message key="Items"/></b>
-</tr>
-<tr bgcolor="#CC9999">
-<td><b><fmt:message key="Coffee"/></b></td>
-<td><b><fmt:message key="Pounds"/></b></td>
-</tr>
-<c:forEach var="oc" items="${requestScope.checkoutFormBean.orderConfirmations.items}" >
-  <tr bgcolor="#CC9999">
-  <td rowspan=${fn:length(oc.orderBean.lineItems)} align=center><fmt:formatDate value="${oc.confirmationBean.shippingDate.time}" type="date" dateStyle="full" /></td>
-  <c:forEach var="item" items="${oc.orderBean.lineItems}" >
-    <td bgcolor="#CC9999">${item.coffeeName}</td>
-    <td bgcolor="#CC9999" align=right>${item.pounds}</td>
-  </tr>
-  </c:forEach>
-</c:forEach>
-<tr>
-<td colspan=3>&nbsp;</td>
-</tr>
-<tr>
-<td align=center colspan=3><a href="${pageContext.request.contextPath}/orderForm"><fmt:message key="ContinueShopping"/></a>
-<tr>
-<td colspan=3>&nbsp;</td>
-</tr>
-</table>
-</center>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/checkoutAck.txt b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/checkoutAck.txt
deleted file mode 100644
index b6c3029..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/checkoutAck.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-<%--
-
-    Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
---%>
-
-<c:remove var="cart" scope="session"/>
-<center>
-<table cellpadding=4 cellspacing=2 border=0>
-<tr>
-<td align=center colspan=3><fmt:message key="OrderConfirmed"/></td>
-</tr>
-<tr>
-<td colspan=3>&nbsp;</td>
-</tr>
-<tr bgcolor="#CC9999">
-<td rowspan=2 align=center><b><fmt:message key="ShipDate"/></b>
-<td colspan=2 align=center><b><fmt:message key="Items"/></b>
-</tr>
-<tr bgcolor="#CC9999">
-<td><b><fmt:message key="Coffee"/></b></td>
-<td><b><fmt:message key="Pounds"/></b></td>
-</tr>
-<c:forEach var="oc" items="${requestScope.checkoutFormBean.orderConfirmations.items}" >
-  <tr bgcolor="#CC9999">
-  <td rowspan=${fn:length(oc.orderBean.lineItems)} align=center><fmt:formatDate value="${oc.confirmationBean.shippingDate.time}" type="date" dateStyle="full" /></td>
-  <c:forEach var="item" items="${oc.orderBean.lineItems}" >
-    <td bgcolor="#CC9999">${item.coffeeName}</td>
-    <td bgcolor="#CC9999" align=right>${item.pounds}</td>
-  </tr>
-  </c:forEach>
-</c:forEach>
-<tr>
-<td colspan=3>&nbsp;</td>
-</tr>
-<tr>
-<td align=center colspan=3><a href="${pageContext.request.contextPath}/orderForm"><fmt:message key="ContinueShopping"/></a>
-<tr>
-<td colspan=3>&nbsp;</td>
-</tr>
-</table>
-</center>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/checkoutForm.jsp b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/checkoutForm.jsp
deleted file mode 100644
index e594785..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/checkoutForm.jsp
+++ /dev/null
@@ -1,127 +0,0 @@
-<%--
-
-    Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
---%>
-
-<form action="${pageContext.request.contextPath}/checkoutAck" method=post>
-<center>
-<table cellpadding=4 cellspacing=2 border=0>
-<tr>
-<td colspan=2>
-<p><fmt:message key="YourOrder"/> \$${sessionScope.cart.total}. <fmt:message key="CheckoutInstructions"/></td>
-</tr>
-<tr>
-<td colspan=2>&nbsp;</td>
-</tr>
-
-<tr bgcolor="#CC9999">
-<td align="center" colspan=2><font size=5><b><fmt:message key="CheckoutForm"/><b></font></td>
-</tr>
-
-<tr bgcolor="#CC9999">
-<td valign=top> 
-<B><fmt:message key="FirstName"/></B> 
-<br>
-<input type="text" name="firstName" value="${requestScope.checkoutFormBean.firstName}" size=15 maxlength=20>
-<br><font size=2 color=black>${requestScope.checkoutFormBean.errors.firstName}</font>
-</td>
-<td  valign=top>
-<B><fmt:message key="LastName"/></B>
-<br>
-<input type="text" name="lastName" value="${requestScope.checkoutFormBean.lastName}" size=15 maxlength=20>
-<br><font size=2 color=black>${requestScope.checkoutFormBean.errors.lastName}</font>
-</td>
-</tr>
-
-<tr bgcolor="#CC9999">
-<td valign=top>
-<B><fmt:message key="EMail"/></B> 
-<br>
-<input type="text" name="email" value="${requestScope.checkoutFormBean.email}" size=25  maxlength=125>
-<br><font size=2 color=black>${requestScope.checkoutFormBean.errors.email}</font>
-</td>
-<td  valign=top>
-<B><fmt:message key="PhoneNumber"/></B>
-<br> 
-<input type="text" name="areaCode" value="${requestScope.checkoutFormBean.areaCode}" size=3  maxlength=3>
-<input type="text" name="phoneNumber" value="${requestScope.checkoutFormBean.phoneNumber}" size=8  maxlength=8>
-<br><font size=2 color=black>${requestScope.checkoutFormBean.errors.phoneNumber}</font>
-</td>
-</tr>
-
-
-<tr bgcolor="#CC9999">
-<td valign=top>
-<B><fmt:message key="Street"/></B> 
-<br>
-<input type="text" name="street" size=25 value="${requestScope.checkoutFormBean.street}"  maxlength=25>
-<br><font size=2 color=black>${requestScope.checkoutFormBean.errors.street}</font>
-</td>
-<td  valign=top>
-<B><fmt:message key="City"/></B>
-<br>
-<input type="text" name="city" size=25 value="${requestScope.checkoutFormBean.city}"  maxlength=25>
-<br><font size=2 color=black>${requestScope.checkoutFormBean.errors.city}</font>
-</td>
-<br>
-</tr>
-
-<tr bgcolor="#CC9999">
-<td valign=top>
-<B><fmt:message key="State"/></B> 
-<br>
-<input type="text" name="state" size=2 value="${requestScope.checkoutFormBean.state}"  maxlength=2>
-<br><font size=2 color=black>${requestScope.checkoutFormBean.errors.state}</font>
-</td>
-<td  valign=top>
-<B><fmt:message key="Zip"/></B> 
-<br>
-<input type="text" name="zip" value="${requestScope.checkoutFormBean.zip}" size=5  maxlength=5>
-<br><font size=2 color=black>${requestScope.checkoutFormBean.errors.zip}</font>
-</td>
-<br>
-</tr>
-
-
-<tr bgcolor="#CC9999">
-<td valign=top>
-<B><fmt:message key="CCOption"/></B> 
-<br>
-  <select name=CCOption> 
-    <option value=0 <c:if test="${CCOption == 0}"> selected</c:if> >VISA</option>  	   
-    <option value=1 <c:if test="${CCOption == 1}"> selected</c:if> >MasterCard</option>	   
-    <option value=2 <c:if test="${CCOption == 2}"> selected</c:if> >American Express</option>
-  </select>
-</td>
-<td  valign=top>
-<B><fmt:message key="CCNumber"/></B> 
-<br>
-<input type="text" name="CCNumber" value="${requestScope.checkoutFormBean.CCNumber}" size=16  maxlength=16>
-<br><font size=2 color=black>${requestScope.checkoutFormBean.errors.CCNumber}</font>
-</td>
-<br>
-</tr>
-
-
-<tr bgcolor="#CC9999">
-<td colspan="2" align=center> 
-<input type="submit" value="<fmt:message key='Submit'/>">&nbsp;&nbsp;&nbsp;&nbsp;<input type="reset" value="<fmt:message key='Reset'/>">
-</td>
-</tr>
-
-</table>
-</center>
-</form>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/checkoutForm.txt b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/checkoutForm.txt
deleted file mode 100644
index 82e9b3f..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/checkoutForm.txt
+++ /dev/null
@@ -1,128 +0,0 @@
-<%--
-
-    Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
---%>
-
-
-<form action="${pageContext.request.contextPath}/checkoutAck" method=post>
-<center>
-<table cellpadding=4 cellspacing=2 border=0>
-<tr>
-<td colspan=2>
-<p><fmt:message key="YourOrder"/> \$${sessionScope.cart.total}. <fmt:message key="CheckoutInstructions"/></td>
-</tr>
-<tr>
-<td colspan=2>&nbsp;</td>
-</tr>
-
-<tr bgcolor="#CC9999">
-<td align="center" colspan=2><font size=5><b><fmt:message key="CheckoutForm"/><b></font></td>
-</tr>
-
-<tr bgcolor="#CC9999">
-<td valign=top> 
-<B><fmt:message key="FirstName"/></B> 
-<br>
-<input type="text" name="firstName" value="${requestScope.checkoutFormBean.firstName}" size=15 maxlength=20>
-<br><font size=2 color=black>${requestScope.checkoutFormBean.errors.firstName}</font>
-</td>
-<td  valign=top>
-<B><fmt:message key="LastName"/></B>
-<br>
-<input type="text" name="lastName" value="${requestScope.checkoutFormBean.lastName}" size=15 maxlength=20>
-<br><font size=2 color=black>${requestScope.checkoutFormBean.errors.lastName}</font>
-</td>
-</tr>
-
-<tr bgcolor="#CC9999">
-<td valign=top>
-<B><fmt:message key="EMail"/></B> 
-<br>
-<input type="text" name="email" value="${requestScope.checkoutFormBean.email}" size=25  maxlength=125>
-<br><font size=2 color=black>${requestScope.checkoutFormBean.errors.email}</font>
-</td>
-<td  valign=top>
-<B><fmt:message key="PhoneNumber"/></B>
-<br> 
-<input type="text" name="areaCode" value="${requestScope.checkoutFormBean.areaCode}" size=3  maxlength=3>
-<input type="text" name="phoneNumber" value="${requestScope.checkoutFormBean.phoneNumber}" size=8  maxlength=8>
-<br><font size=2 color=black>${requestScope.checkoutFormBean.errors.phoneNumber}</font>
-</td>
-</tr>
-
-
-<tr bgcolor="#CC9999">
-<td valign=top>
-<B><fmt:message key="Street"/></B> 
-<br>
-<input type="text" name="street" size=25 value="${requestScope.checkoutFormBean.street}"  maxlength=25>
-<br><font size=2 color=black>${requestScope.checkoutFormBean.errors.street}</font>
-</td>
-<td  valign=top>
-<B><fmt:message key="City"/></B>
-<br>
-<input type="text" name="city" size=25 value="${requestScope.checkoutFormBean.city}"  maxlength=25>
-<br><font size=2 color=black>${requestScope.checkoutFormBean.errors.city}</font>
-</td>
-<br>
-</tr>
-
-<tr bgcolor="#CC9999">
-<td valign=top>
-<B><fmt:message key="State"/></B> 
-<br>
-<input type="text" name="state" size=2 value="${requestScope.checkoutFormBean.state}"  maxlength=2>
-<br><font size=2 color=black>${requestScope.checkoutFormBean.errors.state}</font>
-</td>
-<td  valign=top>
-<B><fmt:message key="Zip"/></B> 
-<br>
-<input type="text" name="zip" value="${requestScope.checkoutFormBean.zip}" size=5  maxlength=5>
-<br><font size=2 color=black>${requestScope.checkoutFormBean.errors.zip}</font>
-</td>
-<br>
-</tr>
-
-
-<tr bgcolor="#CC9999">
-<td valign=top>
-<B><fmt:message key="CCOption"/></B> 
-<br>
-  <select name=CCOption> 
-    <option value=0 <c:if test="${CCOption == 0}"> selected</c:if> >VISA</option>  	   
-    <option value=1 <c:if test="${CCOption == 1}"> selected</c:if> >MasterCard</option>	   
-    <option value=2 <c:if test="${CCOption == 2}"> selected</c:if> >American Express</option>
-  </select>
-</td>
-<td  valign=top>
-<B><fmt:message key="CCNumber"/></B> 
-<br>
-<input type="text" name="CCNumber" value="${requestScope.checkoutFormBean.CCNumber}" size=16  maxlength=16>
-<br><font size=2 color=black>${requestScope.checkoutFormBean.errors.CCNumber}</font>
-</td>
-<br>
-</tr>
-
-
-<tr bgcolor="#CC9999">
-<td colspan="2" align=center> 
-<input type="submit" value="<fmt:message key='Submit'/>">&nbsp;&nbsp;&nbsp;&nbsp;<input type="reset" value="<fmt:message key='Reset'/>">
-</td>
-</tr>
-
-</table>
-</center>
-</form>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/errorpage.jsp b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/errorpage.jsp
deleted file mode 100644
index 1b9cdb9..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/errorpage.jsp
+++ /dev/null
@@ -1,42 +0,0 @@
-<%--
-
-    Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
---%>
-
-<%@ page isErrorPage="true" %>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
-<html>
-<head>
-<title><fmt:message key="ServerError"/></title>
-</head>
-<body bgcolor="white">
-<h3>
-<fmt:message key="ServerError"/>
-</h3>
-<p>
-${pageContext.errorData.throwable}
-<c:choose>
-  <c:when test="${!empty pageContext.errorData.throwable.cause}">
-  : ${pageContext.errorData.throwable.cause}
-  </c:when>
-  <c:when test="${!empty pageContext.errorData.throwable.rootCause}">
-  : ${pageContext.errorData.throwable.rootCause}
-  </c:when>
-</c:choose>
-</body>
-</html>
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/errorpage.txt b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/errorpage.txt
deleted file mode 100644
index fa63fdf..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/errorpage.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-<%--
-
-    Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
---%>
-
-<%@ page isErrorPage="true" %>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
-<html>
-<head>
-<title><fmt:message key="ServerError"/></title>
-</head>
-<body bgcolor="white">
-<h3>
-<fmt:message key="ServerError"/>
-</h3>
-<p>
-${pageContext.errorData.throwable}
-<c:choose>
-  <c:when test="${!empty pageContext.errorData.throwable.cause}">
-  : ${pageContext.errorData.throwable.cause}
-  </c:when>
-  <c:when test="${!empty pageContext.errorData.throwable.rootCause}">
-  : ${pageContext.errorData.throwable.rootCause}
-  </c:when>
-</c:choose>
-</body>
-</html>
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/orderForm.jsp b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/orderForm.jsp
deleted file mode 100644
index bb4fe8a..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/orderForm.jsp
+++ /dev/null
@@ -1,74 +0,0 @@
-<%--
-
-    Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
---%>
-
-<form action="${pageContext.request.contextPath}/orderForm" method=post>
-<center>
-
-<table cellpadding=4 cellspacing=2 border=0>
-
-<tr>
-<td colspan=4><fmt:message key="OrderInstructions"/></td>
-</tr>
-
-<tr>
-<td colspan=4>
-&nbsp;</td>
-</tr>
-
-<tr bgcolor="#CC9999">
-<td align="center" colspan=4><font size=5><b><fmt:message key="OrderForm"/><b></font></td>
-</tr>
-
-<tr bgcolor="#CC9999">
-<td align=center><B><fmt:message key="Coffee"/></B></td>
-<td align=center><B><fmt:message key="Price"/></B></td>
-<td align=center><B><fmt:message key="Quantity"/></B></td>
-<td align=center><B><fmt:message key="Total"/></B></td>
-</tr>
-
-<c:forEach var="sci" items="${sessionScope.cart.items}" >
-<tr bgcolor="#CC9999">
-<td>${sci.item.coffeeName}</td>
-<td align=right>\$${sci.item.retailPricePerPound}</td>
-<td align=center><input type="text" name="${sci.item.coffeeName}_pounds" value="${sci.pounds}" size="3"  maxlength="3"></td> 
-<td align=right>\$${sci.price}</td>
-</tr>
-</c:forEach>
-
-<tr>
-<td>&nbsp;</td>
-<td> 
-<a href="${pageContext.request.contextPath}/checkoutForm?firstName=Coffee&lastName=Lover&email=jane@home&areaCode=123&phoneNumber=456-7890&street=99&city=Somewhere&state=CA&zip=95050&CCNumber=1234-2345-5678&CCOption=0"><fmt:message key='Checkout'/></a>
-</td>
-<td><input type="submit" value="<fmt:message key='Update'/>"></td>
-<td align=right>\$${sessionScope.cart.total}</td>
-<td>&nbsp;</td>
-</tr>
-
-<tr>
-<td colspan=5>${requestScope.orderError}</td>
-</tr>
-
-
-</table>
-</center>
-</form>
-
-
-
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/orderForm.txt b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/orderForm.txt
deleted file mode 100644
index 421e70a..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/orderForm.txt
+++ /dev/null
@@ -1,73 +0,0 @@
-<%--
-
-    Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
---%>
-<form action="${pageContext.request.contextPath}/orderForm" method=post>
-<center>
-
-<table cellpadding=4 cellspacing=2 border=0>
-
-<tr>
-<td colspan=4><fmt:message key="OrderInstructions"/></td>
-</tr>
-
-<tr>
-<td colspan=4>
-&nbsp;</td>
-</tr>
-
-<tr bgcolor="#CC9999">
-<td align="center" colspan=4><font size=5><b><fmt:message key="OrderForm"/><b></font></td>
-</tr>
-
-<tr bgcolor="#CC9999">
-<td align=center><B><fmt:message key="Coffee"/></B></td>
-<td align=center><B><fmt:message key="Price"/></B></td>
-<td align=center><B><fmt:message key="Quantity"/></B></td>
-<td align=center><B><fmt:message key="Total"/></B></td>
-</tr>
-
-<c:forEach var="sci" items="${sessionScope.cart.items}" >
-<tr bgcolor="#CC9999">
-<td>${sci.item.coffeeName}</td>
-<td align=right>\$${sci.item.retailPricePerPound}</td>
-<td align=center><input type="text" name="${sci.item.coffeeName}_pounds" value="${sci.pounds}" size="3"  maxlength="3"></td> 
-<td align=right>\$${sci.price}</td>
-</tr>
-</c:forEach>
-
-<tr>
-<td>&nbsp;</td>
-<td> 
-<a href="${pageContext.request.contextPath}/checkoutForm?firstName=Coffee&lastName=Lover&email=jane@home&areaCode=123&phoneNumber=456-7890&street=99&city=Somewhere&state=CA&zip=95050&CCNumber=1234-2345-5678&CCOption=0"><fmt:message key='Checkout'/></a>
-</td>
-<td><input type="submit" value="<fmt:message key='Update'/>"></td>
-<td align=right>\$${sessionScope.cart.total}</td>
-<td>&nbsp;</td>
-</tr>
-
-<tr>
-<td colspan=5>${requestScope.orderError}</td>
-</tr>
-
-
-</table>
-</center>
-</form>
-
-
-
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/banner.jsp b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/banner.jsp
deleted file mode 100644
index 7de63ff..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/banner.jsp
+++ /dev/null
@@ -1,29 +0,0 @@
-<%--
-
-    Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
---%>
-
-<body  bgcolor="#FFFFFF">
-<center>
-<table>
-<tr>
-<td><img src="template/coffeebean.jpg"></td>
-<td><h1><font size="+3" color="black" face="sans">Coffee Break</font></h1></td>
-<td><img src="template/coffeebean.jpg" alt="Coffee Bean"></td>
-</tr>
-</table>
-</center>
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/banner.txt b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/banner.txt
deleted file mode 100644
index 7e993a3..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/banner.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-<%--
-
-    Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
---%>
-
-<body  bgcolor="#FFFFFF">
-<center>
-<table>
-<tr>
-<td><img src="coffeebean.jpg"></td>
-<td><h1><font size="+3" color="black" face="sans">Coffee Break</font></h1></td>
-<td><img src="coffeebean.jpg"></td>
-</tr>
-</table>
-</center>
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/coffeebean.jpg b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/coffeebean.jpg
deleted file mode 100644
index 6696f2e..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/coffeebean.jpg
+++ /dev/null
Binary files differ
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/errorinclude.jsp b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/errorinclude.jsp
deleted file mode 100644
index 04adaec..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/errorinclude.jsp
+++ /dev/null
@@ -1,36 +0,0 @@
-<%--
-
-    Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
---%>
-
-<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
-<%@ page isErrorPage="true" %>
-<h3>
-<fmt:message key="ServerError"/>
-</h3>
-<p>
-${pageContext.errorData.throwable}
-<c:choose>
-  <c:when test="${!empty pageContext.errorData.throwable.cause}">
-  : ${pageContext.errorData.throwable.cause}
-  </c:when>
-  <c:when test="${!empty pageContext.errorData.throwable.rootCause}">
-  : ${pageContext.errorData.throwable.rootCause}
-  </c:when>
-</c:choose>
-
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/prelude.jspf b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/prelude.jspf
deleted file mode 100644
index 16b721c..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/prelude.jspf
+++ /dev/null
@@ -1,22 +0,0 @@
-<%--
-
-    Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
---%>
-
-<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/screendefinitions.jsp b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/screendefinitions.jsp
deleted file mode 100644
index 4cdf970..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/screendefinitions.jsp
+++ /dev/null
@@ -1,45 +0,0 @@
-<%--
-
-    Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
---%>
-
-<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
-
-<tt:definition name="coffeebreak" screen="${requestScope['jakarta.servlet.forward.servlet_path']}">
-  <tt:screen screenId="/orderForm">
-    <tt:parameter name="title" value="Coffee Break" direct="true"/>
-    <tt:parameter name="banner" value="/template/banner.jsp" direct="false"/>
-    <tt:parameter name="body" value="/orderForm.jsp" direct="false"/>
-  </tt:screen>
-  <tt:screen screenId="/checkoutForm">
-    <tt:parameter name="title" direct="true">
-      <jsp:attribute name="value" >
-        <fmt:message key="TitleCheckoutForm"/>
-      </jsp:attribute>
-    </tt:parameter>
-    <tt:parameter name="banner" value="/template/banner.jsp" direct="false"/>
-    <tt:parameter name="body" value="/checkoutForm.jsp" direct="false"/>
-  </tt:screen>
-  <tt:screen screenId="/checkoutAck">
-    <tt:parameter name="title" direct="true">
-      <jsp:attribute name="value" >
-        <fmt:message key="TitleCheckoutAck"/>
-      </jsp:attribute>
-    </tt:parameter>
-    <tt:parameter name="banner" value="/template/banner.jsp" direct="false"/>
-    <tt:parameter name="body" value="/checkoutAck.jsp" direct="false"/>
-  </tt:screen>
-</tt:definition>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/screendefinitions.txt b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/screendefinitions.txt
deleted file mode 100644
index 81b638c..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/screendefinitions.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-<%--
-
-    Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
---%>
-
-<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
-
-<tt:definition name="coffeebreak" screen="${requestScope['jakarta.servlet.forward.servlet_path']}">
-  <tt:screen screenId="/orderForm">
-    <tt:parameter name="title" value="Coffee Break" direct="true"/>
-    <tt:parameter name="banner" value="/banner.jsp" direct="false"/>
-    <tt:parameter name="body" value="/orderForm.jsp" direct="false"/>
-  </tt:screen>
-  <tt:screen screenId="/checkoutForm">
-    <tt:parameter name="title" direct="true">
-      <jsp:attribute name="value" >
-        <fmt:message key="TitleCheckoutForm"/>
-      </jsp:attribute>
-    </tt:parameter>
-    <tt:parameter name="banner" value="/banner.jsp" direct="false"/>
-    <tt:parameter name="body" value="/checkoutForm.jsp" direct="false"/>
-  </tt:screen>
-  <tt:screen screenId="/checkoutAck">
-    <tt:parameter name="title" direct="true">
-      <jsp:attribute name="value" >
-        <fmt:message key="TitleCheckoutAck"/>
-      </jsp:attribute>
-    </tt:parameter>
-    <tt:parameter name="banner" value="/banner.jsp" direct="false"/>
-    <tt:parameter name="body" value="/checkoutAck.jsp" direct="false"/>
-  </tt:screen>
-</tt:definition>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/template.jsp b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/template.jsp
deleted file mode 100644
index 9fe1eda..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/template.jsp
+++ /dev/null
@@ -1,31 +0,0 @@
-<%--
-
-    Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
---%>
-
-<%@ taglib uri="/WEB-INF/tutorial-template.tld" prefix="tt" %>
-<%@ page errorPage="/template/errorinclude.jsp" %>
-<%@ include file="/template/screendefinitions.jsp" %>
-<html>
-<head>
-<title>
-        <tt:insert definition="coffeebreak" parameter="title"/>
-</title>
-</head>
-        <tt:insert definition="coffeebreak" parameter="banner"/>
-        <tt:insert definition="coffeebreak" parameter="body"/>
-</body>
-</html>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/template.txt b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/template.txt
deleted file mode 100644
index 7e1c101..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/template/template.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-<%--
-
-    Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
---%>
-
-
-<%@ taglib uri="/WEB-INF/tutorial-template.tld" prefix="tt" %>
-<%@ page errorPage="/template/errorinclude.jsp" %>
-<%@ include file="/template/screendefinitions.jsp" %>
-<html>
-<head>
-<title>
-        <tt:insert definition="coffeebreak" parameter="title"/>
-</title>
-</head>
-        <tt:insert definition="coffeebreak" parameter="banner"/>
-        <tt:insert definition="coffeebreak" parameter="body"/>
-</body>
-</html>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/tutorial-template.tld b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/tutorial-template.tld
deleted file mode 100644
index 9665e08..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/cb/server/web/tutorial-template.tld
+++ /dev/null
@@ -1,87 +0,0 @@
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
-    version="2.0">
-    <description>A tag library exercising SimpleTag handlers.</description>
-    <tlib-version>1.0</tlib-version>
-    <short-name>SimpleTagLibrary</short-name>
-    <uri>/SimpleTagLibrary</uri>
- <tag>
-    <name>definition</name>
-    <tag-class>template.DefinitionTag</tag-class>
-    <body-content>scriptless</body-content>
-    <attribute>
-      <name>name</name>
-      <required>true</required>
-      <rtexprvalue>true</rtexprvalue>
-    </attribute>
-     <attribute>
-      <name>screen</name>
-      <required>true</required>
-      <rtexprvalue>true</rtexprvalue>
-    </attribute>
-  </tag>
-  <tag>
-    <name>screen</name>
-    <tag-class>template.ScreenTag</tag-class>
-    <body-content>scriptless</body-content>
-    <attribute>
-      <name>screenId</name>
-      <required>true</required>
-      <rtexprvalue>true</rtexprvalue>
-    </attribute>
-  </tag>
-  <tag>
-    <name>parameter</name>
-    <tag-class>template.ParameterTag</tag-class>
-    <body-content>scriptless</body-content>
-    <attribute>
-      <name>name</name>
-      <required>true</required>
-      <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-      <name>value</name>
-      <required>true</required>
-      <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-      <name>direct</name>
-      <required>true</required>
-      <rtexprvalue>true</rtexprvalue>
-    </attribute>
-   </tag>
-  <tag>
-    <name>insert</name>
-    <tag-class>template.InsertTag</tag-class>
-    <body-content>scriptless</body-content>
-    <attribute>
-      <name>definition</name>
-      <required>true</required>
-      <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-      <name>parameter</name>
-      <required>true</required>
-      <rtexprvalue>true</rtexprvalue>
-    </attribute>
-  </tag>
-</taglib>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/common/build.properties b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/common/build.properties
deleted file mode 100644
index 6ddb470..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/common/build.properties
+++ /dev/null
@@ -1,45 +0,0 @@
-<!--
-
-    Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-
-j2ee.home=${S1AS_home}
-sunone.home=${j2ee.home}
-#
-# The following settings have been commented out because they are performed by the devtests
-# set-up instead.
-#
-#admin.password=
-#admin.host=localhost
-#admin.user=admin
-#admin.port=4848
-#https.port=1043
-
-domain.resources="domain.resources"
-domain.resources.port=${http.port} # 8080
-#db.root=${j2ee.home}/pointbase
-#db.driver=com.pointbase.jdbc.jdbcUniversalDriver
-#db.host=localhost
-#db.port=9092
-#db.sid=sun-appserv-samples
-#db.url=jdbc:pointbase:server://${db.host}:${db.port}/${db.sid}
-#db.user=pbpublic
-#db.pwd=pbpublic
-url.prop=DatabaseName
-ds.class=com.pointbase.jdbc.jdbcDataSource
-db.jvmargs=-ms16m -mx32m
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/common/targets.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/common/targets.xml
deleted file mode 100644
index 1def8de..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/misc/exampleFromJ2EETutorial/common/targets.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-  <path id="classpath">
-    <fileset dir="${j2ee.home}/lib">
-      <include name="j2ee.jar"/>
-    </fileset>
-  </path>
-
-  <target name="clean" >
-    <delete dir="${build}" />
-    <delete dir="${dist}" />
-  </target>
-
-  <path id="db.classpath">
-    <fileset dir="${db.root}/lib">
-      <include name="*.jar"/>
-    </fileset>
-  </path>
-
-  <target name="create-db_common" depends="init"
-     description="Create database tables and populate database." >
-    <java classname="com.pointbase.tools.toolsCommander" fork="yes" >
-      <jvmarg line="${db.jvmargs}" />
-      <arg line="${db.driver} ${db.url} ${sql.script} ${db.user} ${db.pwd}" />
-      <classpath refid="db.classpath" />
-    </java>
-  </target>
-
-  <target name="admin_command_common">
-    <echo message="Doing admin task ${admin.command}"/>
-    <sun-appserv-admin
-      command="${admin.command}"
-      user="${admin.user}"
-      password="${admin.password}"
-      host="${admin.host}"
-      port="${admin.port}"
-      sunonehome="${j2ee.home}" />
-  </target>
-
-  <target name="create-jdbc-resource_common">
-    <antcall target="admin_command_common">
-      <param name="admin.command"
-        value="create-jdbc-resource
-         --connectionpoolid ${conpool.name} ${jdbc.resource.name}" />
-    </antcall>
-  </target>
-
-  <target name="delete-jdbc-resource_common">
-    <antcall target="admin_command_common">
-      <param name="admin.command"
-        value="delete-jdbc-resource ${jdbc.resource.name}" />
-    </antcall>
-  </target>
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/tester/Deployer.java b/appserver/tests/appserv-tests/devtests/deployment/jsr88/tester/Deployer.java
deleted file mode 100644
index f5b4f93..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/tester/Deployer.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package tester;
-
-import java.io.*;
-import java.util.*;
-import java.beans.*;
-import javax.enterprise.deploy.model.*;
-import javax.enterprise.deploy.shared.factories.*;
-import javax.enterprise.deploy.spi.factories.*;
-import javax.enterprise.deploy.spi.*;
-import javax.enterprise.deploy.spi.status.*;
-import javax.enterprise.deploy.shared.ModuleType;
-
-import com.sun.enterprise.deployapi.DeploymentFactoryInstaller;
-
-public class Deployer implements ProgressListener {
-
-    public static void main(String args[]) {
-
-        try {
-            System.out.println(" inst at " + System.getProperty("com.sun.aas.installRoot"));
-            Deployer deployer = new Deployer();
-            deployer.deploy(args);
-            System.exit(0);
-        } catch(Exception e) {
-            e.printStackTrace();
-            System.exit(-1);
-        }
-    }
-
-
-    public void deploy(String args[]) throws Exception {
-
-        DeploymentFactoryInstaller.getInstaller();
-        DeploymentManager dm = DeploymentFactoryManager.getInstance().getDeploymentManager("deployer:Sun:S1AS::localhost:4848", "admin", "adminadmin");
-        ProgressObject dpo;
-        File archive = new File(args[0]);
-        File deploymentPlan = new File(args[1]);
-
-        if (!deploymentPlan.exists()) {
-             System.out.println("Warning, deploying with null deployment plan");
-             dpo = dm.distribute(dm.getTargets(), archive, null);
-        } else {
-            System.out.println("Deploying " + archive.getAbsolutePath() + " with plan " + deploymentPlan.getAbsoluteFile());
-             dpo = dm.distribute(dm.getTargets(), archive, deploymentPlan);
-        }
-        dpo.addProgressListener(this);
-        System.out.println("Deployment returned " + dpo);
-        if (dpo!=null) {
-            DeploymentStatus deploymentStatus = dpo.getDeploymentStatus();
-            do {
-                Thread.currentThread().sleep(200);
-            } while (!(deploymentStatus.isCompleted() || deploymentStatus.isFailed()));
-            System.out.println("Deployment status is " + deploymentStatus);
-        }
-        TargetModuleID[] targetModuleIDs = dpo.getResultTargetModuleIDs();
-        dumpResultModuleIDs("Deployed " , dpo);
-
-//        ModuleType moduleType = ((SunTargetModuleID) targetModuleIDs[0]).getModuleType();
-
-//        listApplications(dm, moduleType , dm.getTargets(), null);
-    }
-
-    private void dumpResultModuleIDs(String prefix, ProgressObject po) {
-        TargetModuleID[] targetModuleIDs = po.getResultTargetModuleIDs();
-        for (int i=0;i<targetModuleIDs.length;i++) {
-            dumpModulesIDs(prefix, targetModuleIDs[i]);
-        }
-    }
-
-    private void dumpModulesIDs(String prefix, TargetModuleID targetModuleID) {
-        System.out.println(prefix + targetModuleID);
-        TargetModuleID[] subs = targetModuleID.getChildTargetModuleID();
-        if (subs!=null) {
-            for (int i=0;i<subs.length;i++) {
-                System.out.println(" Child " + i + "\n" + subs[i]);
-            }
-        }
-    }
-
-    public void handleProgressEvent(javax.enterprise.deploy.spi.status.ProgressEvent progressEvent) {
-        DeploymentStatus ds = progressEvent.getDeploymentStatus();
-        System.out.println("Received Progress Event state " + ds.getState() + " msg = " + ds.getMessage());
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/tester/build.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/tester/build.xml
deleted file mode 100644
index 1ec69b2..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/tester/build.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="wstoejb" default="all" basedir=".">
-
-        &commonBuild;
-
-        <target name="prepare" depends="init">
-                <mkdir dir="${build}" />
-        </target>
-
-        <target name="compile" depends="prepare">
-                <javac srcdir="." destdir="${build}">
-                    <classpath>
-                      <pathelement path="${inst}/lib/j2ee.jar"/>
-                      <pathelement path="${inst}/lib/appserv-rt.jar"/>
-                    </classpath>
-                </javac>
-        </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/war/build.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/war/build.xml
deleted file mode 100644
index 4fcbfbb..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/war/build.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="ear" default="all" basedir=".">
-
-        &commonBuild;
-
-        <target name="private-all">
-                <ant dir="simple" target="private-all">
-                        <property name="build" value="${build}/simple"/>
-                </ant>
-        </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/war/simple/Simple_Page.html b/appserver/tests/appserv-tests/devtests/deployment/jsr88/war/simple/Simple_Page.html
deleted file mode 100644
index fc2140b..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/war/simple/Simple_Page.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-  <meta http-equiv="content-type"
- content="text/html; charset=ISO-8859-1">
-  <title>Simple Page</title>
-</head>
-<body>
-<div style="text-align: center;">This is a very simple HTML page !<br>
-<br>
-<div style="text-align: left;"><br>
-<address>jerome.dochez@sun.com<br>
-</address>
-</div>
-</div>
-</body>
-</html>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/war/simple/build.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/war/simple/build.xml
deleted file mode 100644
index 45aef9e..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/war/simple/build.xml
+++ /dev/null
@@ -1,114 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../../config/common.xml">
-]>
-
-<project name="ear" default="all" basedir=".">
-
-        &commonBuild;
-    <property name="archivedir" value="${build}/archives"/>
-
-        <target name="build-deployment-plan">
-                <mkdir dir="${build}/plan"/>
-                <copy file="sun-web.xml" tofile="${build}/plan/sun-web.xml"/>
-                <jar destfile="${archivedir}/plan.jar" basedir="${build}/plan"/>
-        </target>
-
-        <target name="build-portable">
-                <war destfile="${archivedir}/simple.war" webxml="web.xml">
-                        <fileset file="Simple_Page.html"/>
-                </war>
-        </target>
-
-        <target name="undeploy">
-                <antcall target="common.run.jsr88">
-                        <param name="command" value="undeploy"/>
-                        <param name="arg.list" value="simple"/>
-                </antcall>
-        </target>
-
-        <target name="deploy-test" depends="setHttpPort">
-        <mkdir dir="${archivedir}"/>
-                <antcall target="declare-test">
-                    <param name="description" value="jsr88/war/simple deploy test"/>
-                </antcall>
-                <antcall target="build-portable"/>
-                <antcall target="build-deployment-plan"/>
-                <antcall target="common.run.jsr88">
-                        <param name="command" value="deploy"/>
-                        <param name="arg.list" value="true ${archivedir}/simple.war ${archivedir}/plan.jar"/>
-                </antcall>
-                <echo message="getting http://${http.host}:${depltest.port}/simple/Simple_Page.html"/>
-                <condition property="success">
-                        <http url="http://${http.host}:${depltest.port}/simple/Simple_Page.html"/>
-                </condition>
-                <antcall target="testSuccess"><param name="log.id" value="1"/></antcall>
-                <antcall target="testFailure"><param name="log.id" value="2"/></antcall>
-                <!--
-                <antcall target="undeploy"/>
-                -->
-        </target>
-
-        <target name="redeploy-test" depends="setHttpPort">
-                <antcall target="declare-test">
-                    <param name="description" value="jsr88/war/simple redeploy test"/>
-                </antcall>
-                <!--
-                <antcall target="build-portable"/>
-                <antcall target="build-deployment-plan"/>
-                <antcall target="common.run.jsr88">
-                        <param name="command" value="deploy"/>
-                        <param name="arg.list" value="true ${archivedir}/simple.war ${archivedir}/plan.jar"/>
-                </antcall>
-                -->
-                <antcall target="common.run.jsr88">
-                        <param name="command" value="redeploy"/>
-                        <param name="arg.list" value="simple ${archivedir}/simple.war ${archivedir}/plan.jar"/>
-                </antcall>
-
-                <echo message="getting http://${http.host}:${depltest.port}/simple/Simple_Page.html"/>
-                <condition property="success">
-                        <http url="http://${http.host}:${depltest.port}/simple/Simple_Page.html"/>
-                </condition>
-                <antcall target="testSuccess"><param name="log.id" value="3"/></antcall>
-                <antcall target="testFailure"><param name="log.id" value="4"/></antcall>
-                <antcall target="undeploy"/>
-        </target>
-
-
-        <target name="private-all">
-            <antcall target="deploy-test"/>
-            <antcall target="redeploy-test"/>
-        </target>
-
-        <target name="testSuccess" if="success">
-            <antcall target="processResult">
-                <param name="result" value="0"/>
-                <param name="log" value="${build}/${log.id}.output.log"/>
-            </antcall>
-        </target>
-        <target name="testFailure" unless="success">
-            <antcall target="processResult">
-                <param name="result" value="-1"/>
-                <param name="log" value="${build}/${log.id}.output.log"/>
-            </antcall>
-        </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/war/simple/sun-web.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/war/simple/sun-web.xml
deleted file mode 100644
index 30fcd26..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/war/simple/sun-web.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 Servlet 2.4//EN' 'http://www.sun.com/software/sunone/appserver/dtds/sun-web-app_2_4-0.dtd'>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<sun-web-app>
-    <context-root>simple</context-root>
-</sun-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/jsr88/war/simple/web.xml b/appserver/tests/appserv-tests/devtests/deployment/jsr88/war/simple/web.xml
deleted file mode 100644
index 18b7c2f..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/jsr88/war/simple/web.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-  <display-name>Simplistic Web Application</display-name>
-  <welcome-file-list>
-        <welcome-file>simple_page.html</welcome-file>
-  </welcome-file-list>
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/osgi/simple/build.xml b/appserver/tests/appserv-tests/devtests/deployment/osgi/simple/build.xml
index 48657d5..5775746 100644
--- a/appserver/tests/appserv-tests/devtests/deployment/osgi/simple/build.xml
+++ b/appserver/tests/appserv-tests/devtests/deployment/osgi/simple/build.xml
@@ -113,7 +113,7 @@
             <jvmarg value="-Dorg.omg.CORBA.ORBInitialPort=${orb.port}"/>
 
             <classpath>
-                <path location="${inst}/lib/j2ee.jar"/>
+                <path location="${inst}/lib/javaee.jar"/>
                 <path location="${build}"/>
             </classpath>
 
diff --git a/appserver/tests/appserv-tests/devtests/deployment/util/JSR88Deployer.java b/appserver/tests/appserv-tests/devtests/deployment/util/JSR88Deployer.java
deleted file mode 100644
index d7a1793..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/util/JSR88Deployer.java
+++ /dev/null
@@ -1,787 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package devtests.deployment.util;
-
-import java.io.*;
-import java.util.*;
-import java.net.*;
-import java.beans.*;
-import java.util.jar.Manifest;
-import javax.enterprise.deploy.model.*;
-import javax.enterprise.deploy.shared.factories.*;
-import javax.enterprise.deploy.spi.factories.*;
-import javax.enterprise.deploy.spi.*;
-import javax.enterprise.deploy.spi.status.*;
-import javax.enterprise.deploy.shared.ModuleType;
-
-/**
- *
- * @author  administrator
- */
-public class JSR88Deployer implements ProgressListener {
-
-    private String host;
-    private String port;
-    private String user;
-    private String password;
-    private String uri;
-    private DeploymentFactory deploymentFactory;
-    private DeploymentManager dm;
-    private Target[] targets;
-    private final String J2EE_DEPLOYMENT_MANAGER =
-                        "J2EE-DeploymentFactory-Implementation-Class";
-    private static List systemApps = new ArrayList();
-
-    /** Record all events delivered to this deployer (which is also a progress listener. */
-    private Vector receivedEvents = new Vector();
-
-    /** Record the TargetModuleIDs that resulted from the most recent operation. */
-    private TargetModuleID [] mostRecentTargetModuleIDs = null;
-
-    /** Creates a new instance of JSR88Deployer */
-    public JSR88Deployer(String uri, String user, String password) {
-        this.user = user;
-        this.password = password;
-        this.uri = uri;
-        loadDeploymentFactory();
-        loadSystemApps(); //system apps to be filtered
-
-        log("Connecting using uri = " + uri + "; user = " + user + "; password = " + password);
-        try {
-            dm = DeploymentFactoryManager.getInstance().getDeploymentManager(uri, user, password);
-        } catch (Exception ex) {
-            ex.printStackTrace();
-            System.exit(-1);
-        }
-
-        Target[] allTargets = dm.getTargets();
-        if (allTargets.length == 0) {
-            log("Can't find deployment targets...");
-            System.exit(-1);
-        }
-
-        // If test being run on EE, exclude the DAS server instance from the deploy targets
-        String targetPlatform = System.getProperty("deploymentTarget");
-        List filteredTargets = new ArrayList();
-        if( ("SERVER".equals(targetPlatform)) || ("CLUSTER".equals(targetPlatform)) ) {
-            for(int i=0; i<allTargets.length; i++) {
-                if(allTargets[i].getName().equals("server")) {
-                    continue;
-                }
-                filteredTargets.add(allTargets[i]);
-            }
-            targets = (Target[])(filteredTargets.toArray(new Target[filteredTargets.size()]));
-        } else {
-            targets = allTargets;
-        }
-
-        for(int i=0; i<targets.length; i++) {
-            log("DBG : Target " + i + " -> " + targets[i].getName());
-        }
-    }
-
-    private int waitTillComplete(ProgressObject po) throws Exception {
-        DeploymentStatus deploymentStatus = null;
-        do {
-            /*
-             *The progress object may return a DeploymentStatus object that is a snapshot of the
-             *current status and will never change.  (The spec is unclear on this behavior.)  So
-             *to be sure, get a new deployment status every time through the loop to be sure of
-             *getting the up-to-date status.
-             */
-            deploymentStatus = po.getDeploymentStatus();
-            Thread.currentThread().sleep(200);
-        } while (!(deploymentStatus.isCompleted() || deploymentStatus.isFailed()));
-        log("Deployment status is " + deploymentStatus.getState().toString());
-        if(deploymentStatus.isFailed())
-                return(-1);
-        return(0);
-    }
-
-    public ProgressObject deploy(File archive, File deploymentPlan,
-                                boolean startByDefault, boolean useStream,
-                                ModuleType type)
-        throws Exception {
-
-        ProgressObject dpo = null;
-        ProgressObject po = null;
-        if (deploymentPlan == null || deploymentPlan.getName().equals("null")) {
-            log("Warning, deploying with null deployment plan");
-            if (useStream) {
-                if (type == null) {
-                    dpo = dm.distribute(targets,
-                                    new FileInputStream(archive.getAbsolutePath()),
-                                    null);
-                } else {
-                    dpo = dm.distribute(targets, type,
-                                    new FileInputStream(archive.getAbsolutePath()),
-                                    null);
-                }
-            } else {
-                dpo = dm.distribute(targets, archive, null);
-            }
-        } else {
-            if (useStream) {
-                if (type == null) {
-                    dpo = dm.distribute(targets,
-                                    new FileInputStream(archive.getAbsolutePath()),
-                                    new FileInputStream(deploymentPlan.getAbsolutePath()));
-                } else {
-                    dpo = dm.distribute(targets, type,
-                                    new FileInputStream(archive.getAbsolutePath()),
-                                    new FileInputStream(deploymentPlan.getAbsolutePath()));
-                }
-            } else {
-                dpo = dm.distribute(targets, archive, deploymentPlan);
-            }
-        }
-        if (dpo!=null) {
-            dpo.addProgressListener(this);
-            if(waitTillComplete(dpo) != 0) {
-                log("DEPLOY Action Failed");
-                return(null);
-            }
-
-            TargetModuleID[] targetModuleIDs = dpo.getResultTargetModuleIDs();
-            this.mostRecentTargetModuleIDs = targetModuleIDs;
-            dumpResultModuleIDs("Deployed " , dpo);
-
-            if (startByDefault) {
-                log("STARTINNG... " + targetModuleIDs);
-                po = dm.start(targetModuleIDs);
-                if (po!=null) {
-                    po.addProgressListener(this);
-                    if(waitTillComplete(po) != 0) {
-                        log("START Action Failed");
-                        return(null);
-                    }
-                }
-                return po;
-            }
-        }
-        return(dpo);
-    }
-
-    public ProgressObject redeploy(String moduleID, File archive,
-                                File deploymentPlan, boolean useStream) throws Exception {
-
-        TargetModuleID[] list = null;
-        if (moduleID == null) { //redeploy all but system apps
-            throw new UnsupportedOperationException("DO NOT SUPPORT REDEPLOY MULTIPLE APPS");
-        } else {
-            list = findApplication(moduleID, null);
-        }
-
-        TargetModuleID[] modules = filterSystemApps(list);
-        if (modules != null && modules.length > 0) {
-            for (int i = 0; i < modules.length; i++) {
-                log("REDEPLOYING... " + modules[i]);
-            }
-        }
-
-        ProgressObject dpo = null;
-        if (deploymentPlan == null || deploymentPlan.getName().equals("null")) {
-            log("Warning, redeploying with null deployment plan");
-            if (useStream) {
-                dpo = dm.redeploy(modules,
-                                    new FileInputStream(archive.getAbsolutePath()),
-                                    null);
-            } else {
-                dpo = dm.redeploy(modules, archive, null);
-            }
-        } else {
-            if (useStream) {
-                dpo = dm.redeploy(modules,
-                                    new FileInputStream(archive.getAbsolutePath()),
-                                    new FileInputStream(deploymentPlan.getAbsolutePath()));
-            } else {
-                dpo = dm.redeploy(modules, archive, deploymentPlan);
-            }
-        }
-        if (dpo!=null) {
-            dpo.addProgressListener(this);
-            if(waitTillComplete(dpo) != 0) {
-                log("REDEPLOY Action Failed");
-                return(null);
-            }
-
-            TargetModuleID[] targetModuleIDs = dpo.getResultTargetModuleIDs();
-            this.mostRecentTargetModuleIDs = targetModuleIDs;
-            dumpResultModuleIDs("Redeployed " , dpo);
-        }
-        return(dpo);
-    }
-
-    public ProgressObject stop(String moduleID) throws Exception {
-        TargetModuleID[] list = null;
-        if (moduleID == null) { //stop all but system apps
-            list = getAllApplications(Boolean.TRUE);
-        } else {
-            list = findApplication(moduleID, Boolean.TRUE);
-        }
-
-        ProgressObject dpo = null;
-        TargetModuleID[] modules = filterSystemApps(list);
-        if (modules != null && modules.length > 0) {
-            for (int i = 0; i < modules.length; i++) {
-                log("STOPPING... " + modules[i]);
-            }
-            dpo = dm.stop(modules);
-            if (dpo!=null) {
-                dpo.addProgressListener(this);
-                if(waitTillComplete(dpo) != 0) {
-                    log("STOP Action Failed");
-                    return(null);
-                }
-                this.mostRecentTargetModuleIDs = dpo.getResultTargetModuleIDs();
-            }
-        }
-        return(dpo);
-    }
-
-    /**
-     *Starts an application, with an option of waiting between the time the operation is requested
-     *and the time the deployer is added as a listener.  This option helps with the test for race
-     *conditions involved with managing the list of listeners and the list of delivered events.
-     */
-    public ProgressObject start(String moduleID, int delayBeforeRegisteringListener) throws Exception {
-        TargetModuleID[] list = null;
-        if (moduleID == null) { //start all but system apps
-            list = getAllApplications(Boolean.FALSE);
-        } else {
-            list = findApplication(moduleID, Boolean.FALSE);
-        }
-
-        TargetModuleID[] modules = filterSystemApps(list);
-        ProgressObject dpo = null;
-        if (modules != null && modules.length > 0) {
-            for (int i = 0; i < modules.length; i++) {
-                log("STARTINNG... " + modules[i]);
-            }
-            dpo = dm.start(modules);
-            if (delayBeforeRegisteringListener > 0) {
-                try {
-                    log("Pausing before adding self as a progress listener");
-                    Thread.currentThread().sleep(delayBeforeRegisteringListener);
-                } catch (InterruptedException ie) {
-                    throw new RuntimeException(this.getClass().getName() + " was interrupted sleeping before adding itself as a progresslistener", ie);
-                }
-            }
-            if (dpo!=null) {
-                dpo.addProgressListener(this);
-                if (delayBeforeRegisteringListener > 0) {
-                    log("Now registered as a progress listener");
-                }
-                if(waitTillComplete(dpo) != 0) {
-                    log("START Action Failed");
-                    return(null);
-                }
-                this.mostRecentTargetModuleIDs = dpo.getResultTargetModuleIDs();
-            }
-        }
-        return(dpo);
-    }
-
-    public ProgressObject start(String moduleID) throws Exception {
-        return start(moduleID, 0);
-    }
-
-    public ProgressObject undeploy(String moduleID) throws Exception {
-        TargetModuleID[] list = null;
-        //log ("000 trying to undeploy moduleID = " + moduleID);
-        if (moduleID == null) { //undeploy all but system apps
-            list = getAllApplications(null);
-        } else {
-            list = findApplication(moduleID, null);
-        }
-
-        ProgressObject dpo = null;
-        TargetModuleID[] modules = filterSystemApps(list);
-        if (modules != null && modules.length > 0) {
-            for (int i = 0; i < modules.length; i++) {
-                log("UNDEPLOYING... " + modules[i]);
-            }
-            dpo = dm.undeploy(modules);
-            if (dpo!=null) {
-                dpo.addProgressListener(this);
-                if(waitTillComplete(dpo) != 0) {
-                    log("UNDEPLOY Action Failed");
-                    return(null);
-                }
-                this.mostRecentTargetModuleIDs = dpo.getResultTargetModuleIDs();
-            }
-        }
-        return(dpo);
-    }
-
-    protected void dumpResultModuleIDs(String prefix, ProgressObject po) {
-        TargetModuleID[] targetModuleIDs = po.getResultTargetModuleIDs();
-        dumpModulesIDs(prefix, targetModuleIDs);
-    }
-
-    protected void dumpModulesIDs(String prefix, TargetModuleID[] targetModuleIDs) {
-        for (int i=0;i<targetModuleIDs.length;i++) {
-            dumpModulesIDs(prefix, targetModuleIDs[i]);
-        }
-    }
-
-    protected void dumpModulesIDs(String prefix, TargetModuleID targetModuleID) {
-        log(prefix + targetModuleID);
-        TargetModuleID[] subs = targetModuleID.getChildTargetModuleID();
-        if (subs!=null) {
-            for (int i=0;i<subs.length;i++) {
-                log(" Child " + i + " = " + subs[i]);
-            }
-        }
-    }
-
-    public TargetModuleID[] getApplications(ModuleType moduleType, Boolean running)
-        throws Exception {
-        TargetModuleID[] modules = null;
-        if (running==null) {
-            modules = dm.getAvailableModules(moduleType, targets);
-        } else if (running.booleanValue()) {
-            modules = dm.getRunningModules(moduleType, targets);
-        } else {
-            modules = dm.getNonRunningModules(moduleType, targets);
-        }
-
-        return modules;
-    }
-
-    public TargetModuleID[] getAllApplications(Boolean running)
-        throws Exception {
-        //log("222. getAllApplications, running = " + running);
-        TargetModuleID[] ears = getApplications(ModuleType.EAR, running);
-        TargetModuleID[] wars = getApplications(ModuleType.WAR, running);
-        TargetModuleID[] cars = getApplications(ModuleType.CAR, running);
-        TargetModuleID[] ejbs = getApplications(ModuleType.EJB, running);
-        TargetModuleID[] rars = getApplications(ModuleType.RAR, running);
-
-        List list = new ArrayList();
-        for (int i = 0; i < ears.length; i++) { list.add(ears[i]); }
-        for (int i = 0; i < wars.length; i++) { list.add(wars[i]); }
-        for (int i = 0; i < cars.length; i++) { list.add(cars[i]); }
-        for (int i = 0; i < ejbs.length; i++) { list.add(ejbs[i]); }
-        for (int i = 0; i < rars.length; i++) { list.add(rars[i]); }
-
-        TargetModuleID[] results = new TargetModuleID[list.size()];
-        for (int i = 0; i < list.size(); i++) {
-            results[i] = (TargetModuleID) list.get(i);
-        }
-        return results;
-    }
-
-    protected TargetModuleID[] findApplication(String moduleID, ModuleType moduleType, Boolean running)
-        throws Exception {
-        /*
-         *The DeploymentFacility requires that start, stop, redeploy, and undeploy requests
-         *operate on the same set of targets that the original deployment did.  As written currently, this test
-         *class always deploys to all available targets so the other functions should also
-         *apply to all available targets.
-         */
-        TargetModuleID[] list = getApplications(moduleType, running);
-        return filterTargetModuleIDsByModule(list, moduleID);
-    }
-
-    protected TargetModuleID[] findApplication(String moduleID, Boolean running)
-        throws Exception {
-        //log("111 trying to get everything, moduleid = " + moduleID + "; boolean = " + running);
-        TargetModuleID[] list = getAllApplications(running);
-        return filterTargetModuleIDsByModule(list, moduleID);
-    }
-
-    /**
-     *Filter an array of TargetModuleID, keeping only those that match the specified module ID.
-     *@param tmids the array of TargetModuleID to be filtered
-     *@param moduleID the name of the module of interest
-     *@return new TargetModuleID array, containing only the elements from the original array that match the module ID
-     */
-    protected TargetModuleID[] filterTargetModuleIDsByModule(TargetModuleID [] tmids, String moduleID) {
-        List tmidsToUse = new ArrayList();
-        /*
-         *Add to the vector of TMIDs each TMID from getApplications that also matches the
-         *module ID.
-         */
-        for (int i = 0; i < tmids.length; i++) {
-            if (moduleID.equals(tmids[i].getModuleID())) {
-                tmidsToUse.add(tmids[i]);
-            }
-        }
-        return (TargetModuleID [])(tmidsToUse.toArray(new TargetModuleID[tmidsToUse.size()]));
-    }
-
-    public void listApplications(ModuleType moduleType, Boolean running)
-        throws Exception {
-        TargetModuleID[] modules = getApplications(moduleType, running);
-        if (modules == null) {
-        } else {
-            for (int i = 0; i < modules.length; i++) {
-                if (running==null) {
-                    dumpModulesIDs("    AVAILABLE ", modules[i]);
-                } else if (running.booleanValue()) {
-                    dumpModulesIDs("    RUNNING ", modules[i]);
-                } else {
-                    dumpModulesIDs("    NOT RUNNING ", modules[i]);
-                }
-            }
-        }
-    }
-
-    private void invokeAppClient(ProgressObject po, TargetModuleID targetModuleID) {
-        TargetModuleID[] subs = targetModuleID.getChildTargetModuleID();
-        if (subs==null) {
-            return;
-        }
-        for (int i=0;i<subs.length;i++) {
-            if (subs[i].getModuleID().indexOf("client")!=-1) {
-                log(" App Client child " + subs[i]);
-                ClientConfiguration cc = po.getClientConfiguration(subs[i]);
-                try {
-                    cc.execute();
-                } catch(Throwable t) {
-                    t.printStackTrace();
-                }
-            }
-        }
-    }
-
-
-    public static void main(String[] args) {
-
-        int finalExitValue = 0;
-
-        if (args.length == 0 || "help".equals(args[0])) {
-            usage();
-            System.exit(1);
-        }
-        if (args.length < 5) {
-            usage();
-            System.exit(1);
-        }
-
-        JSR88Deployer deployer = new JSR88Deployer(args[1], args[2], args[3]);
-        if ("deploy".equals(args[0]) || "deploy-stream".equals(args[0])) {
-            if (args.length < 6) {
-                usage();
-                System.exit(1);
-            }
-            boolean useStream = "deploy-stream".equals(args[0]);
-            boolean startByDefault = "true".equals(args[4]);
-            java.io.File inputFile = new java.io.File(args[5]);
-            if (!inputFile.exists()) {
-                error("File not found : " + inputFile.getPath());
-                System.exit(1);
-            }
-            File deploymentFile = null;
-            if (args.length > 6) {
-                deploymentFile = new File(args[6]);
-                if (!args[6].equals("null")) {
-                    if (!deploymentFile.exists()) {
-                        error("Deployment File not found : " + deploymentFile.getPath());
-                        System.exit(1);
-                    }
-                }
-            }
-            try {
-                log("Deploying " + inputFile + " plan: " + deploymentFile);
-                if(deployer.deploy(inputFile, deploymentFile,
-                                        startByDefault, useStream, null) == null)
-                    finalExitValue = -1;
-            } catch(Exception e) {
-                e.printStackTrace();
-                System.exit(1);
-            }
-        } else if ("deploy-stream-withtype".equals(args[0])) {
-            if (args.length < 7) {
-                usage();
-                System.exit(1);
-            }
-            boolean useStream = true;
-            boolean startByDefault = "true".equals(args[4]);
-            java.io.File inputFile = new java.io.File(args[5]);
-            if (!inputFile.exists()) {
-                error("File not found : " + inputFile.getPath());
-                System.exit(1);
-            }
-            ModuleType t =
-                ModuleType.getModuleType((new Integer(args[6])).intValue());
-            File deploymentFile = null;
-            if (args.length > 7) {
-                deploymentFile = new File(args[7]);
-                if (!args[7].equals("null")) {
-                    if (!deploymentFile.exists()) {
-                        error("Deployment File not found : " + deploymentFile.getPath());
-                        System.exit(1);
-                    }
-                }
-            }
-            try {
-                log("Deploying " + inputFile + " plan: " + deploymentFile);
-                if(deployer.deploy(inputFile, deploymentFile,
-                                        startByDefault, useStream, t) == null)
-                    finalExitValue = -1;
-            } catch(Exception e) {
-                e.printStackTrace();
-                System.exit(1);
-            }
-        } else if ("list".equals(args[0])) {
-
-            if (args.length != 5) {
-                usage();
-                System.exit(0);
-            }
-
-            try {
-                if ("all".equals(args[4])) {
-                    deployer.listApplications(ModuleType.EAR, null);
-                    deployer.listApplications(ModuleType.WAR, null);
-                    deployer.listApplications(ModuleType.EJB, null);
-                    deployer.listApplications(ModuleType.CAR, null);
-                    deployer.listApplications(ModuleType.RAR, null);
-                } else if ("running".equals(args[4])) {
-                    deployer.listApplications(ModuleType.EAR, Boolean.TRUE);
-                    deployer.listApplications(ModuleType.WAR, Boolean.TRUE);
-                    deployer.listApplications(ModuleType.EJB, Boolean.TRUE);
-                    deployer.listApplications(ModuleType.CAR, Boolean.TRUE);
-                    deployer.listApplications(ModuleType.RAR, Boolean.TRUE);
-                } else if ("nonrunning".equals(args[4])) {
-                    deployer.listApplications(ModuleType.EAR, Boolean.FALSE);
-                    deployer.listApplications(ModuleType.WAR, Boolean.FALSE);
-                    deployer.listApplications(ModuleType.EJB, Boolean.FALSE);
-                    deployer.listApplications(ModuleType.CAR, Boolean.FALSE);
-                    deployer.listApplications(ModuleType.RAR, Boolean.FALSE);
-                } else {
-                    usage();
-                    finalExitValue = 1;
-                }
-            } catch (Exception e) {
-                e.printStackTrace();
-                System.exit(-1);
-            }
-        } else if ("redeploy".equals(args[0]) || "redeploy-stream".equals(args[0])) {
-            if (args.length < 6) {
-                usage();
-                System.exit(-1);
-            }
-
-            boolean useStream = "redeploy-stream".equals(args[0]);
-            java.io.File inputFile = new java.io.File(args[5]);
-            if (!inputFile.exists()) {
-                error("File not found : " + inputFile.getPath());
-                System.exit(1);
-            }
-            File deploymentFile = null;
-            if (args.length > 6) {
-                deploymentFile = new File(args[6]);
-                if (!args[6].equals("null")) {
-                    if (!deploymentFile.exists()) {
-                        error("Deployment File not found : " + deploymentFile.getPath());
-                        System.exit(1);
-                    }
-                }
-            }
-            try {
-                log("Redeploying " + inputFile + " plan: " + deploymentFile);
-                if ("all".equals(args[4])) {
-                    if(deployer.redeploy(null, inputFile, deploymentFile, useStream) == null)
-                        finalExitValue = -1;
-                } else {
-                    if(deployer.redeploy(args[4], inputFile, deploymentFile, useStream) == null)
-                        finalExitValue = -1;
-                }
-            } catch(Exception e) {
-                e.printStackTrace();
-                System.exit(1);
-            }
-        } else {
-            if (args.length != 5) {
-                usage();
-                System.exit(1);
-            }
-
-            try {
-                if ("all".equals(args[4])) {
-                    if ("undeploy".equals(args[0])) {
-                        if(deployer.undeploy(null) == null)
-                            finalExitValue = -1;
-                    } else if ("start".equals(args[0])) {
-                        if(deployer.start(null) == null)
-                            finalExitValue = -1;
-                    } else if ("stop".equals(args[0])) {
-                        if(deployer.stop(null) == null)
-                            finalExitValue = -1;
-                    } else {
-                        usage();
-                        finalExitValue = 1;
-                    }
-                } else {
-                    if ("undeploy".equals(args[0])) {
-                        if(deployer.undeploy(args[4]) == null)
-                            finalExitValue = -1;
-                    } else if ("start".equals(args[0])) {
-                        if(deployer.start(args[4]) == null)
-                            finalExitValue = -1;
-                    } else if ("stop".equals(args[0])) {
-                        if(deployer.stop(args[4]) == null)
-                            finalExitValue = -1;
-                    } else {
-                        usage();
-                        finalExitValue = 1;
-                    }
-                }
-            } catch (Exception e) {
-                e.printStackTrace();
-                System.exit(-1);
-            }
-        }
-        System.exit(finalExitValue);
-    }
-
-    /** Invoked when a deployment progress event occurs.
-     *
-     * @param event the progress status event.
-     */
-    public void handleProgressEvent(ProgressEvent event) {
-        DeploymentStatus ds = event.getDeploymentStatus();
-        System.out.println("Received Progress Event state " + ds.getState() + " msg = " + ds.getMessage());
-        TargetModuleID tmid = event.getTargetModuleID();
-        System.out.println("Received Progress Event target module id " + tmid.getModuleID());
-        /*
-         *Add this event to the vector collecting them.
-         */
-        this.receivedEvents.add(event);
-    }
-
-    /**
-     *Report all the events received by this deployer.
-     *
-     *@return array of Objects containing the received events
-     */
-    public ProgressEvent [] getReceivedEvents() {
-        ProgressEvent [] answer = new ProgressEvent[this.receivedEvents.size()];
-        return (ProgressEvent []) this.receivedEvents.toArray(answer);
-    }
-
-    /**
-     *Clear the collection of received events recorded by this deployer.
-     */
-    public void clearReceivedEvents() {
-        this.receivedEvents.clear();
-    }
-
-    public TargetModuleID [] getMostRecentTargetModuleIDs() {
-        return this.mostRecentTargetModuleIDs;
-    }
-
-    public void clearMostRecentTargetModuleIDs() {
-        this.mostRecentTargetModuleIDs = null;
-    }
-
-    private void loadDeploymentFactory() {
-        try {
-            File file = new File(System.getProperty("com.sun.aas.installRoot")
-                + File.separator+ "lib" + File.separator + "deployment"
-                + File.separator + "sun-as-jsr88-dm.jar");
-
-            Manifest mf = new java.util.jar.JarFile(file).getManifest();
-            String className = mf.getMainAttributes().getValue(J2EE_DEPLOYMENT_MANAGER);
-            URL[] urls = new URL[]{file.toURL()};
-            URLClassLoader urlClassLoader = new java.net.URLClassLoader(urls, getClass().getClassLoader());
-
-            Class factory = null;
-            try {
-                factory=urlClassLoader.loadClass(className);
-            } catch (ClassNotFoundException cnfe) {
-                cnfe.printStackTrace();
-            }
-
-            Object df = null;
-            try {
-                df = factory.newInstance();
-            } catch (Exception ie) {
-                ie.printStackTrace();
-            }
-            if (df instanceof DeploymentFactory) {
-                DeploymentFactoryManager.getInstance().registerDeploymentFactory((DeploymentFactory) df);
-            } else {
-                System.exit(-1);
-            }
-
-        } catch (Exception ex) {
-            log("Failed to load the deployment factory.");
-            ex.printStackTrace();
-            System.exit(-1);
-        }
-    }
-
-    private static void usage() {
-        System.out.println("Usage: command <JSR88.URI> <admin-user> <admin-password> [command-parameters]");
-        System.out.println("    where command is one of [deploy<-stream> | redeploy<-stream> | undeploy | start | stop | list]");
-        System.out.println("    where <JSR88.URI> is: deployer:Sun:AppServer::${admin.host}:${admin.port} for PE");
-        System.out.println("    where <JSR88.URI> is: deployer:Sun:AppServer::${admin.host}:${admin.port}:https for EE");
-        System.out.println("    where command-parameters are as follows");
-        System.out.println("      deploy: <startByDefault> <archiveFile> [<deploymentFile>]");
-        System.out.println("      deploy-stream: <startByDefault> <archiveFile> [<deploymentFile>]");
-        System.out.println("      deploy-stream-withtype: <startByDefault> <archiveFile> <moduleType> [<deploymentFile>]");
-        System.out.println("      redeploy: <moduleID> <archiveFile> [<deploymentFile>]");
-        System.out.println("      redeploy-stream: <moduleID> <archiveFile> [<deploymentFile>]");
-        System.out.println("      undeploy: [all | moduleID]");
-        System.out.println("      start: [all | moduleID]");
-        System.out.println("      stop: [all | moduleID]");
-        System.out.println("      list: [all | running | nonrunning]");
-    }
-
-    public static void log(String message) {
-        System.out.println("[JSR88Deployer]:: " + message);
-    }
-
-    public static void error(String message) {
-        System.err.println("[JSR88Deployer]:: " + message);
-    }
-
-    private void loadSystemApps() {
-        systemApps.add("MEjbApp");
-        systemApps.add("__ejb_container_timer_app");
-        systemApps.add("adminapp");
-        systemApps.add("admingui");
-        systemApps.add("com_sun_web_ui");
-    }
-
-    private TargetModuleID[] filterSystemApps(TargetModuleID[] list) {
-
-        //Comment out the following logic as we will move to use the MBean
-        //that returns only non-system apps.
-/*
-        List l = new ArrayList();
-        for (int i = 0; i < list.length; i++) {
-            String moduleID = list[i].getModuleID();
-            log("found module = " + moduleID);
-            if (!systemApps.contains(moduleID)) {
-                l.add(list[i]);
-            }
-        }
-
-        TargetModuleID[] ids = new TargetModuleID[l.size()];
-        for (int i = 0; i < l.size(); i++) {
-            ids[i] = (TargetModuleID) l.get(i);
-        }
-        return ids;
-*/
-        return list;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/util/devtests/deployment/util/AnnotationTest.java b/appserver/tests/appserv-tests/devtests/deployment/util/devtests/deployment/util/AnnotationTest.java
deleted file mode 100644
index 826e568..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/util/devtests/deployment/util/AnnotationTest.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Copyright (c) 2005, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package devtests.deployment.util;
-
-import java.io.File;
-import java.util.HashSet;
-import java.util.Set;
-import javax.enterprise.deploy.shared.ModuleType;
-
-import com.sun.enterprise.deployment.ApplicationClientDescriptor;
-import com.sun.enterprise.deployment.BundleDescriptor;
-import org.glassfish.ejb.deployment.descriptor.EjbBundleDescriptorImpl;
-import com.sun.enterprise.deployment.EjbDescriptor;
-import com.sun.enterprise.deployment.WebBundleDescriptor;
-import com.sun.enterprise.deployment.io.AppClientDeploymentDescriptorFile;
-import com.sun.enterprise.deployment.io.DeploymentDescriptorFile;
-import org.glassfish.ejb.deployment.io.EjbDeploymentDescriptorFile;
-import org.glassfish.web.deployment.descriptor.WebBundleDescriptorImpl;
-import org.glassfish.web.deployment.io.WebDeploymentDescriptorFile;
-import org.glassfish.webservices.io.WebServicesDeploymentDescriptorFile;
-import org.glassfish.hk2.api.ServiceLocator;
-
-import junit.extensions.TestSetup;
-import org.junit.Assert;
-import org.junit.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import junit.textui.TestRunner;
-import org.glassfish.internal.api.Globals;
-import org.glassfish.tests.utils.Utils;
-
-/**
- * This is a annotation testing code using JUnit.
- * It has one time setup with a default test comparing descriptors.
- * One can subclass this by adding new method with name starting test
- * and a new main method.
- *
- * @author Shing Wai Chan
- */
-public class AnnotationTest extends TestCase {
-    private static final String META_INF_DIR = "META-INF/";
-    private static final String WEB_INF_DIR = "WEB-INF/";
-    private static final String GOLDEN_DIR = "goldenfiles/";
-
-    // the following need to be static so that it can initialize once
-    // and use in the given JVM
-    private static boolean initialized = false;
-    private static StandaloneProcessor processor = null;
-    private static String workDir = System.getProperty("workDir", ".");
-    private boolean hasGoldenFile = false;
-
-    protected ModuleType type = ModuleType.EJB;
-    protected Set<String> componentClassNames = new HashSet<String>();
-
-    static {
-        final ServiceLocator serviceLocator = Utils.getServiceLocator();
-        Globals.setDefaultHabitat(serviceLocator);
-    }
-
-    public AnnotationTest(String name) {
-        super(name);
-    }
-
-    /**
-     * Per test setup.
-     */
-    public void setUp() {
-        if (!initialized) {
-            initialized = true;
-            processor = new StandaloneProcessor(type);
-            processor.setComponentClassNames(componentClassNames);
-            String testClasspath = System.getProperty("testClasspath");
-            System.out.println("testClasspath = " + testClasspath);
-            try {
-                processor.run(new String[] { testClasspath });
-            } catch(Exception ex) {
-                ex.printStackTrace();
-                throw new IllegalStateException(ex);
-            }
-        }
-    }
-
-    /**
-     * Per test cleanup.
-     */
-    public void tearDown() {
-    }
-
-    /**
-     * This test case compare descriptor files generated from annotation
-     * with the golden files if there is any.  It will return silently
-     * if there is no golden files.
-     */
-    public void testDescriptors() {
-        System.out.println("running testDescriptors");
-
-        BundleDescriptor[] bundleDescs = null;
-        if (ModuleType.EJB.equals(type)) {
-            bundleDescs = processEjbDescriptors();
-        } else if (ModuleType.WAR.equals(type)) {
-            bundleDescs = processWebDescriptors();
-        } else if (ModuleType.CAR.equals(type)) {
-            bundleDescs = processAppClientDescriptors();
-        } else {
-            Assert.fail("ModuleType: " + type + " is not supported.");
-        }
-        if (!hasGoldenFile) {
-            Assert.fail("Goldenfile is not setup for this test.");
-        }
-
-        DescriptorContentComparator dc = new DescriptorContentComparator();
-
-        Assert.assertTrue("BundleDescriptors do not match.",
-            dc.compareContent(bundleDescs[0], bundleDescs[1]));
-    }
-
-    protected BundleDescriptor[] processEjbDescriptors() {
-        try {
-            processor.generateEjbJarXmlFile(workDir);
-            processor.generateWebServicesXmlFile(workDir);
-        } catch(Exception ex) {
-            ex.printStackTrace();
-            throw new IllegalStateException(ex);
-        }
-
-        BundleDescriptor[] bundleDescs = { new EjbBundleDescriptorImpl(),
-                new EjbBundleDescriptorImpl() };
-        bundleDescs = loadDescriptorFiles(bundleDescs[0], bundleDescs[1],
-                new EjbDeploymentDescriptorFile(),
-                new EjbDeploymentDescriptorFile(),
-                META_INF_DIR, "ejb-jar.xml");
-
-        bundleDescs = loadDescriptorFiles(bundleDescs[0], bundleDescs[1],
-                new WebServicesDeploymentDescriptorFile(bundleDescs[0]),
-                new WebServicesDeploymentDescriptorFile(bundleDescs[1]),
-                META_INF_DIR, "webservices.xml");
-
-        return bundleDescs;
-    }
-
-    protected BundleDescriptor[] processAppClientDescriptors() {
-        try {
-            processor.generateAppClientXmlFile(workDir);
-        } catch(Exception ex) {
-            ex.printStackTrace();
-            throw new IllegalStateException(ex);
-        }
-
-        BundleDescriptor[] bundleDescs = { new ApplicationClientDescriptor(),
-                new ApplicationClientDescriptor() };
-        bundleDescs = loadDescriptorFiles(bundleDescs[0], bundleDescs[1],
-                new AppClientDeploymentDescriptorFile(),
-                new AppClientDeploymentDescriptorFile(),
-                META_INF_DIR, "application-client.xml");
-
-        return bundleDescs;
-    }
-
-    protected BundleDescriptor[] processWebDescriptors() {
-        try {
-            processor.generateWebXmlFile(workDir);
-            processor.generateWebServicesXmlFile(workDir);
-        } catch(Exception ex) {
-            ex.printStackTrace();
-            throw new IllegalStateException(ex);
-        }
-
-        BundleDescriptor[] bundleDescs = { new WebBundleDescriptorImpl(),
-                new WebBundleDescriptorImpl() };
-        bundleDescs = loadDescriptorFiles(bundleDescs[0], bundleDescs[1],
-                new WebDeploymentDescriptorFile(),
-                new WebDeploymentDescriptorFile(),
-                WEB_INF_DIR, "web.xml");
-
-        bundleDescs = loadDescriptorFiles(bundleDescs[0], bundleDescs[1],
-                new WebServicesDeploymentDescriptorFile(bundleDescs[0]),
-                new WebServicesDeploymentDescriptorFile(bundleDescs[1]),
-                WEB_INF_DIR, "webservices.xml");
-
-        return bundleDescs;
-    }
-
-    private BundleDescriptor[] loadDescriptorFiles(
-            BundleDescriptor expBundleDescriptor,
-            BundleDescriptor genBundleDescriptor,
-            DeploymentDescriptorFile expDf, DeploymentDescriptorFile genDf,
-            String metaDir, String descFilename) {
-
-        BundleDescriptor[] bundleDescs = new BundleDescriptor[] {
-                expBundleDescriptor, genBundleDescriptor };
-        String goldenXml = workDir + "/" + GOLDEN_DIR + descFilename;
-        File goldenXmlFile = new File(goldenXml);
-        if (goldenXmlFile.exists()) {
-            hasGoldenFile = true;
-            bundleDescs[0] = loadDescriptor(expBundleDescriptor,
-                expDf, goldenXml);
-
-            // load gen xml info into DOL for comparison due to various
-            // default values
-            String genXml = workDir + "/" + metaDir + descFilename;
-            File genXmlFile = new File(genXml);
-            if (genXmlFile.exists()) {
-                bundleDescs[1] = loadDescriptor(genBundleDescriptor,
-                    genDf, genXml);
-            }
-        }
-        return bundleDescs;
-    }
-
-    private BundleDescriptor loadDescriptor(
-            BundleDescriptor bundle, DeploymentDescriptorFile df,
-            String loc) {
-        File file = new File(loc);
-        if (!file.exists()) {
-            Assert.fail(loc + " does not exist.");
-        }
-        try {
-            return (BundleDescriptor)df.read(bundle, file);
-        } catch(Throwable t) {
-            Assert.fail(t.toString());
-            return null;
-        }
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/util/devtests/deployment/util/DescriptorContentComparator.java b/appserver/tests/appserv-tests/devtests/deployment/util/devtests/deployment/util/DescriptorContentComparator.java
deleted file mode 100644
index a656f57..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/util/devtests/deployment/util/DescriptorContentComparator.java
+++ /dev/null
@@ -1,380 +0,0 @@
-/*
- * Copyright (c) 2005, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package devtests.deployment.util;
-
-import java.lang.reflect.Array;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Handler;
-import java.util.logging.Logger;
-import java.util.logging.Level;
-
-import org.glassfish.deployment.common.Descriptor;
-import com.sun.enterprise.util.LocalStringManagerImpl;
-
-/**
- * This class compares deployment Descriptors for testing purpose.
- * It is not thread safe.
- *
- * @author Shing Wai Chan
- */
-public class DescriptorContentComparator {
-    private static final Class[] excludedClasses = new Class[] {
-            java.lang.Object.class,
-            java.beans.PropertyChangeSupport.class,
-            com.sun.enterprise.util.LocalStringManagerImpl.class,
-            java.util.Observable.class
-            };
-
-    private static final String[] excludedFieldNames = new String[] {
-            "propListeners",
-            "wsdlPortNamespacePrefix",
-            "specVersion"
-            };
-
-    private static Logger logger = null;
-
-    // for easy debug
-    private Field lastField = null;
-
-    public DescriptorContentComparator() {
-        initLogger();
-    }
-
-    public boolean compareContent(Descriptor d1, Descriptor d2) {
-        boolean result = compareContent(null, d1, d2, new HashSet());
-        if (!result) {
-            logger.severe("last compared Field = " + lastField);
-        }
-        return result;
-    }
-
-    /**
-     * Use reflection to look at fields for comparison.
-     * It is important to note that if instances under comparison are in
-     * parameter <i>set</i>, then the comparison result will always be
-     * true. This resolves the issues of circular references.
-     * @param field  Field under comparison if known
-     * @param o1  Object to be compared
-     * @param o2  Object to be compared
-     * @param set stack of Descriptor instances under comparison
-     * @return boolean result of comparison
-     */
-    private boolean compareContent(Field field, Object o1, Object o2, Set set) {
-        if (o1 == o2 ||
-                isNullEquivalent(field, o1) && isNullEquivalent(field, o2)) {
-            return true;
-        }
-
-        if (o1 == null && o2 != null || o1 != null && o2 == null ||
-                !o2.getClass().equals(o1.getClass()) ||
-                isExcludedClass(o1.getClass())) {
-
-            if (logger.isLoggable(Level.FINE)) {
-                logger.fine("... null, class mismatch or excluded for " +
-                    ((field != null)? field : "") +
-                    ", o1 = " + o1 + ", o2 = " + o2);
-            }
-
-            return false;
-        }
-
-        // in the following, o1 and o2 are not null
-        Package p1 = o1.getClass().getPackage();
-        Package p2 = o2.getClass().getPackage();
-
-        if (p1 != null && !p1.equals(p2) || p1 == null && p2 != null) {
-
-            if (logger.isLoggable(Level.FINE)) {
-                logger.fine("... diff package: obj1 = " + o1);
-                logger.fine("... diff package: obj2 = " + o2);
-            }
-
-            return false;
-        } else if (o1.getClass().isArray()) {
-            if (!compareArrayContent(o1, o2, set)) {
-
-                if (logger.isLoggable(Level.FINE)) {
-                    logger.fine("... diff array: obj1 = " + o1);
-                    logger.fine("... diff array: obj2 = " + o2);
-                }
-
-                return false;
-            }
-        } else if (o1 instanceof Collection) {
-            if (!compareCollectionContent((Collection)o1,
-                    (Collection)o2, set)) {
-
-                if (logger.isLoggable(Level.FINE)) {
-                    logger.fine("... diff coll: obj1 = " + o1);
-                    logger.fine("... diff coll: obj2 = " + o2);
-                }
-
-                return false;
-            }
-        } else if (o1 instanceof Map) {
-            if (!compareMapContent((Map)o1, (Map)o2, set)) {
-
-                if (logger.isLoggable(Level.FINE)) {
-                    logger.fine("... diff map: obj1 = " + o1);
-                    logger.fine("... diff map: obj2 = " + o2);
-                }
-
-                return false;
-            }
-        } else if (p1 != null &&
-                (p1.getName().startsWith("com.sun.enterprise.deployment") || p1.getName().startsWith("org.glassfish.ejb.deployment") || p1.getName().startsWith("org.glassfish.web.deployment"))
-                ) {
-
-            if (o1 instanceof Descriptor) {
-                // to handle circular reference
-                ReferencePair rd = new ReferencePair(o1, o2);
-                if (!set.add(rd)) {
-                    return true;  // continue processing
-                }
-            }
-
-            // looping from subclass to superclass
-            Class clazz = o2.getClass();
-            while (clazz != null && !isExcludedClass(clazz)) {
-                if (logger.isLoggable(Level.FINER)) {
-                    logger.finer("clazz = " + clazz);
-                }
-                Field[] declaredFields = clazz.getDeclaredFields();
-                for (Field df : declaredFields) {
-                    try {
-
-                        lastField = df;
-                        if (logger.isLoggable(Level.FINER)) {
-                            logger.finer("... \tdf = " + df);
-                        }
-
-                        if (isExcludedNamedField(df) ||
-                                Modifier.isStatic(df.getModifiers())) {
-                            continue;
-                        }
-                        df.setAccessible(true); // to see private fields
-                        Object v1 = df.get(o1);
-                        Object v2 = df.get(o2);
-                        if (!compareContent(df, v1, v2, set)) {
-                            return false;
-                        }
-                    } catch(Exception ex) {
-                        throw new IllegalStateException(ex);
-                    }
-                }
-                clazz = clazz.getSuperclass();
-            }
-        } else {
-            boolean result = o1.equals(o2);
-
-            if (!result && logger.isLoggable(Level.FINE)) {
-                logger.fine("... diff content: obj1 = " + o1);
-                logger.fine("... diff content: obj2 = " + o2);
-            }
-
-            return result;
-        }
-
-        return true;
-    }
-
-    /**
-     * The following are regarded as null for comparison purposes:
-     *     Collection, Map of size 0
-     *     String of size 0
-     * @param df field under comparison if known
-     * @param o object under comparison
-     */
-    private boolean isNullEquivalent(Field df, Object o) {
-        boolean result = false;
-        if (o == null) {
-            result = true;
-        } else if (o instanceof Collection) {
-            Collection coll = (Collection)o;
-            result = (coll.size() == 0);
-        } else if (o instanceof Map) {
-
-            Map map = (Map)o;
-            int size = map.size();
-            if (size == 0) {
-                result = true;
-
-            // Need to ignore dynamicAttributes with prefix-mapping entry.
-            } else if (size == 1) {
-                if (df != null && "dynamicAttributes".equals(df.getName())) {
-                    result = (map.get("prefix-mapping") != null);
-                }
-            }
-        } else if (o instanceof String) {
-            String s = (String)o;
-            result = (s.length() == 0);
-        }
-        return result;
-    }
-
-    private boolean isExcludedClass(Class cl) {
-        boolean result = false;
-        for (Class clazz : excludedClasses) {
-            if (clazz.equals(cl)) {
-                result = true;
-                break;
-            }
-        }
-        return result;
-    }
-
-    private boolean isExcludedNamedField(Field f) {
-        boolean result = false;
-        for (String ef : excludedFieldNames) {
-            if (ef.equals(f.getName())) {
-                result = true;
-                break;
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Assume arguments not null.
-     */
-    private boolean compareArrayContent(Object value1, Object value2, Set set) {
-        int len1 = Array.getLength(value1);
-        int len2 = Array.getLength(value2);
-        if (len1 != len2) {
-            return false;
-        } else {
-            for (int i = 0; i < len1; i++) {
-                Object indObj1 = Array.get(value1, i);
-                Object indObj2 = Array.get(value2, i);
-                if (!(indObj1 == null && indObj2 == null) &&
-                        !(indObj1 != null && indObj2 != null &&
-                        compareContent(null, indObj1, indObj2, set))) {
-                    return false;
-                }
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Assume arguments not null.
-     */
-    private boolean compareCollectionContent(Collection coll1,
-            Collection coll2, Set set) {
-        int size1 = coll1.size();
-        int size2 = coll2.size();
-
-        if (logger.isLoggable(Level.FINEST)) {
-            logger.finest("compare collection with sizes " + size1 + " and " + size2);
-        }
-
-        if (size1 != size2) {
-            return false;
-        }
-        Iterator iter1 = coll1.iterator();
-        // O(n^2) comparison!!!
-        while (iter1.hasNext()) {
-            Object obj1 = iter1.next();
-            Iterator iter2 = coll2.iterator();
-            boolean tempResult = false;
-            while (iter2.hasNext()) {
-                Object obj2 = iter2.next();
-                if (compareContent(null, obj1, obj2, set)) {
-                    tempResult = true;
-                    break;
-                }
-            }
-            if (!tempResult) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Assume arguments not null.
-     */
-    private boolean compareMapContent(Map map1, Map map2, Set set) {
-        Set keySet1 = map1.keySet();
-        Set keySet2 = map2.keySet();
-        if (!compareCollectionContent(keySet1, keySet2, set)) {
-            return false;
-        }
-        Iterator iter = keySet1.iterator();
-        while (iter.hasNext()) {
-            Object key = iter.next();
-            if (!compareContent(null, map1.get(key), map2.get(key), set)) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    private void initLogger() {
-        logger = Logger.getLogger(DescriptorContentComparator.class.getName());
-        Level logLevel = Boolean.getBoolean("debug") ?
-                Level.FINEST : Level.CONFIG;
-        for (Handler h : Logger.getLogger("").getHandlers()) {
-            h.setLevel(logLevel);
-        }
-        logger.setLevel(logLevel);
-    }
-
-
-    /**
-     * This class represents a pair of references where order is not important.
-     */
-    class ReferencePair {
-        Object c1;
-        Object c2;
-        int hashCode = 0;
-
-        ReferencePair(Object c1, Object c2) {
-            this.c1 = c1;
-            this.c2 = c2;
-            if (c1 != null) {
-                hashCode = c1.hashCode();
-            }
-            if (c2 != null) {
-                hashCode ^= c2.hashCode();
-            }
-        }
-
-        public int hashCode() {
-            return hashCode;
-        }
-
-        public boolean equals(Object o) {
-            if (o == this) {
-                return true;
-            }
-            if (!(o instanceof ReferencePair)) {
-                return false;
-            }
-
-            ReferencePair rd = (ReferencePair)o;
-            return (c1 == rd.c1 && c2 == rd.c2 ||
-                    c1 == rd.c2 && c2 == rd.c1);
-        }
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/util/devtests/deployment/util/LogFormatter.java b/appserver/tests/appserv-tests/devtests/deployment/util/devtests/deployment/util/LogFormatter.java
deleted file mode 100644
index 712feef..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/util/devtests/deployment/util/LogFormatter.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2005, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-/*
- * LogFormatter.java
- *
- * Created on January 28, 2005, 1:58 PM
- */
-
-package devtests.deployment.util;
-
-import java.util.logging.Formatter;
-import java.util.logging.LogRecord;
-
-/**
- * I just hate the jdk formatters
- *
- * @author dochez
- */
-public class LogFormatter extends Formatter {
-
-    /** Creates a new instance of LogFormatter */
-    public LogFormatter() {
-    }
-
-    public String format(LogRecord record) {
-        return record.getMessage()+"\n";
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/util/devtests/deployment/util/StandaloneErrorHandler.java b/appserver/tests/appserv-tests/devtests/deployment/util/devtests/deployment/util/StandaloneErrorHandler.java
deleted file mode 100644
index 6977f39..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/util/devtests/deployment/util/StandaloneErrorHandler.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2005, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package devtests.deployment.util;
-
-import org.glassfish.apf.ErrorHandler;
-import org.glassfish.apf.AnnotationProcessorException;
-import org.glassfish.apf.impl.AnnotationUtils;
-
-/**
- * Standalone Implementation of ErrorHandler.
- *
- * @author Shing Wai Chan
- */
-public class StandaloneErrorHandler implements ErrorHandler {
-    /** Creates a new instance of StandaloneErrorHandler */
-    public StandaloneErrorHandler() {
-    }
-
-    /**
-     * Receive notication of a fine error message
-     * @param ape The warning information
-     * @throws any exception to stop the annotation processing
-     */
-    public void fine(AnnotationProcessorException ape) throws
-            AnnotationProcessorException {
-        AnnotationUtils.getLogger().fine("Fine : " + ape);
-    }
-
-    /**
-     * Receive notification of a warning
-     * @param ape The warning information
-     * @throws any exception to stop the annotation processing
-     */
-    public void warning(AnnotationProcessorException ape) throws
-            AnnotationProcessorException {
-        AnnotationUtils.getLogger().warning("Warning : " + ape);
-    }
-
-    /**
-     * Receive notification of an error
-     * @param ape The error information
-     * @throws any exception to stop the annotation processing
-     */
-    public void error(AnnotationProcessorException ape) throws
-            AnnotationProcessorException {
-        AnnotationUtils.getLogger().severe("Error : " + ape);
-        throw ape;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/util/devtests/deployment/util/StandaloneProcessor.java b/appserver/tests/appserv-tests/devtests/deployment/util/devtests/deployment/util/StandaloneProcessor.java
deleted file mode 100644
index b565fed..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/util/devtests/deployment/util/StandaloneProcessor.java
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
- * Copyright (c) 2005, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-/*
- * StandaloneProcessor.java
- *
- * Created on January 7, 2005, 9:26 AM
- */
-
-package devtests.deployment.util;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.logging.*;
-
-import javax.enterprise.deploy.shared.ModuleType;
-
-import com.sun.enterprise.deployment.ApplicationClientDescriptor;
-import com.sun.enterprise.deployment.BundleDescriptor;
-import org.glassfish.ejb.deployment.descriptor.EjbBundleDescriptorImpl;
-import com.sun.enterprise.deployment.WebBundleDescriptor;
-import com.sun.enterprise.deployment.WebComponentDescriptor;
-
-import org.glassfish.apf.AnnotatedElementHandler;
-import org.glassfish.apf.AnnotationHandler;
-import org.glassfish.apf.AnnotationProcessor;
-import org.glassfish.apf.ProcessingContext;
-import org.glassfish.apf.ProcessingResult;
-import org.glassfish.apf.Scanner;
-import com.sun.enterprise.deployment.annotation.context.AppClientContext;
-import com.sun.enterprise.deployment.annotation.context.EjbBundleContext;
-import com.sun.enterprise.deployment.annotation.context.WebBundleContext;
-import com.sun.enterprise.deployment.annotation.factory.SJSASFactory;
-import org.glassfish.apf.impl.AnnotationUtils;
-import com.sun.enterprise.deployment.annotation.impl.AppClientScanner;
-import org.glassfish.apf.impl.DirectoryScanner;
-import org.glassfish.ejb.deployment.annotation.impl.EjbJarScanner;
-import org.glassfish.web.deployment.annotation.impl.WarScanner;
-import org.glassfish.web.deployment.descriptor.WebBundleDescriptorImpl;
-import org.glassfish.web.deployment.descriptor.WebComponentDescriptorImpl;
-import com.sun.enterprise.deployment.annotation.impl.ModuleScanner;
-
-import com.sun.enterprise.deployment.io.AppClientDeploymentDescriptorFile;
-import org.glassfish.ejb.deployment.io.EjbDeploymentDescriptorFile;
-import org.glassfish.web.deployment.io.WebDeploymentDescriptorFile;
-import org.glassfish.webservices.io.WebServicesDeploymentDescriptorFile;
-
-import com.sun.enterprise.deployment.util.ApplicationValidator;
-import com.sun.enterprise.deployment.util.AppClientVisitor;
-import com.sun.enterprise.deployment.util.AppClientValidator;
-import org.glassfish.ejb.deployment.util.EjbBundleValidator;
-import com.sun.enterprise.deployment.util.EjbBundleVisitor;
-import org.glassfish.web.deployment.util.WebBundleVisitor;
-import org.glassfish.web.deployment.util.WebBundleValidator;
-
-import org.glassfish.api.deployment.archive.ReadableArchive;
-import com.sun.enterprise.deploy.shared.ArchiveFactory;
-import com.sun.enterprise.module.ModulesRegistry;
-import org.glassfish.hk2.api.ServiceLocator;
-import org.glassfish.hk2.utilities.ServiceLocatorUtilities;
-import com.sun.enterprise.module.single.StaticModulesRegistry;
-import com.sun.enterprise.module.bootstrap.StartupContext;
-import org.glassfish.api.admin.ProcessEnvironment;
-import org.glassfish.api.admin.ProcessEnvironment.ProcessType;
-
-
-/**
- *
- * @author dochez
- */
-public class StandaloneProcessor {
-    private BundleDescriptor bundleDescriptor = null;
-    private AnnotatedElementHandler aeHandler = null;
-    private ModuleType type = null;
-    private Set<String> compClassNames = null;
-    private static ServiceLocator serviceLocator = null;
-
-    /** Creates a new instance of StandaloneProcessor */
-    public StandaloneProcessor() {
-        this(ModuleType.EJB);
-    }
-
-    public StandaloneProcessor(ModuleType type) {
-        this.type = type;
-        if (ModuleType.EJB.equals(type)) {
-            bundleDescriptor = new EjbBundleDescriptorImpl();
-            aeHandler = new EjbBundleContext((EjbBundleDescriptorImpl) bundleDescriptor);
-
-        } else if (ModuleType.WAR.equals(type)) {
-            bundleDescriptor = new WebBundleDescriptorImpl();
-            aeHandler = new WebBundleContext(
-                    (WebBundleDescriptor)bundleDescriptor);
-        } else if (ModuleType.CAR.equals(type)) {
-            bundleDescriptor = new ApplicationClientDescriptor();
-            aeHandler = new AppClientContext(
-                    (ApplicationClientDescriptor)bundleDescriptor);
-        } else {
-            throw new UnsupportedOperationException(
-                    "ModuleType : " + type + " is not supported.");
-        }
-    }
-
-    public void setComponentClassNames(Set compClassNames) {
-        this.compClassNames = compClassNames;
-    }
-
-    public static void main(String[] args) throws Exception {
-        StandaloneProcessor processor = new StandaloneProcessor();
-        processor.run(args);
-        processor.generateEjbJarXmlFile(".");
-        processor.generateWebServicesXmlFile(".");
-    }
-
-    public int run(String[] args) throws Exception {
-        for (String arg : args) {
-            System.out.println("Annotation log is set to " + System.getProperty("annotation.log"));
-            String logWhat = System.getProperty("annotation.log");
-            if (logWhat!=null) {
-                AnnotationUtils.setLoggerTarget(logWhat);
-                initLogger();
-            }
-            AnnotationUtils.getLogger().info("processing " + arg);
-            File f = new File(arg);
-            if (f.exists()) {
-                try {
-                    prepareServiceLocator();
-                    ArchiveFactory archiveFactory = serviceLocator.getService(ArchiveFactory.class);
-                    ReadableArchive archive = archiveFactory.openArchive(f);
-                    ClassLoader classLoader = null;
-                    if (ModuleType.WAR.equals(type)) {
-                        classLoader = new URLClassLoader(
-                            new URL[] { new File(f, "WEB-INF/classes").toURL() });
-                    } else {
-                        classLoader = new URLClassLoader(new URL[]{ f.toURL() });
-                    }
-                    ModuleScanner scanner = null;
-
-                    if (ModuleType.EJB.equals(type)) {
-                        EjbBundleDescriptorImpl ejbBundleDesc =
-                                (EjbBundleDescriptorImpl)bundleDescriptor;
-                        scanner = serviceLocator.getService(EjbJarScanner.class);
-                        scanner.process(archive, ejbBundleDesc, classLoader, null);
-
-                    } else if (ModuleType.WAR.equals(type)) {
-                        WebBundleDescriptor webBundleDesc =
-                                (WebBundleDescriptor)bundleDescriptor;
-                        for (String cname : compClassNames) {
-                            WebComponentDescriptor webCompDesc =
-                                    new WebComponentDescriptorImpl();
-                            webCompDesc.setServlet(true);
-                            webCompDesc.setWebComponentImplementation(cname);
-                            webBundleDesc.addWebComponentDescriptor(webCompDesc);
-                        }
-                        scanner = serviceLocator.getService(WarScanner.class);
-                        scanner.process(archive, webBundleDesc, classLoader, null);
-
-                    } else if (ModuleType.CAR.equals(type)) {
-                        String mainClassName = compClassNames.iterator().next();
-                        ApplicationClientDescriptor appClientDesc =
-                                (ApplicationClientDescriptor)bundleDescriptor;
-                        appClientDesc.setMainClassName(mainClassName);
-                        scanner = serviceLocator.getService(AppClientScanner.class);
-                        scanner.process(archive, appClientDesc, classLoader, null);
-
-                    }
-
-                    AnnotationProcessor ap = serviceLocator.<SJSASFactory>getService(SJSASFactory.class).getAnnotationProcessor(false);
-
-
-                    // if the user indicated a directory for handlers, time to add the
-                    String handlersDir = System.getProperty("handlers.dir");
-                    if (handlersDir!=null) {
-                        addHandlers(ap, handlersDir);
-                    }
-
-                    ProcessingContext ctx = ap.createContext();
-                    ctx.setErrorHandler(new StandaloneErrorHandler());
-                    bundleDescriptor.setClassLoader(scanner.getClassLoader());
-                    ctx.setProcessingInput(scanner);
-                    ctx.pushHandler(aeHandler);
-                    ProcessingResult result = ap.process(ctx);
-                    if (ModuleType.EJB.equals(type)) {
-                        EjbBundleDescriptorImpl ebd = (EjbBundleDescriptorImpl)bundleDescriptor;
-                        ebd.visit(new EjbBundleValidator());
-                    } else if (ModuleType.WAR.equals(type)) {
-                        WebBundleDescriptor wbd = (WebBundleDescriptor)bundleDescriptor;
-                        wbd.visit(new WebBundleValidator());
-                    } else if (ModuleType.CAR.equals(type)) {
-                        ApplicationClientDescriptor acbd = (ApplicationClientDescriptor)bundleDescriptor;
-                        acbd.visit(new AppClientValidator());
-                    }
-                    // display the result ejb bundle...
-                    // AnnotationUtils.getLogger().info("Resulting " + bundleDescriptor);
-
-                } catch(Exception e) {
-                    e.printStackTrace();
-                    throw e;
-                }
-            }
-        }
-        return 0;
-    }
-
-    public void generateAppClientXmlFile(String dir) throws IOException {
-         AppClientDeploymentDescriptorFile appClientdf = new AppClientDeploymentDescriptorFile();
-         appClientdf.write(bundleDescriptor, dir);
-
-    }
-
-    public void generateEjbJarXmlFile(String dir) throws IOException {
-         EjbDeploymentDescriptorFile ejbdf = new EjbDeploymentDescriptorFile();
-         ejbdf.write(bundleDescriptor, dir);
-
-    }
-
-    public void generateWebXmlFile(String dir) throws IOException {
-         WebDeploymentDescriptorFile webdf = new WebDeploymentDescriptorFile();
-         webdf.write((WebBundleDescriptorImpl)bundleDescriptor, dir);
-    }
-
-    public void generateWebServicesXmlFile(String dir) throws IOException {
-         WebServicesDeploymentDescriptorFile ddf = new WebServicesDeploymentDescriptorFile(bundleDescriptor);
-         ddf.write(bundleDescriptor, dir);
-    }
-
-    private void addHandlers(AnnotationProcessor ap, String handlersDir) {
-        try {
-        System.out.println("Handlers dir set at " + handlersDir);
-        DirectoryScanner scanner = new DirectoryScanner();
-        scanner.process(new File(handlersDir),null,null);
-
-        Set<Class> elements = scanner.getElements();
-        for (Class handlerClass : elements) {
-            Class[] interfaces = handlerClass.getInterfaces();
-            for (Class interf : interfaces) {
-                if (interf.equals(org.glassfish.apf.AnnotationHandler.class)) {
-                    AnnotationHandler handler = (AnnotationHandler) handlerClass.newInstance();
-                    if (AnnotationUtils.shouldLog("handler")) {
-                        AnnotationUtils.getLogger().fine("Registering handler " + handlerClass
-                               + " for type " + handler.getAnnotationType());
-                    }
-                    ap.pushAnnotationHandler(handler);
-                }
-            }
-        }
-        } catch(Exception e) {
-            AnnotationUtils.getLogger().severe("Exception while registering handlers : " + e.getMessage());
-        }
-    }
-
-    private void initLogger() {
-        try {
-            FileHandler handler = new FileHandler("annotation.log");
-            handler.setFormatter(new LogFormatter());
-            handler.setLevel(Level.FINE);
-            Logger logger = Logger.global;
-            logger.setLevel(Level.FINE);
-            logger.addHandler(handler);} catch(Exception e) {
-                e.printStackTrace();
-            }
-    }
-
-    private void prepareServiceLocator() {
-        if ( (serviceLocator == null) ) {
-            // Bootstrap a hk2 environment.
-            ModulesRegistry registry = new StaticModulesRegistry(getClass().getClassLoader());
-            serviceLocator = registry.createServiceLocator("default");
-
-            StartupContext startupContext = new StartupContext();
-
-            ServiceLocatorUtilities.addOneConstant(serviceLocator, startupContext);
-            ServiceLocatorUtilities.addOneConstant(serviceLocator,
-                new ProcessEnvironment(ProcessEnvironment.ProcessType.Other));
-        }
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/util/devtests/deployment/util/Utils.java b/appserver/tests/appserv-tests/devtests/deployment/util/devtests/deployment/util/Utils.java
deleted file mode 100644
index 69cee32..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/util/devtests/deployment/util/Utils.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.glassfish.tests.utils;
-
-import com.sun.enterprise.module.bootstrap.StartupContext;
-import com.sun.enterprise.module.ModulesRegistry;
-import com.sun.enterprise.module.single.StaticModulesRegistry;
-
-import org.glassfish.hk2.api.ServiceLocator;
-import org.jvnet.hk2.config.ConfigParser;
-import org.jvnet.hk2.config.DomDocument;
-
-import java.net.URL;
-import java.util.logging.Logger;
-import java.io.File;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Properties;
-
-/**
- * Utilities to create a configured Habitat and cache them
- *
- * Shamelessly copied from nucleus/tests/util
- *
- * @author Jerome Dochez
- */
-public class Utils {
-
-    final static String habitatName = "default";
-    final static String inhabitantPath = "META-INF/inhabitants";
-
-    public static final Utils instance = new Utils();
-
-    public static ServiceLocator getServiceLocator() {
-
-        Properties p = new Properties();
-        p.put(com.sun.enterprise.glassfish.bootstrap.Constants.INSTALL_ROOT_PROP_NAME, System.getProperty("java.io.tmpdir"));
-        p.put(com.sun.enterprise.glassfish.bootstrap.Constants.INSTANCE_ROOT_PROP_NAME, System.getProperty("java.io.tmpdir"));
-        ModulesRegistry registry = new StaticModulesRegistry(Utils.class.getClassLoader(), new StartupContext(p));
-        ServiceLocator serviceLocator = registry.createServiceLocator("default");
-
-        return serviceLocator;
-    }
-}
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/versioning/basic-scenarios.xml b/appserver/tests/appserv-tests/devtests/deployment/versioning/basic-scenarios.xml
index 8c4d18f..6fbadf4 100644
--- a/appserver/tests/appserv-tests/devtests/deployment/versioning/basic-scenarios.xml
+++ b/appserver/tests/appserv-tests/devtests/deployment/versioning/basic-scenarios.xml
@@ -79,70 +79,6 @@
     <antcall target="undeploy.version">
         <param name="versionExpression" value="${identifier.2}"/>
     </antcall>
-
-    <!-- deploys by using the 1st jsr88 api -->
-    <antcall target="deploy.version.jsr88">
-        <param name="versionExpression" value="${identifier.1}"/>
-        <param name="xmlVersionIdentifier" value="${identifier.1}"/>
-    </antcall>
-
-    <!-- test that the deployed version running is ${identifier.1} -->
-    <antcall target="test.registred">
-        <param name="versionExpression" value="${identifier.1}"/>
-        <param name="description" value="xml.version(3) deploy jsr88"/>
-    </antcall>
-
-    <!-- deploys by using the 1st jsr88 api (file mode)-->
-    <antcall target="deploy.version.jsr88">
-        <param name="versionExpression" value="${identifier.4}"/>
-        <param name="xmlVersionIdentifier" value="${identifier.4}"/>
-    </antcall>
-
-    <!-- test that the deployed version running is ${identifier.4} -->
-    <antcall target="test.registred">
-        <param name="versionExpression" value="${identifier.4}"/>
-        <param name="description" value="xml.version(4) deploy jsr88"/>
-    </antcall>
-
-    <!-- redeploys by using the 1st jsr88 api (File mode) -->
-    <antcall target="redeploy.version.jsr88">
-        <param name="versionExpression" value="${identifier.4}"/>
-        <param name="xmlVersionIdentifier" value="${identifier.4}"/>
-    </antcall>
-
-    <!-- test that the deployed version running is ${identifier.4} -->
-    <antcall target="test.registred">
-        <param name="versionExpression" value="${identifier.4}"/>
-        <param name="description" value="xml.version(5) redeploy jsr88"/>
-    </antcall>
-
-    <antcall target="autodeploy.scenario">
-        <param name="description" value="xml.version(6) autodeploy"/>
-    </antcall>
-
-    <!-- deploys by using the 2nd jsr88 api (InputStream mode) -->
-    <antcall target="deploy.version-stream.jsr88">
-        <param name="versionExpression" value="${identifier.3}"/>
-        <param name="xmlVersionIdentifier" value="${identifier.3}"/>
-    </antcall>
-
-    <!-- test that the deployed version running is ${identifier.3} -->
-    <antcall target="test.registred">
-        <param name="versionExpression" value="${identifier.3}"/>
-        <param name="description" value="xml.version(7) deploy-stream jsr88"/>
-    </antcall>
-
-    <!-- redeploys by using the 2nd jsr88 api (InputStream mode) -->
-    <antcall target="redeploy.version-stream.jsr88">
-        <param name="versionExpression" value="${identifier.3}"/>
-        <param name="xmlVersionIdentifier" value="${identifier.2}"/>
-    </antcall>
-
-    <!-- test that the deployed version running is ${identifier.3} -->
-    <antcall target="test.registred">
-        <param name="versionExpression" value="${identifier.3}"/>
-        <param name="description" value="xml.version(8) deploy-stream jsr88"/>
-    </antcall>
 </target>
 
 <!--
diff --git a/appserver/tests/appserv-tests/devtests/deployment/versioning/simple-versioned-appclient/META-INF/glassfish-application-client.xml b/appserver/tests/appserv-tests/devtests/deployment/versioning/simple-versioned-appclient/META-INF/glassfish-application-client.xml
index 27f3d2e..b49a6be 100644
--- a/appserver/tests/appserv-tests/devtests/deployment/versioning/simple-versioned-appclient/META-INF/glassfish-application-client.xml
+++ b/appserver/tests/appserv-tests/devtests/deployment/versioning/simple-versioned-appclient/META-INF/glassfish-application-client.xml
@@ -19,5 +19,5 @@
 -->
 
 <glassfish-application-client>
-  <version-identifier>RC-1.0.0</version-identifier>
+  <version-identifier></version-identifier>
 </glassfish-application-client>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/versioning/simple-versioned-ear/META-INF/glassfish-application.xml b/appserver/tests/appserv-tests/devtests/deployment/versioning/simple-versioned-ear/META-INF/glassfish-application.xml
index 255df93..5fc9642 100644
--- a/appserver/tests/appserv-tests/devtests/deployment/versioning/simple-versioned-ear/META-INF/glassfish-application.xml
+++ b/appserver/tests/appserv-tests/devtests/deployment/versioning/simple-versioned-ear/META-INF/glassfish-application.xml
@@ -19,5 +19,5 @@
 -->
 
 <glassfish-application>
-    <version-identifier>RC-1.0.0</version-identifier>
+    <version-identifier>ALPHA-1.0.0</version-identifier>
 </glassfish-application>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/versioning/simple-versioned-ear/build.xml b/appserver/tests/appserv-tests/devtests/deployment/versioning/simple-versioned-ear/build.xml
index b943699..54e558c 100644
--- a/appserver/tests/appserv-tests/devtests/deployment/versioning/simple-versioned-ear/build.xml
+++ b/appserver/tests/appserv-tests/devtests/deployment/versioning/simple-versioned-ear/build.xml
@@ -34,58 +34,57 @@
         file contains a version identifier as a property and is used by the
         servlet to display the version informations.
     -->
-    <property name="testPackage" value="versionedAppClient"/>
-    <property name="gfDDFile" value="glassfish-application.xml"/>
-    <property name="gfDDDir" value="META-INF"/>
+  <property name="testPackage" value="versionedAppClient"/>
+  <property name="gfDDFile" value="glassfish-application.xml"/>
+  <property name="gfDDDir" value="META-INF"/>
 
-    <loadproperties srcFile="../build.properties"/>
+  <loadproperties srcFile="../build.properties"/>
 
-    <!-- link: the context root of the servlet -->
-    <property name="link" value="/${untaggedName}"/>
-    <!-- untaggedName: the name of the application, its the version's prefix -->
-    <property name="untaggedName" value="simple-versioned-ear"/>
-    <!-- packaging: the file archive's extention -->
-    <property name="packaging" value="ear"/>
+  <!-- link: the context root of the servlet -->
+  <property name="link" value="/${untaggedName}"/>
+  <!-- untaggedName: the name of the application, its the version's prefix -->
+  <property name="untaggedName" value="simple-versioned-ear"/>
+  <!-- packaging: the file archive's extention -->
+  <property name="packaging" value="ear"/>
 
-    <!-- the module embedded in the EAR archive -->
-    <property name="moduleUntaggedName" value="simple-versioned-servlet"/>
-    <property name="modulePackaging" value="war"/>
-    <property name="moduleBuildDir" value="../${moduleUntaggedName}"/>
+  <!-- the module embedded in the EAR archive -->
+  <property name="moduleUntaggedName" value="simple-versioned-servlet"/>
+  <property name="modulePackaging" value="war"/>
+  <property name="moduleBuildDir" value="../${moduleUntaggedName}"/>
 
-    <target name="process.servletName" depends="process.versionExpression">
-      <condition property="servletAppName" value="${moduleUntaggedName}:${versionExpression}" else="${moduleUntaggedName}">
-        <not><equals arg1="${versionExpression}" arg2=""/></not>
-      </condition>
-    </target>
+  <target name="process.servletName" depends="process.versionExpression">
+    <condition property="servletAppName" value="${moduleUntaggedName}:${versionExpression}" else="${moduleUntaggedName}">
+      <not>
+        <equals arg1="${versionExpression}" arg2=""/>
+      </not>
+    </condition>
+  </target>
 
-    <target name="prepare" depends="init">
-        <mkdir dir="${build}"/>
-    </target>
+  <target name="prepare" depends="init">
+    <mkdir dir="${build}"/>
+  </target>
 
-    <!-- assemble: package the ear archive -->
-    <target name="assemble" depends="prepare,process.servletName">
-        <property name="moduleUntaggedArchive" value="${build}/${moduleUntaggedName}.${modulePackaging}"/>
-        <delete file="${moduleUntaggedArchive}" failonerror="false"/>
-        <ant dir="${moduleBuildDir}" target="create.version" inheritAll="false">
-          <property name="versionExpression" value="${versionExpression}"/>
-          <property name="xmlVersionIdentifier" value=""/>
-        </ant>
-        <move file="${build}/${servletAppName}.${modulePackaging}" tofile="${moduleUntaggedArchive}" failonerror="false"/>
-        <property name="xmlFile" value="${gfDDDir}/${gfDDFile}"/>
-            <antcall target="generate.xml.identifier"/>
-        <jar destfile="${archiveFile}">
-          <fileset dir="." includes="META-INF/*.xml"/>
-          <fileset dir="${build}" includes="${moduleUntaggedName}.${modulePackaging}"/>
-        </jar>
-        <delete file="${moduleUntaggedArchive}" failonerror="false"/>
-     </target>
+  <!-- assemble: package the ear archive -->
+  <target name="assemble" depends="prepare,process.servletName">
+    <property name="moduleUntaggedArchive" value="${build}/${moduleUntaggedName}.${modulePackaging}"/>
+    <delete file="${moduleUntaggedArchive}" failonerror="false"/>
+    <ant dir="${moduleBuildDir}" target="create.version" inheritAll="false">
+      <property name="versionExpression" value="${versionExpression}"/>
+      <property name="xmlVersionIdentifier" value=""/>
+    </ant>
+    <move file="${build}/${servletAppName}.${modulePackaging}" tofile="${moduleUntaggedArchive}" failonerror="false"/>
+    <property name="xmlFile" value="${gfDDDir}/${gfDDFile}"/>
+    <antcall target="generate.xml.identifier"/>
+    <jar destfile="${archiveFile}">
+      <fileset dir="." includes="META-INF/*.xml" />
+      <fileset dir="${build}" includes="${moduleUntaggedName}.${modulePackaging}" />
+    </jar>
+    <delete file="${moduleUntaggedArchive}" failonerror="false"/>
+  </target>
 
-<!--
-  Currently, only the scenarios processing test.registred and test.notregistred
-  are supported.
--->
-    <target name="main-all">
-      <antcall target="xml.version.information"/>
-      <antcall target="clean.scenario"/>
-    </target>
+  <!-- Currently, only the scenarios processing test.registred and test.notregistred are supported. -->
+  <target name="main-all">
+    <antcall target="xml.version.information"/>
+    <antcall target="clean.scenario"/>
+  </target>
 </project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/versioning/simple-versioned-ejb/META-INF/glassfish-ejb-jar.xml b/appserver/tests/appserv-tests/devtests/deployment/versioning/simple-versioned-ejb/META-INF/glassfish-ejb-jar.xml
index cef074d..2cd578f 100644
--- a/appserver/tests/appserv-tests/devtests/deployment/versioning/simple-versioned-ejb/META-INF/glassfish-ejb-jar.xml
+++ b/appserver/tests/appserv-tests/devtests/deployment/versioning/simple-versioned-ejb/META-INF/glassfish-ejb-jar.xml
@@ -19,5 +19,5 @@
 -->
 
 <glassfish-ejb-jar>
-  <version-identifier>RC-1.0.0</version-identifier>
+  <version-identifier>ALPHA-1.0.0</version-identifier>
 </glassfish-ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/versioning/versioning-common.xml b/appserver/tests/appserv-tests/devtests/deployment/versioning/versioning-common.xml
index 77c0513..7488e71 100644
--- a/appserver/tests/appserv-tests/devtests/deployment/versioning/versioning-common.xml
+++ b/appserver/tests/appserv-tests/devtests/deployment/versioning/versioning-common.xml
@@ -106,42 +106,6 @@
 </target>
 
 <!--
-  Deploys the given version with JSR88 API that use a File
-  @param ${versionExpression} (optional)
-  @param ${xmlVersionIdentifier} (optional)
--->
-<target name="deploy.version.jsr88" depends="prepare.version.jsr88,common.deploy.jsr88"/>
-
-<!--
-  Deploys the given version with the JSR88 API that use an Inputstream.
-  @param ${versionExpression} (optional)
-  @param ${xmlVersionIdentifier} (optional)
--->
-<target name="deploy.version-stream.jsr88" depends="prepare.version.jsr88,common.deploy-stream.jsr88"/>
-
-<!--
-  Redeploys the given version with JSR88 API that use a File
-  @param ${versionExpression} (optional)
--->
-<target name="redeploy.version.jsr88" depends="prepare.version.jsr88">
-    <antcall target="common.run.jsr88">
-        <param name="command" value="redeploy"/>
-        <param name="arg.list" value="true ${arg.list}"/>
-    </antcall>
-</target>
-
-<!--
-  Redeploys the given version with the JSR88 API that use a Inputstream.
-  @param ${versionExpression} (optional)
--->
-<target name="redeploy.version-stream.jsr88" depends="prepare.version.jsr88">
-    <antcall target="common.run.jsr88">
-        <param name="command" value="redeploy-stream"/>
-        <param name="arg.list" value="true ${arg.list}"/>
-    </antcall>
-</target>
-
-<!--
   Deploys the given version with autodeploy directory, available only in PE mode
   @param ${versionExpression} (optional)
   @param ${xmlVersionIdentifier} (optional)
@@ -416,9 +380,6 @@
   <property name="arg.list" value="get-client-stubs --appname=${appName} ${stubsPath}"/>
   <property name="desc" value="${description}"/>
 </target>
-<target name="prepare.version.jsr88" depends="process.appname,create.version">
-    <property name="arg.list" value="${build}/${appName}.${packaging}"/>
-</target>
 <target name="prepare.appclient.preparator">
   <property name="classname" value="${preparatorClassName}"/>
   <property name="outputLog" value="${build}/getJwsClientStubs.log"/>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/appmgt/appmgttest/EnvEntryInfo.java b/appserver/tests/appserv-tests/devtests/deployment/war/appmgt/appmgttest/EnvEntryInfo.java
deleted file mode 100644
index 85a34dc..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/appmgt/appmgttest/EnvEntryInfo.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package appmgttest;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-public class EnvEntryInfo {
-
-    /** env pattern is name(class)=value//desc */
-    private static final String BRIEF_PATTERN_STRING = "([^\\(]*)\\(([^\\)]*)\\)=(.*?)";
-    private static final String FULL_PATTERN_STRING = BRIEF_PATTERN_STRING + "//(.*)";
-
-    private static final Pattern BRIEF_PATTERN = Pattern.compile(BRIEF_PATTERN_STRING);
-    private static final Pattern FULL_PATTERN = Pattern.compile(FULL_PATTERN_STRING);
-
-    private final String name;
-    private final String className;
-    private final String value;
-    private final String desc;
-
-    public EnvEntryInfo(final String name, final String cl, final String value, final String desc) {
-        super();
-        this.name = name;
-        this.className = cl;
-        this.value = value;
-        this.desc = desc;
-    }
-
-    public EnvEntryInfo(final String name, final String cl, final String value) {
-        this(name, cl, value, null);
-    }
-
-    public static EnvEntryInfo parseFull(final String expr) throws ClassNotFoundException {
-        return parse(expr, FULL_PATTERN);
-    }
-
-    public static EnvEntryInfo parseBrief(final String expr) throws ClassNotFoundException {
-        return parse(expr, BRIEF_PATTERN);
-    }
-
-
-
-    private static EnvEntryInfo parse(final String expr, final Pattern p) throws ClassNotFoundException {
-        Matcher m = p.matcher(expr);
-        EnvEntryInfo result = null;
-        if (m.matches()) {
-            result = new EnvEntryInfo(m.group(1), m.group(2),
-                    m.group(3), m.groupCount() > 3 ? m.group(4) : null);
-        }
-        return result;
-    }
-
-    public String name() {
-        return name;
-    }
-
-    @Override
-    public String toString() {
-        return String.format("%1$s(%2$s)=%3$s//\"%4$s\"", name, className, value, desc);
-    }
-
-    public String toStringBrief() {
-        return String.format("%1$s(%2$s)=%3$s", name, className, value);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj == null) {
-            return false;
-        }
-        if (getClass() != obj.getClass()) {
-            return false;
-        }
-        final EnvEntryInfo other = (EnvEntryInfo) obj;
-        if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
-            return false;
-        }
-        if (this.className != other.className && (this.className == null || !this.className.equals(other.className))) {
-            return false;
-        }
-        if ((this.value == null) ? (other.value != null) : !this.value.equals(other.value)) {
-            return false;
-        }
-        if ((this.desc == null) ? (other.desc != null) : !this.desc.equals(other.desc)) {
-            return false;
-        }
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        int hash = 3;
-        hash = 67 * hash + (this.name != null ? this.name.hashCode() : 0);
-        hash = 67 * hash + (this.className != null ? this.className.hashCode() : 0);
-        hash = 67 * hash + (this.value != null ? this.value.hashCode() : 0);
-        hash = 67 * hash + (this.desc != null ? this.desc.hashCode() : 0);
-        return hash;
-    }
-
-
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/appmgt/appmgttest/ParamInfo.java b/appserver/tests/appserv-tests/devtests/deployment/war/appmgt/appmgttest/ParamInfo.java
deleted file mode 100644
index 8ab5cb7..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/appmgt/appmgttest/ParamInfo.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package appmgttest;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- *
- * @author tjquinn
- */
-public class ParamInfo {
-
-    /** env pattern is name(class)=value//desc */
-    private static final String BRIEF_PATTERN_STRING = "([^=]*)=(.*?)";
-    private static final String FULL_PATTERN_STRING = BRIEF_PATTERN_STRING + "//(.*)";
-
-    private static final Pattern BRIEF_PATTERN = Pattern.compile(BRIEF_PATTERN_STRING);
-    private static final Pattern FULL_PATTERN = Pattern.compile(FULL_PATTERN_STRING);
-
-    private final String name;
-    private final String value;
-    private final String desc;
-
-    public ParamInfo(final String name, final String value, final String desc) {
-        super();
-        this.name = name;
-        this.value = value;
-        this.desc = desc;
-    }
-
-    public ParamInfo(final String name, final String value) {
-        this(name, value, null);
-    }
-
-    public static ParamInfo parseFull(final String expr) throws ClassNotFoundException {
-        return parse(expr, FULL_PATTERN);
-    }
-
-    public static ParamInfo parseBrief(final String expr) throws ClassNotFoundException {
-        return parse(expr, BRIEF_PATTERN);
-    }
-
-
-
-    private static ParamInfo parse(final String expr, final Pattern p) throws ClassNotFoundException {
-        Matcher m = p.matcher(expr);
-        ParamInfo result = null;
-        if (m.matches()) {
-            result = new ParamInfo(m.group(1),
-                    m.group(2), m.groupCount() > 2 ? m.group(3) : null);
-        }
-        return result;
-    }
-
-    public String name() {
-        return name;
-    }
-
-    @Override
-    public String toString() {
-        return String.format("%1s$=%2$s//\"%3$s\"", name, value, desc);
-    }
-
-    public String toStringBrief() {
-        return String.format("%1$s=%2$s", name, value);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj == null) {
-            return false;
-        }
-        if (getClass() != obj.getClass()) {
-            return false;
-        }
-        final ParamInfo other = (ParamInfo) obj;
-        if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
-            return false;
-        }
-        if ((this.value == null) ? (other.value != null) : !this.value.equals(other.value)) {
-            return false;
-        }
-        if ((this.desc == null) ? (other.desc != null) : !this.desc.equals(other.desc)) {
-            return false;
-        }
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        int hash = 3;
-        hash = 97 * hash + (this.name != null ? this.name.hashCode() : 0);
-        hash = 97 * hash + (this.value != null ? this.value.hashCode() : 0);
-        hash = 97 * hash + (this.desc != null ? this.desc.hashCode() : 0);
-        return hash;
-    }
-
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/appmgt/appmgttest/TestClient.java b/appserver/tests/appserv-tests/devtests/deployment/war/appmgt/appmgttest/TestClient.java
deleted file mode 100644
index 81cc56a..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/appmgt/appmgttest/TestClient.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package appmgttest;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Command-line args should be:
- *   URL to use in accessing the servlet
- *   expect positive result (true or false)
- *   one or more of the two following formats:
- *     -env name(class)=value//"desc"
- *     -param name=value//"desc"
- *
- * @author tjquinn
- */
-public class TestClient {
-
-    /**
-     * @param args the command line arguments
-     */
-    public static void main(String[] args) {
-        try {
-            new TestClient().run(args);
-        } catch (Exception e) {
-            e.printStackTrace();
-            System.exit(1);
-        }
-    }
-
-    private void run(String[] args) {
-
-        String url = args[0];
-        boolean testPositive = (Boolean.valueOf(args[1])).booleanValue();
-        try {
-            log("Test: devtests/deployment/war/appmgt");
-            final Map<String,EnvEntryInfo> envs = new HashMap<String,EnvEntryInfo>();
-            final Map<String,ParamInfo> params = new HashMap<String,ParamInfo>();
-            int code = invokeServlet(url, envs, params);
-
-            /*
-             * We always expect the servlet to respond.
-             */
-            report(code, true);
-
-            boolean entireTestPassed = true;
-
-            String nextTestType = null;
-            for (int i = 2; i < args.length; i++) {
-                final String arg = args[i];
-                if (arg.startsWith("-")) {
-                    nextTestType = arg;
-                } else {
-                    if (nextTestType.equals("-env")) {
-                        EnvEntryInfo target = EnvEntryInfo.parseBrief(arg);
-                        EnvEntryInfo match = envs.get(target.name());
-                        entireTestPassed &= reportCheck(target, match, "env-entry", target.name());
-                    } else if (nextTestType.equals("-param")) {
-                        ParamInfo target = ParamInfo.parseBrief(arg);
-                        ParamInfo match = params.get(target.name());
-                        entireTestPassed &= reportCheck(target, match, "context-param", target.name());
-                    }
-                }
-            }
-            if (entireTestPassed == testPositive) {
-                pass();
-            } else {
-                fail();
-            }
-
-        } catch (IOException ex) {
-            if (testPositive) {
-                ex.printStackTrace();
-                fail();
-            } else {
-                log("Caught EXPECTED IOException: " + ex);
-                pass();
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    private boolean reportCheck(Object target, Object match, final String testType, final String targetName) {
-        boolean result;
-        if (match == null) {
-            System.err.println("No matching " + testType + " for target name " + targetName);
-            result = false;
-        } else if ( ! match.equals(target)) {
-            System.err.println("Target " + target.toString() + " != match " + match.toString());
-            result = false;
-        } else {
-            result = true;
-        }
-        return result;
-    }
-
-    private int invokeServlet(final String url, final Map<String,EnvEntryInfo> envs,
-            final Map<String,ParamInfo> params) throws Exception {
-        log("Invoking URL = " + url);
-        URL u = new URL(url);
-        HttpURLConnection c1 = (HttpURLConnection)u.openConnection();
-        int code = c1.getResponseCode();
-        if (code == 200) {
-            BufferedReader br = new BufferedReader(new InputStreamReader(c1.getInputStream()));
-            String line;
-            System.out.println("From servlet:");
-            while ((line = br.readLine()) != null) {
-                System.out.println("  " + line);
-                if (line.startsWith("-env")) {
-                    final EnvEntryInfo env = EnvEntryInfo.parseBrief(line.substring("-env".length() + 1));
-                    envs.put(env.name(), env);
-                } else if (line.startsWith("-param")) {
-                    final ParamInfo param = ParamInfo.parseBrief(line.substring("-param".length() + 1));
-                    params.put(param.name(), param);
-                } else {
-                    System.err.println("Unrecognized response line from servlet - continuing:");
-                    System.err.println(">>" + line);
-                }
-            }
-
-            System.out.println("servlet done");
-            br.close();
-        }
-        return code;
-    }
-
-    private void report(int code, boolean testPositive) {
-        if (testPositive) { //expect return code 200
-            if(code != 200) {
-                log("Incorrect return code: " + code);
-                fail();
-            } else {
-                log("Correct return code: " + code);
-            }
-        } else {
-            if(code != 200) { //expect return code !200
-                log("Correct return code: " + code);
-            } else {
-                log("Incorrect return code: " + code);
-                fail();
-            }
-        }
-    }
-
-    private void log(String message) {
-        System.err.println("[war.client.Client]:: " + message);
-    }
-
-    private void pass() {
-        log("PASSED: devtests/deployment/war/appmgt");
-        System.exit(0);
-    }
-
-    private void fail() {
-        log("FAILED: devtests/deployment/war/appmgt");
-        System.exit(1);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/appmgt/appmgttest/TestServlet.java b/appserver/tests/appserv-tests/devtests/deployment/war/appmgt/appmgttest/TestServlet.java
deleted file mode 100644
index 790011e..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/appmgt/appmgttest/TestServlet.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package appmgttest;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Enumeration;
-import javax.naming.Binding;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingEnumeration;
-import jakarta.servlet.ServletContext;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-/**
- *
- * @author tjquinn
- */
-public class TestServlet extends HttpServlet {
-
-    /**
-     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
-     * @param request servlet request
-     * @param response servlet response
-     * @throws ServletException if a servlet-specific error occurs
-     * @throws IOException if an I/O error occurs
-     */
-    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
-    throws ServletException, IOException {
-        response.setContentType("text/plain;charset=UTF-8");
-        PrintWriter out = response.getWriter();
-        try {
-            /*
-             * Write the env-entry information.
-             */
-            Context ctx = new InitialContext();
-            for (NamingEnumeration<Binding> e = ctx.listBindings("java:comp/env"); e.hasMore(); ) {
-                Binding b = e.next();// java:comp/env/xxx
-                final String name = b.getName().substring("java:comp/env/".length());
-                final String cl = b.getClassName();
-                final Object o = b.getObject();
-                EnvEntryInfo env = new EnvEntryInfo(name, cl, o.toString());
-                out.println("-env " + env.toStringBrief());
-            }
-
-            /*
-             * Write the context-param info.
-             */
-            final ServletContext servletContext = getServletContext();
-            for (Enumeration<String> names = servletContext.getInitParameterNames(); names.hasMoreElements();) {
-                final String name = names.nextElement();
-                final String value = servletContext.getInitParameter(name);
-                final ParamInfo param = new ParamInfo(name, value);
-                out.println("-param " + param.toStringBrief());
-            }
-
-            out.flush();
-
-        } catch (Exception e) {
-            e.printStackTrace(out);
-        } finally {
-            out.close();
-        }
-    }
-
-    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
-    /**
-     * Handles the HTTP <code>GET</code> method.
-     * @param request servlet request
-     * @param response servlet response
-     * @throws ServletException if a servlet-specific error occurs
-     * @throws IOException if an I/O error occurs
-     */
-    @Override
-    protected void doGet(HttpServletRequest request, HttpServletResponse response)
-    throws ServletException, IOException {
-        processRequest(request, response);
-    }
-
-    /**
-     * Handles the HTTP <code>POST</code> method.
-     * @param request servlet request
-     * @param response servlet response
-     * @throws ServletException if a servlet-specific error occurs
-     * @throws IOException if an I/O error occurs
-     */
-    @Override
-    protected void doPost(HttpServletRequest request, HttpServletResponse response)
-    throws ServletException, IOException {
-        processRequest(request, response);
-    }
-
-    /**
-     * Returns a short description of the servlet.
-     * @return a String containing servlet description
-     */
-    @Override
-    public String getServletInfo() {
-        return "Retrieves current env-entry and context-param settings";
-    }// </editor-fold>
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/appmgt/build.xml b/appserver/tests/appserv-tests/devtests/deployment/war/appmgt/build.xml
deleted file mode 100644
index c23982f..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/appmgt/build.xml
+++ /dev/null
@@ -1,405 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="appMgtTestApp" default="usage" basedir=".">
-
-    &commonBuild;
-
-    <property name="contextRoot" value="war"/>
-    <property name="testName" value="appmgt"/>
-
-    <property name="original.config.client.args" value="-param builtin=in-app -env builtin(java.lang.String)=in-app"/>
-    <property name="customized.config.client.args" value="-env env1(java.lang.String)=env-val1 -param par1=par-val1"/>
-
-    <target name="prepare" depends="init">
-        <property name="portable.war" value="${build}/${testName}-portable.war"/>
-        <property name="all.war" value="${build}/${testName}.war"/>
-        <property name="deployplan.jar" value="${build}/${testName}-deployplan.jar"/>
-        <mkdir dir="${build}"/>
-    </target>
-
-    <target name="compile" depends="prepare">
-        <javac srcdir="."
-               destdir="${build}"
-               debug="on"
-               failonerror="true">
-            <classpath refid="gfv3.classpath" />
-        </javac>
-    </target>
-
-    <target name="assemble" depends="compile">
-        <war destfile="${portable.war}" webxml="web.xml">
-            <classes dir="${build}"/>
-        </war>
-        <jar destfile="${deployplan.jar}">
-            <fileset dir="${basedir}" includes="sun-web.xml"/>
-        </jar>
-
-        <war destfile="${all.war}" webxml="web.xml">
-            <webinf dir="." includes="sun-web.xml"/>
-            <classes dir="${build}"/>
-        </war>
-    </target>
-
-    <target name="deploy.asadmin" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="${all.war}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.asadmin" depends="prepare">
-        <antcall target="common.redeploy.asadmin">
-            <param name="arg.list" value="${all.war}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-   <target name="v3.redeploy.asadmin" depends="prepare">
-        <antcall target="common.v3.redeploy.asadmin">
-            <param name="arg.list"
-                   value="--name ${testName} ${all.war}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.asadmin">
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="${testName}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="enable.asadmin">
-        <antcall target="common.enable.asadmin">
-            <param name="arg.list"
-                   value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="disable.asadmin">
-        <antcall target="common.disable.asadmin">
-            <param name="arg.list"
-                   value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.jsr88" depends="prepare">
-        <antcall target="common.deploy.jsr88">
-            <param name="arg.list" value="${portable.war} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.jsr88" depends="prepare">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="redeploy"/>
-            <param name="arg.list" value="appmgt-portable ${portable.war} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.jsr88">
-        <antcall target="common.undeploy.jsr88">
-            <param name="arg.list" value="appmgt-portable"/>
-        </antcall>
-    </target>
-
-    <target name="start.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="start"/>
-            <param name="arg.list" value="appmgt-portable"/>
-        </antcall>
-    </target>
-
-    <target name="stop.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="stop"/>
-            <param name="arg.list" value="appmgt-portable"/>
-        </antcall>
-    </target>
-
-    <target name="do.asadmin">
-        <antcall target="common.run.asadmin">
-            <param name="arg.list" value="${command} ${arg.list} ${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="run" depends="run.positive"/>
-
-    <target name="run.positive" depends="setHttpPort">
-        <antcall target="common.run.positive">
-            <param name="link" value="${contextRoot}/${testName}"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="run.negative" depends="setHttpPort">
-        <antcall target="common.run.negative">
-            <param name="link" value="${contextRoot}/${testName}"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="runclient" depends="init">
-        <echo message="TestClient ${arg.list}"/>
-        <javaWithResult
-            fork="true"
-            failonerror="false"
-            jvm="${JAVA}"
-            classname="appmgttest.TestClient"
-            output="${build}/${log.id}.output.log"
-            resultproperty="result">
-            <jvmarg value="-Dorg.omg.CORBA.ORBInitialHost=${http.host}"/>
-            <jvmarg value="-Dorg.omg.CORBA.ORBInitialPort=${orb.port}"/>
-
-            <classpath>
-                <path location="${inst}/lib/j2ee.jar"/>
-                <path location="${build}"/>
-            </classpath>
-
-            <arg line="${arg.list}"/>
-        </javaWithResult>
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/${log.id}.output.log"/>
-        </antcall>
-    </target>
-
-    <target name="private-all" depends="private-all-pe"/>
-
-    <target name="private-all-pe" if="PE">
-
-        <antcall target="assemble"/>
-
-        <antcall target="deploy.asadmin"/>
-
-        <!--
-            Note that the client asks the servlet to report all its
-            env-entries and all context-params.  Then the client uses the
-            client command-line args to search for matching entries that the
-            servlet returned.  We expect positive results for env-entries or
-            context-params defined EITHER in the web app OR in the customizations,
-            unless of course the customizations request ignoreDescriptorItem in
-            which case the corresponding descriptor item should not appear in
-            the data the servlet sends to the client.
-        -->
-        <antcall target="check.original.config.with.no.customization">
-            <param name="log.id" value="1"/>
-        </antcall>
-
-        <!--
-            Now create a new env entry and context param via customization.
-        -->
-
-        <antcall target="do.asadmin">
-            <param name="command" value="set-web-env-entry"/>
-            <param name="arg.list" value="--name=env1 --type=java.lang.String --value=env-val1"/>
-        </antcall>
-
-        <antcall target="do.asadmin">
-            <param name="command" value="set-web-context-param"/>
-            <param name="arg.list" value="--name=par1 --value=par-val1"/>
-        </antcall>
-
-        <antcall target="disable.asadmin"/>
-        <antcall target="enable.asadmin"/>
-
-        <antcall target="check.original.config.with.additive.customization">
-            <param name="log.id" value="2"/>
-        </antcall>
-
-        <!--
-            Further customize by suppressing the original env-entry and
-            context-param but leaving the added ones.
-        -->
-        <antcall target="do.asadmin">
-            <param name="command" value="set-web-env-entry"/>
-            <param name="arg.list" value="--name builtin --ignoreDescriptorItem=true"/>
-        </antcall>
-
-        <antcall target="do.asadmin">
-            <param name="command" value="set-web-context-param"/>
-            <param name="arg.list" value="--name=builtin --ignoreDescriptorItem=true"/>
-        </antcall>
-
-        <!--
-            Restart the app so the config changes will have effect.
-        -->
-        <antcall target="disable.asadmin"/>
-        <antcall target="enable.asadmin"/>
-
-        <antcall target="check.added.customization.and.suppressed.original.config">
-            <param name="log.id" value="3"/>
-        </antcall>
-
-        <!--
-            Make sure the results are the same after a redeployment.
-        -->
-        <antcall target="v3.redeploy.asadmin"/>
-
-        <antcall target="check.added.customization.and.suppressed.original.config">
-            <param name="log.id" value="4"/>
-        </antcall>
-
-        <!--
-            Redeploy using deploy force=true.  The customizations should
-            survive.
-        -->
-
-        <antcall target="redeploy.asadmin"/>
-
-        <antcall target="check.added.customization.and.suppressed.original.config">
-            <param name="log.id" value="5"/>
-        </antcall>
-
-        <!--
-            Now unset the customizations and then make sure that the behavior
-            is back to how it was immediately after the initial deployment.
-        -->
-
-        <antcall target="do.asadmin">
-            <param name="command" value="unset-web-env-entry"/>
-            <param name="arg.list" value="--name=env1"/>
-        </antcall>
-
-        <antcall target="do.asadmin">
-            <param name="command" value="unset-web-env-entry"/>
-            <param name="arg.list" value="--name builtin"/>
-        </antcall>
-
-        <antcall target="do.asadmin">
-            <param name="command" value="unset-web-context-param"/>
-            <param name="arg.list" value="--name=par1"/>
-        </antcall>
-
-        <antcall target="do.asadmin">
-            <param name="command" value="unset-web-context-param"/>
-            <param name="arg.list" value="--name=builtin"/>
-        </antcall>
-
-        <!-- Restart so the changes become effective. -->
-        <antcall target="disable.asadmin"/>
-        <antcall target="enable.asadmin"/>
-
-        <antcall target="check.original.config.with.no.customization">
-            <param name="log.id" value="6"/>
-        </antcall>
-
-        <!--
-            The app is still deployed.  Undeploy it then deploy it again.
-            The customizations should have vanished.
-        -->
-
-        <antcall target="undeploy.asadmin"/>
-
-        <antcall target="deploy.asadmin"/>
-
-        <antcall target="check.original.config.with.no.customization">
-            <param name="log.id" value="7"/>
-        </antcall>
-
-
-        <!-- undeploy for the last time. We're done. -->
-        <antcall target="undeploy.asadmin"/>
-
-
-    </target>
-
-    <!--
-        Makes sure the app's configuration matches how it
-        was when first deployed, before any customization.
-    -->
-    <target name="check.original.config.with.no.customization">
-        <antcall target="run.positive">
-            <param name="log.id" value="${log.id}.1"/>
-            <param name="desc" value="war/appmgt Check app's original config [${log.id}.1]"/>
-            <param name="extra.args" value="${original.config.client.args}"/>
-        </antcall>
-
-        <antcall target="run.negative">
-            <param name="log.id" value="${log.id}.2"/>
-            <param name="desc" value="war/appmgt Make sure a non-existent customization is absent [${log.id}.2]"/>
-            <param name="extra.args" value="-env notThere(java.lang.String)=in-app"/>
-        </antcall>
-
-        <antcall target="run.negative">
-            <param name="log.id" value="${log.id}.3"/>
-            <param name="desc" value="war/appmgt Make sure a customization used during the test is absent when it should be [${log.id}.3]"/>
-            <param name="extra.args" value="${customized.config.client.args}"/>
-        </antcall>
-    </target>
-
-    <!--
-        Make sure that the customizations are
-        reflected with the app's original config.
-    -->
-
-    <target name="check.original.config.with.additive.customization">
-        <antcall target="run.positive">
-            <param name="log.id" value="${log.id}.1"/>
-            <param name="desc" value="war/appmgt Check app's original config plus additive customization [${log.id}.1]"/>
-            <param name="extra.args" value="${original.config.client.args} ${customized.config.client.args}"/>
-        </antcall>
-
-    </target>
-
-    <target name="check.additive.customization">
-        <antcall target="run.positive">
-            <param name="log.id" value="${log.id}.1"/>
-            <param name="desc" value="war/appmgt Check for added env and param customization [${log.id}.1]"/>
-            <param name="extra.args" value="${customized.config.client.args}"/>
-        </antcall>
-    </target>
-
-    <target name="check.added.customization.and.suppressed.original.config">
-        <antcall target="check.additive.customization">
-            <param name="log.id" value="${log.id}.1"/>
-        </antcall>
-        <antcall target="check.suppressed.original.config">
-            <param name="log.id" value="${log.id}.2"/>
-        </antcall>
-    </target>
-
-    <target name="check.suppressed.original.config">
-        <antcall target="run.negative">
-            <param name="log.id" value="${log.id}.1"/>
-            <param name="desc" value="war/appmgt Check for env-entry in the web app's descr being (correctly) ignored [${log.id}.1]"/>
-            <param name="extra.args" value="-env builtin(java.lang.String)=in-app"/>
-        </antcall>
-
-        <antcall target="run.negative">
-            <param name="log.id" value="${log.id}.2"/>
-            <param name="desc" value="war/appmgt Check for context-param in the web app's descr being (correctly) ignored [${log.id}.2]"/>
-            <param name="extra.args" value="-param builtin=in-app"/>
-        </antcall>
-    </target>
-
-    <target name="clobber" depends="clean">
-        <delete file="${portable.war}"/>
-        <delete file="${all.war}"/>
-        <delete file="${deployplan.war}"/>
-        <delete dir="${build}"/>
-    </target>
-
-    <target name="usage">
-        <antcall target="all"/>
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/appmgt/sun-web.xml b/appserver/tests/appserv-tests/devtests/deployment/war/appmgt/sun-web.xml
deleted file mode 100644
index 6fc6e96..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/appmgt/sun-web.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Servlet 2.5//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd">
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<sun-web-app error-url="">
-  <context-root>/war/appmgt</context-root>
-  <class-loader delegate="true"/>
-  <jsp-config>
-    <property name="keepgenerated" value="true">
-      <description>Keep a copy of the generated servlet class' java code.</description>
-    </property>
-  </jsp-config>
-</sun-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/appmgt/web.xml b/appserver/tests/appserv-tests/devtests/deployment/war/appmgt/web.xml
deleted file mode 100644
index a13ed51..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/appmgt/web.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
-    <context-param>
-        <description>This context-param was defined in the web app itself.</description>
-        <param-name>builtin</param-name>
-        <param-value>in-app</param-value>
-    </context-param>
-    <servlet>
-        <servlet-name>TestServlet</servlet-name>
-        <servlet-class>appmgttest.TestServlet</servlet-class>
-    </servlet>
-    <servlet-mapping>
-        <servlet-name>TestServlet</servlet-name>
-        <url-pattern>/*</url-pattern>
-    </servlet-mapping>
-    <session-config>
-        <session-timeout>
-            30
-        </session-timeout>
-    </session-config>
-    <welcome-file-list>
-        <welcome-file>index.jsp</welcome-file>
-        </welcome-file-list>
-    <env-entry>
-        <description>This env-entry was defined in the web app app itself.</description>
-        <env-entry-name>builtin</env-entry-name>
-        <env-entry-type>java.lang.String</env-entry-type>
-        <env-entry-value>in-app</env-entry-value>
-    </env-entry>
-    </web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/build.xml b/appserver/tests/appserv-tests/devtests/deployment/war/build.xml
index 7fdda32..97c39b0 100644
--- a/appserver/tests/appserv-tests/devtests/deployment/war/build.xml
+++ b/appserver/tests/appserv-tests/devtests/deployment/war/build.xml
@@ -26,29 +26,11 @@
     &commonBuild;
 
     <target name="private-all">
-        <!--ant dir="webservices" target="private-all">
-            <property name="build" value="${build}/webservices"/>
-        </ant-->
-        <ant dir="servletonly" target="private-all">
-            <property name="build" value="${build}/servletonly"/>
-        </ant>
-        <ant dir="jsponly" target="private-all">
-            <property name="build" value="${build}/jsponly"/>
-        </ant>
-        <ant dir="htmlonly" target="private-all">
-            <property name="build" value="${build}/htmlonly"/>
-        </ant>
-        <ant dir="webinflib" target="private-all">
-            <property name="build" value="${build}/webinflib"/>
-        </ant>
         <ant dir="deploydir" target="private-all">
             <property name="build" value="${build}/deploydir"/>
         </ant>
-        <ant dir="nojarexpansion" target="private-all">
-            <property name="build" value="${build}/nojarexpansion"/>
-        </ant>
-        <ant dir="appmgt" target="private-all">
-            <property name="build" value="${build}/appmgt"/>
+        <ant dir="virtualserver" target="private-all">
+            <property name="build" value="${build}/virtualserver"/>
         </ant>
     </target>
 </project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/deploydir/build.xml b/appserver/tests/appserv-tests/devtests/deployment/war/deploydir/build.xml
index f5d5667..f64f004 100644
--- a/appserver/tests/appserv-tests/devtests/deployment/war/deploydir/build.xml
+++ b/appserver/tests/appserv-tests/devtests/deployment/war/deploydir/build.xml
@@ -129,7 +129,7 @@
             <jvmarg value="-Dorg.omg.CORBA.ORBInitialPort=${orb.port}"/>
 
             <classpath>
-                <path location="${inst}/lib/j2ee.jar"/>
+                <path location="${inst}/lib/javaee.jar"/>
                 <path location="${build}/${testName}/WEB-INF/classes"/>
             </classpath>
 
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/htmlonly/TestClient.java b/appserver/tests/appserv-tests/devtests/deployment/war/htmlonly/TestClient.java
deleted file mode 100644
index 431c3fd..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/htmlonly/TestClient.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package htmlonly.client;
-
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.IOException;
-import java.net.HttpURLConnection;
-import java.net.URL;
-
-public class TestClient {
-
-    public static void main (String[] args) {
-        TestClient client = new TestClient();
-        client.doTest(args);
-    }
-
-    public void doTest(String[] args) {
-
-        String url = args[0];
-        boolean testPositive = (Boolean.valueOf(args[1])).booleanValue();
-        try {
-            log("Test: devtests/deployment/war/htmlonly");
-            int code = invokeServlet(url);
-            report(code, testPositive);
-        } catch (IOException ex) {
-            if (testPositive) {
-                ex.printStackTrace();
-                fail();
-            } else {
-                log("Caught EXPECTED IOException: " + ex);
-                pass();
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    private int invokeServlet(String url) throws Exception {
-        log("Invoking URL = " + url);
-        URL u = new URL(url);
-        HttpURLConnection c1 = (HttpURLConnection)u.openConnection();
-        int code = c1.getResponseCode();
-        InputStream is = c1.getInputStream();
-        BufferedReader input = new BufferedReader (new InputStreamReader(is));
-        String line = null;
-        while ((line = input.readLine()) != null) {
-            log(line);
-        }
-        return code;
-    }
-
-    private void report(int code, boolean testPositive) {
-        if (testPositive) { //expect return code 200
-            if(code != 200) {
-                log("Incorrect return code: " + code);
-                fail();
-            } else {
-                log("Correct return code: " + code);
-                pass();
-            }
-        } else {
-            if(code != 200) { //expect return code !200
-                log("Correct return code: " + code);
-                pass();
-            } else {
-                log("Incorrect return code: " + code);
-                fail();
-            }
-        }
-    }
-
-    private void log(String message) {
-        System.out.println("[war.client.Client]:: " + message);
-    }
-
-    private void pass() {
-        log("PASSED: devtests/deployment/war/htmlonly");
-        System.exit(0);
-    }
-
-    private void fail() {
-        log("FAILED: devtests/deployment/war/htmlonly");
-        System.exit(-1);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/htmlonly/build.xml b/appserver/tests/appserv-tests/devtests/deployment/war/htmlonly/build.xml
deleted file mode 100644
index 250f821..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/htmlonly/build.xml
+++ /dev/null
@@ -1,238 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="htmlonlyApp" default="usage" basedir=".">
-
-    &commonBuild;
-
-    <property name="contextRoot" value="war"/>
-    <property name="testName" value="htmlonly"/>
-
-    <target name="prepare" depends="init">
-        <property name="portable.war" value="${build}/${testName}-portable.war"/>
-        <property name="all.war" value="${build}/${testName}.war"/>
-        <property name="deployplan.jar" value="${build}/${testName}-deployplan.jar"/>
-        <mkdir dir="${build}"/>
-    </target>
-
-    <target name="compile" depends="prepare">
-        <javac srcdir="."
-               destdir="${build}"
-               debug="on"
-               failonerror="true">
-            <classpath refid="test.compile.classpath"/>
-        </javac>
-    </target>
-
-    <target name="assemble" depends="prepare">
-        <war destfile="${portable.war}" webxml="web.xml">
-            <fileset dir="." includes="*.html"/>
-        </war>
-        <jar destfile="${deployplan.jar}">
-            <fileset dir="${basedir}" includes="sun-web.xml"/>
-        </jar>
-        <war destfile="${all.war}" webxml="web.xml">
-            <webinf dir="." includes="sun-web.xml"/>
-            <fileset dir="." includes="*.html"/>
-        </war>
-    </target>
-
-    <target name="deploy.asadmin" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="${all.war}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.asadmin" depends="prepare">
-        <antcall target="common.redeploy.asadmin">
-            <param name="arg.list" value="${all.war}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.asadmin">
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="${testName}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="enable.asadmin">
-        <antcall target="common.enable.asadmin">
-            <param name="arg.list"
-                   value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="disable.asadmin">
-        <antcall target="common.disable.asadmin">
-            <param name="arg.list"
-                   value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.jsr88" depends="prepare">
-        <antcall target="common.deploy.jsr88">
-            <param name="arg.list" value="${portable.war} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.jsr88" depends="prepare">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="redeploy"/>
-            <param name="arg.list" value="htmlonly-portable ${portable.war} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.jsr88">
-        <antcall target="common.undeploy.jsr88">
-            <param name="arg.list" value="htmlonly-portable"/>
-        </antcall>
-    </target>
-
-    <target name="start.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="start"/>
-            <param name="arg.list" value="htmlonly-portable"/>
-        </antcall>
-    </target>
-
-    <target name="stop.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="stop"/>
-            <param name="arg.list" value="htmlonly-portable"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.autodeploy">
-    </target>
-
-    <target name="run" depends="run.positive"/>
-
-    <target name="run.positive" depends="setHttpPort">
-        <antcall target="common.run.positive">
-            <param name="link" value="${contextRoot}/${testName}"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="run.negative" depends="setHttpPort">
-        <antcall target="common.run.negative">
-            <param name="link" value="${contextRoot}/${testName}"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="runclient" depends="compile">
-        <echo message="TestClient ${arg.list}"/>
-        <javaWithResult
-            fork="true"
-            failonerror="false"
-            jvm="${JAVA}"
-            classname="htmlonly.client.TestClient"
-            output="${build}/${log.id}.output.log"
-            resultproperty="result">
-            <jvmarg value="-Dorg.omg.CORBA.ORBInitialHost=${http.host}"/>
-            <jvmarg value="-Dorg.omg.CORBA.ORBInitialPort=${orb.port}"/>
-
-            <classpath>
-                <path location="${inst}/lib/j2ee.jar"/>
-                <path location="${build}"/>
-            </classpath>
-
-            <arg line="${arg.list}"/>
-        </javaWithResult>
-
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/${log.id}.output.log"/>
-        </antcall>
-    </target>
-
-    <target name="private-all">
-        <antcall target="assemble"/>
-
-        <antcall target="deploy.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="1"/>
-            <param name="desc" value="war/htmlonly Test asadmin deploy"/>
-        </antcall>
-
-        <antcall target="redeploy.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="2"/>
-            <param name="desc" value="war/htmlonly Test asadmin redeploy"/>
-        </antcall>
-
-        <antcall target="disable.asadmin"/>
-        <antcall target="run.negative">
-            <param name="log.id" value="3"/>
-            <param name="desc" value="war/htmlonly Test asadmin disable"/>
-        </antcall>
-
-        <antcall target="enable.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="4"/>
-            <param name="desc" value="war/htmlonly Test asadmin enable"/>
-        </antcall>
-        <antcall target="undeploy.asadmin"/>
-
-        <antcall target="deploy.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="5"/>
-            <param name="desc" value="war/htmlonly Test jsr88 deploy"/>
-        </antcall>
-
-        <antcall target="stop.jsr88"/>
-        <antcall target="run.negative">
-            <param name="log.id" value="6"/>
-            <param name="desc" value="war/htmlonly Test jsr88 stopped state"/>
-        </antcall>
-
-        <antcall target="start.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="7"/>
-            <param name="desc" value="war/htmlonly Test jsr88 started state"/>
-        </antcall>
-
-        <antcall target="redeploy.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="8"/>
-            <param name="desc" value="war/htmlonly Test jsr88 redeploy"/>
-        </antcall>
-
-        <antcall target="undeploy.jsr88"/>
-    </target>
-
-    <target name="clobber" depends="clean">
-        <delete file="${portable.war}"/>
-        <delete file="${all.war}"/>
-        <delete file="${deployplan.war}"/>
-        <delete dir="${build}"/>
-    </target>
-
-    <target name="usage">
-        <antcall target="all"/>
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/htmlonly/index.html b/appserver/tests/appserv-tests/devtests/deployment/war/htmlonly/index.html
deleted file mode 100644
index 27361f8..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/htmlonly/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<html>
-<head>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<title>HTML Only Test</title>
-</head>
-<body>
-<p>
-This is a simple HTML page used for HTML only deployment unit test
-</p>
-What else can  be put ?
-</body>
-</html>
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/htmlonly/sun-web.xml b/appserver/tests/appserv-tests/devtests/deployment/war/htmlonly/sun-web.xml
deleted file mode 100644
index af121f2..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/htmlonly/sun-web.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 Servlet 2.4//EN' 'http://www.sun.com/software/sunone/appserver/dtds/sun-web-app_2_4-0.dtd'>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<sun-web-app>
-  <context-root>war/htmlonly</context-root>
-  <session-config>
-    <session-manager/>
-  </session-config>
-  <class-loader delegate="true"/>
-  <jsp-config/>
-</sun-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/htmlonly/web.xml b/appserver/tests/appserv-tests/devtests/deployment/war/htmlonly/web.xml
deleted file mode 100644
index 7633c90..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/htmlonly/web.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<web-app version="2.4"
-         xmlns="http://java.sun.com/xml/ns/j2ee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-  <display-name>htmlonly</display-name>
-  <welcome-file-list>
-     <welcome-file>index.html</welcome-file>
-  </welcome-file-list>
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/jsponly/TestClient.java b/appserver/tests/appserv-tests/devtests/deployment/war/jsponly/TestClient.java
deleted file mode 100644
index 1cf017b..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/jsponly/TestClient.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package jsponly.client;
-
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.IOException;
-import java.net.HttpURLConnection;
-import java.net.URL;
-
-public class TestClient {
-
-    public static void main (String[] args) {
-        TestClient client = new TestClient();
-        client.doTest(args);
-    }
-
-    public void doTest(String[] args) {
-
-        String url = args[0];
-        boolean testPositive = (Boolean.valueOf(args[1])).booleanValue();
-        try {
-            log("Test: devtests/deployment/war/jsponly");
-            int code = invokeServlet(url);
-            report(code, testPositive);
-        } catch (IOException ex) {
-            if (testPositive) {
-                ex.printStackTrace();
-                fail();
-            } else {
-                log("Caught EXPECTED IOException: " + ex);
-                pass();
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    private int invokeServlet(String url) throws Exception {
-        log("Invoking URL = " + url);
-        URL u = new URL(url);
-        HttpURLConnection c1 = (HttpURLConnection)u.openConnection();
-        int code = c1.getResponseCode();
-        InputStream is = c1.getInputStream();
-        BufferedReader input = new BufferedReader (new InputStreamReader(is));
-        String line = null;
-        while ((line = input.readLine()) != null) {
-            log(line);
-        }
-        return code;
-    }
-
-    private void report(int code, boolean testPositive) {
-        if (testPositive) { //expect return code 200
-            if(code != 200) {
-                log("Incorrect return code: " + code);
-                fail();
-            } else {
-                log("Correct return code: " + code);
-                pass();
-            }
-        } else {
-            if(code != 200) { //expect return code !200
-                log("Correct return code: " + code);
-                pass();
-            } else {
-                log("Incorrect return code: " + code);
-                fail();
-            }
-        }
-    }
-
-    private void log(String message) {
-        System.err.println("[war.client.Client]:: " + message);
-    }
-
-    private void pass() {
-        log("PASSED: devtests/deployment/war/jsponly");
-        System.exit(0);
-    }
-
-    private void fail() {
-        log("FAILED: devtests/deployment/war/jsponly");
-        System.exit(-1);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/jsponly/build.xml b/appserver/tests/appserv-tests/devtests/deployment/war/jsponly/build.xml
deleted file mode 100644
index d0769a0..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/jsponly/build.xml
+++ /dev/null
@@ -1,218 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="jsponlyApp" default="usage" basedir=".">
-
-    &commonBuild;
-    <property name="contextRoot" value="war"/>
-    <property name="testName" value="jsponly"/>
-
-    <target name="prepare" depends="init">
-        <property name="portable.war" value="${build}/${testName}-portable.war"/>
-        <property name="all.war" value="${build}/${testName}.war"/>
-        <property name="deployplan.jar" value="${build}/${testName}-deployplan.jar"/>
-        <mkdir dir="${build}"/>
-    </target>
-
-    <target name="compile" depends="prepare">
-        <javac srcdir="."
-               destdir="${build}"
-               debug="on"
-               failonerror="true">
-            <classpath refid="test.compile.classpath"/>
-        </javac>
-    </target>
-
-    <target name="assemble" depends="prepare">
-        <war destfile="${portable.war}" webxml="web.xml">
-            <fileset dir="." includes="*.jsp"/>
-        </war>
-        <jar destfile="${deployplan.jar}">
-            <fileset dir="${basedir}" includes="glassfish-web.xml"/>
-        </jar>
-        <war destfile="${all.war}" webxml="web.xml">
-            <webinf dir="." includes="glassfish-web.xml"/>
-            <fileset dir="." includes="*.jsp"/>
-        </war>
-    </target>
-
-    <target name="deploy.asadmin" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="${all.war}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.asadmin" depends="prepare">
-        <antcall target="common.redeploy.asadmin">
-            <param name="arg.list" value="${all.war}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.asadmin">
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="${testName}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.jsr88" depends="prepare">
-        <antcall target="common.deploy.jsr88">
-            <param name="arg.list" value="${portable.war} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.jsr88" depends="prepare">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="redeploy"/>
-            <param name="arg.list" value="jsponly-portable ${portable.war} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.jsr88">
-        <antcall target="common.undeploy.jsr88">
-            <param name="arg.list" value="jsponly-portable"/>
-        </antcall>
-    </target>
-
-    <target name="start.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="start"/>
-            <param name="arg.list" value="jsponly-portable"/>
-        </antcall>
-    </target>
-
-    <target name="stop.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="stop"/>
-            <param name="arg.list" value="jsponly-portable"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.autodeploy">
-    </target>
-
-    <target name="run" depends="run.positive"/>
-
-    <target name="run.positive" depends="setHttpPort">
-        <antcall target="common.run.positive">
-            <param name="link" value="${contextRoot}/${testName}"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="run.negative" depends="setHttpPort">
-        <antcall target="common.run.negative">
-            <param name="link" value="${contextRoot}/${testName}"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="runclient" depends="compile">
-        <javaWithResult
-                fork="true"
-                failonerror="false"
-                jvm="${JAVA}"
-                classname="jsponly.client.TestClient"
-                output="${build}/${log.id}.output.log"
-                resultproperty="result">
-            <jvmarg value="-Dorg.omg.CORBA.ORBInitialHost=${http.host}"/>
-            <jvmarg value="-Dorg.omg.CORBA.ORBInitialPort=${orb.port}"/>
-
-            <classpath>
-               <path refid="gfv3.classpath"/>
-               <path location="${build}"/>
-            </classpath>
-
-            <arg line="${arg.list}"/>
-        </javaWithResult>
-
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/${log.id}.output.log"/>
-        </antcall>
-    </target>
-
-    <target name="private-all">
-        <antcall target="assemble"/>
-        <antcall target="deploy.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="1"/>
-            <param name="desc" value="war/jsponly Test asadmin deploy"/>
-        </antcall>
-
-        <antcall target="redeploy.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="2"/>
-            <param name="desc" value="war/jsponly Test asadmin redeploy"/>
-        </antcall>
-        <antcall target="undeploy.asadmin"/>
-
-        <antcall target="deploy.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="3"/>
-            <param name="desc" value="war/jsponly Test jsr88 deploy"/>
-        </antcall>
-
-        <antcall target="stop.jsr88"/>
-        <antcall target="run.negative">
-            <param name="log.id" value="4"/>
-            <param name="desc" value="war/jsponly Test jsr88 stopped state"/>
-        </antcall>
-
-
-        <antcall target="start.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="5"/>
-            <param name="desc" value="war/jsponly Test jsr88 started state"/>
-        </antcall>
-
-        <antcall target="stop.jsr88"/>
-        <antcall target="redeploy.jsr88"/>
-        <antcall target="run.negative">
-            <param name="log.id" value="6"/>
-            <param name="desc" value="war/jsponly Test jsr88 redeploy stop"/>
-        </antcall>
-
-        <antcall target="start.jsr88"/>
-        <antcall target="redeploy.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="7"/>
-            <param name="desc" value="war/jsponly Test jsr88 redeploy start"/>
-        </antcall>
-
-        <antcall target="undeploy.jsr88"/>
-    </target>
-
-    <target name="clobber" depends="clean">
-        <delete file="${portable.war}"/>
-        <delete file="${all.war}"/>
-        <delete file="${deployplan.war}"/>
-        <delete dir="${build}"/>
-    </target>
-
-    <target name="usage">
-        <antcall target="all"/>
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/jsponly/glassfish-web.xml b/appserver/tests/appserv-tests/devtests/deployment/war/jsponly/glassfish-web.xml
deleted file mode 100644
index 20c1506..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/jsponly/glassfish-web.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<glassfish-web-app>
-  <context-root>war/jsponly</context-root>
-  <session-config>
-    <session-manager/>
-  </session-config>
-  <class-loader delegate="true"/>
-  <jsp-config/>
-</glassfish-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/jsponly/header.jsp b/appserver/tests/appserv-tests/devtests/deployment/war/jsponly/header.jsp
deleted file mode 100644
index e78f2d8..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/jsponly/header.jsp
+++ /dev/null
@@ -1,27 +0,0 @@
-<%--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
---%>
-
-<table cellpadding="10" width="100%">
-   <tr bgcolor="#333333">
-      <td align="right">
-         <font face="sans-serif" color="#FFFFFF" size="+2">
-            JSP Only test header
-         </font>
-      </td>
-   </tr>
-</table>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/jsponly/index.jsp b/appserver/tests/appserv-tests/devtests/deployment/war/jsponly/index.jsp
deleted file mode 100644
index f87cc49..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/jsponly/index.jsp
+++ /dev/null
@@ -1,31 +0,0 @@
-<%--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
---%>
-
-<html>
-<head>
-<title>JSP Only Test</title>
-</head>
-<body>
-<%@ include file="header.jsp" %>
-<p>
-This is a simple JSP page with one simple include used for JSP only deployment unit test
-</p>
-What else can  be put ?
-</body>
-</html>
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/jsponly/web.xml b/appserver/tests/appserv-tests/devtests/deployment/war/jsponly/web.xml
deleted file mode 100644
index 963fd1c..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/jsponly/web.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<web-app version="2.4"
-         xmlns="http://java.sun.com/xml/ns/j2ee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-  <display-name>jsponly</display-name>
-  <welcome-file-list>
-     <welcome-file>index.jsp</welcome-file>
-  </welcome-file-list>
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/nojarexpansion/TestClient.java b/appserver/tests/appserv-tests/devtests/deployment/war/nojarexpansion/TestClient.java
deleted file mode 100644
index 80f4e67..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/nojarexpansion/TestClient.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package webinflib.client;
-
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.IOException;
-import java.net.HttpURLConnection;
-import java.net.URL;
-
-public class TestClient {
-
-    public static void main (String[] args) {
-        TestClient client = new TestClient();
-        client.doTest(args);
-    }
-
-    public void doTest(String[] args) {
-
-        String url = args[0];
-        boolean testPositive = (Boolean.valueOf(args[1])).booleanValue();
-        try {
-            log("Test: devtests/deployment/war/nojarexpansion");
-            int code = invokeServlet(url);
-            report(code, testPositive);
-        } catch (IOException ex) {
-            if (testPositive) {
-                ex.printStackTrace();
-                fail();
-            } else {
-                log("Caught EXPECTED IOException: " + ex);
-                pass();
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    private int invokeServlet(String url) throws Exception {
-        log("Invoking URL = " + url);
-        URL u = new URL(url);
-        HttpURLConnection c1 = (HttpURLConnection)u.openConnection();
-        int code = c1.getResponseCode();
-        InputStream is = c1.getInputStream();
-        BufferedReader input = new BufferedReader (new InputStreamReader(is));
-        String line = null;
-        while ((line = input.readLine()) != null) {
-            log(line);
-        }
-        return code;
-    }
-
-    private void report(int code, boolean testPositive) {
-        if (testPositive) { //expect return code 200
-            if(code != 200) {
-                log("Incorrect return code: " + code);
-                fail();
-            } else {
-                log("Correct return code: " + code);
-                pass();
-            }
-        } else {
-            if(code != 200) { //expect return code !200
-                log("Correct return code: " + code);
-                pass();
-            } else {
-                log("Incorrect return code: " + code);
-                fail();
-            }
-        }
-    }
-
-    private void log(String message) {
-        System.out.println("[war.client.Client]:: " + message);
-    }
-
-    private void pass() {
-        log("PASSED: devtests/deployment/war/nojarexpansion");
-        System.exit(0);
-    }
-
-    private void fail() {
-        log("FAILED: devtests/deployment/war/nojarexpansion");
-        System.exit(-1);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/nojarexpansion/TestProp.xml b/appserver/tests/appserv-tests/devtests/deployment/war/nojarexpansion/TestProp.xml
deleted file mode 100644
index 589e9be..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/nojarexpansion/TestProp.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<project name="changeme" default="all" basedir=".">
-    <target name="all">
-        <antcall target="ensure.no.file">
-                <param name="file" value="/tim"/>
-          </antcall>
-
-          <antcall target="ensure.no.file">
-                <param name="file" value="/tim/jjjj"/>
-          </antcall>
-    </target>
-
-    <target name="ensure.no.file">
-        <available file="${file}" property="result" value="1"/>
-          <condition property="result" value="0">
-                <not>
-                        <isset property="result"/>
-                </not>
-          </condition>
-        <echo>Result for file ${file}: ${result}</echo>
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/nojarexpansion/TestServlet.java b/appserver/tests/appserv-tests/devtests/deployment/war/nojarexpansion/TestServlet.java
deleted file mode 100644
index b721e97..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/nojarexpansion/TestServlet.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package webinflib;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-import dummypkg.DummyLib;
-
-public class TestServlet extends HttpServlet
-{
-    public void
-    init () throws ServletException
-    {
-        super.init();
-    }
-
-    public void
-    service (HttpServletRequest request, HttpServletResponse response)
-        throws ServletException, IOException
-    {
-        try {
-                        DummyLib d = new DummyLib();
-            PrintWriter out = response.getWriter();
-            response.setContentType("text/html");
-            out.println("<html>");
-            out.println("<head>");
-            out.println("<title>TestServlet</title>");
-            out.println("</head>");
-            out.println("<body>");
-            out.println("<p>");
-            out.println("Dummy Lib returned a String");
-            out.println("</p>");
-            out.println("Value is [" + d.getDummyString() + "]");
-            out.println("</body>");
-            out.println("</html>");
-            out.flush();
-            out.close();
-        } catch (Exception ex) {
-            ex.printStackTrace();
-            ServletException se = new ServletException();
-            se.initCause(ex);
-            throw se;
-        }
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/nojarexpansion/build.xml b/appserver/tests/appserv-tests/devtests/deployment/war/nojarexpansion/build.xml
deleted file mode 100644
index 9437645..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/nojarexpansion/build.xml
+++ /dev/null
@@ -1,271 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="nojarexpansion" default="usage" basedir=".">
-
-    &commonBuild;
-
-    <property name="contextRoot" value="war"/>
-    <property name="testName" value="nojarexpansion"/>
-    <property name="file.to.check" value="${inst}/domains/domain1/applications/j2ee-modules/${testName}/dummypkg"/>
-    <property name="file.to.check.jsr88" value="${inst}/domains/domain1/applications/j2ee-modules/${testName}-portable/dummypkg"/>
-
-    <target name="prepare" depends="init">
-        <property name="portable.war" value="${build}/${testName}-portable.war"/>
-        <property name="all.war" value="${build}/${testName}.war"/>
-        <property name="deployplan.jar" value="${build}/${testName}-deployplan.jar"/>
-        <mkdir dir="${build}"/>
-    </target>
-
-    <target name="compile" depends="prepare">
-        <javac srcdir="dummylib"
-               destdir="${build}"
-               debug="on"
-               failonerror="true">
-        </javac>
-        <jar jarfile="${build}/dummy.jar" basedir="${build}"/>
-        <javac srcdir="."
-               destdir="${build}"
-               debug="on"
-               failonerror="true">
-            <classpath>
-                <path refid="gfv3.classpath"/>
-                <path location="${inst}/jdk/lib/tools.jar"/>
-                <path location="${dummy.jar}"/>
-            </classpath >
-        </javac>
-    </target>
-
-    <target name="assemble" depends="compile">
-        <war destfile="${portable.war}" webxml="web.xml">
-            <lib dir="${build}">
-                <include name="dummy.jar" />
-            </lib>
-            <classes dir="${build}">
-                <exclude name="dummy.jar" />
-                <exclude name="**/dummypkg/*" />
-                <exclude name="**/client/*" />
-            </classes>
-        </war>
-        <jar destfile="${deployplan.jar}">
-            <fileset dir="${basedir}" includes="sun-web.xml"/>
-        </jar>
-        <war destfile="${all.war}" webxml="web.xml">
-            <webinf dir="." includes="sun-web.xml"/>
-            <lib dir="${build}">
-                <include name="dummy.jar" />
-            </lib>
-            <classes dir="${build}">
-                <exclude name="dummy.jar" />
-                <exclude name="**/dummypkg/*" />
-                <exclude name="**/client/*" />
-            </classes>
-        </war>
-    </target>
-
-    <target name="deploy.asadmin" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="${all.war}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.asadmin" depends="prepare">
-        <antcall target="common.redeploy.asadmin">
-            <param name="arg.list" value="${all.war}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.asadmin">
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="${testName}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.jsr88" depends="prepare">
-        <antcall target="common.deploy.jsr88">
-            <param name="arg.list" value="${portable.war} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.jsr88" depends="prepare">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="redeploy"/>
-            <param name="arg.list" value="${testName}-portable ${portable.war} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.jsr88">
-        <antcall target="common.undeploy.jsr88">
-            <param name="arg.list" value="${testName}-portable"/>
-        </antcall>
-    </target>
-
-    <target name="start.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="start"/>
-            <param name="arg.list" value="${testName}-portable"/>
-        </antcall>
-    </target>
-
-    <target name="stop.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="stop"/>
-            <param name="arg.list" value="${testName}-portable"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.autodeploy">
-    </target>
-
-    <target name="run" depends="run.positive"/>
-
-    <target name="run.positive" depends="setHttpPort">
-        <antcall target="common.run.positive">
-            <param name="link" value="${contextRoot}/${testName}"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="run.negative" depends="setHttpPort">
-        <antcall target="common.run.negative">
-            <param name="link" value="${contextRoot}/${testName}"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="runclient" depends="init">
-        <echo message="TestClient ${arg.list}"/>
-        <javaWithResult
-            fork="true"
-            failonerror="false"
-            jvm="${JAVA}"
-            classname="webinflib.client.TestClient"
-            output="${build}/${log.id}.output.log"
-            resultproperty="result">
-            <jvmarg value="-Dorg.omg.CORBA.ORBInitialHost=${http.host}"/>
-            <jvmarg value="-Dorg.omg.CORBA.ORBInitialPort=${orb.port}"/>
-
-            <classpath>
-                <path refid="gfv3.classpath"/>
-                <path location="${build}"/>
-            </classpath>
-
-            <arg line="${arg.list}"/>
-        </javaWithResult>
-
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/${log.id}.output.log"/>
-        </antcall>
-    </target>
-
-    <target name="ensure.no.file" depends="init">
-        <antcall target="declare-test">
-            <param name="description" value="${desc}"/>
-        </antcall>
-        <echo>In ensure.no.file
-Current setting of result is ${result}.
-File to check is ${file.to.check}</echo>
-        <available file="${file.to.check}" property="result" value="1"/>
-        <echo>After available check, result is now ${result}</echo>
-          <condition property="result" value="0">
-                <not>
-                        <isset property="result"/>
-                </not>
-          </condition>
-        <echo>After final check of results, value is now ${result}</echo>
-        <antcall target="processResult">
-        </antcall>
-    </target>
-
-
-    <target name="private-all">
-        <antcall target="assemble"/>
-        <antcall target="deploy.asadmin"/>
-
-        <antcall target="run.positive">
-            <param name="log.id" value="1"/>
-            <param name="desc" value="war/nojarexpansion Test asadmin deploy"/>
-        </antcall>
-        <antcall target="ensure.no.file">
-            <param name="log.id" value="2"/>
-            <param name="desc" value="war/nojarexpansion Test verify jar was not expanded after deploy"/>
-        </antcall>
-
-        <antcall target="redeploy.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="2"/>
-            <param name="desc" value="war/nojarexpansion Test asadmin redeploy"/>
-        </antcall>
-        <antcall target="ensure.no.file">
-            <param name="log.id" value="2"/>
-            <param name="desc" value="war/nojarexpansion Test verify jar was not expanded after redeploy"/>
-        </antcall>
-
-        <antcall target="undeploy.asadmin"/>
-
-        <antcall target="deploy.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="3"/>
-            <param name="desc" value="war/nojarexpansionTest jsr88 deploy"/>
-        </antcall>
-        <antcall target="ensure.no.file">
-            <param name="file.to.check" value="${file.to.check.jsr88}"/>
-            <param name="log.id" value="2"/>
-            <param name="desc" value="war/nojarexpansion Test verify jar was not expanded after jsr88 deploy"/>
-        </antcall>
-
-        <antcall target="redeploy.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="6"/>
-            <param name="desc" value="war/nojarexpansion Test jsr88 redeploy"/>
-        </antcall>
-        <antcall target="ensure.no.file">
-            <param name="file.to.check" value="${file.to.check.jsr88}"/>
-            <param name="log.id" value="2"/>
-            <param name="desc" value="war/nojarexpansion Test verify jar was not expanded after jsr88 redeploy"/>
-        </antcall>
-
-        <antcall target="undeploy.jsr88"/>
-    </target>
-
-    <target name="clobber" depends="clean">
-        <delete file="${portable.war}"/>
-        <delete file="${all.war}"/>
-        <delete file="${deployplan.war}"/>
-        <delete dir="${build}"/>
-    </target>
-
-    <target name="usage">
-        <antcall target="all"/>
-    </target>
-
-    <target name="xx" depends="init">
-      <antcall target="ensure.no.file">
-                <param name="file" value="${file.to.check}"/>
-      </antcall>
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/nojarexpansion/dummylib/DummyLib.java b/appserver/tests/appserv-tests/devtests/deployment/war/nojarexpansion/dummylib/DummyLib.java
deleted file mode 100644
index 1a39a4b..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/nojarexpansion/dummylib/DummyLib.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package dummypkg;
-
-public class DummyLib {
-
-        public DummyLib() {}
-
-    public String getDummyString() {
-        return "This is the string from dummy lib";
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/nojarexpansion/sun-web.xml b/appserver/tests/appserv-tests/devtests/deployment/war/nojarexpansion/sun-web.xml
deleted file mode 100644
index 5279cd2..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/nojarexpansion/sun-web.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 Servlet 2.4//EN' 'http://www.sun.com/software/sunone/appserver/dtds/sun-web-app_2_4-0.dtd'>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<sun-web-app>
-  <context-root>war</context-root>
-  <session-config>
-    <session-manager/>
-  </session-config>
-  <class-loader delegate="true"/>
-  <jsp-config/>
-</sun-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/nojarexpansion/web.xml b/appserver/tests/appserv-tests/devtests/deployment/war/nojarexpansion/web.xml
deleted file mode 100644
index 4c74258..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/nojarexpansion/web.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<web-app version="2.4"
-         xmlns="http://java.sun.com/xml/ns/j2ee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-  <display-name>nojarexpansion</display-name>
-  <servlet>
-    <servlet-name>TestServlet</servlet-name>
-    <servlet-class>webinflib.TestServlet</servlet-class>
-    <load-on-startup>0</load-on-startup>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>TestServlet</servlet-name>
-    <url-pattern>/nojarexpansion</url-pattern>
-  </servlet-mapping>
-  <session-config>
-    <session-timeout>54</session-timeout>
-  </session-config>
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/rollingupgrade/README b/appserver/tests/appserv-tests/devtests/deployment/war/rollingupgrade/README
deleted file mode 100644
index 0c9104b..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/rollingupgrade/README
+++ /dev/null
@@ -1,37 +0,0 @@
-The manual steps to test the rolling upgrade (will try to automate later)
-
-cd $SPS_HOME/ee/util
-sh eesetup
-asadmin deploy --target sqe-cluster old/foo.war
-ping old foo's context root on instance 1 (positive test)
-ping old foo's context root on instance 2 (positive test)
-asadmin set sqe-cluster.dynamic-reconfiguration-enabled=false
-asadmin deploy --target domain new/foo.war (upgraded version)
-ping old foo's context root on instance 1(positive test)
-ping new foo's context root on instance 1(negative test)
-ping old foo's context root on instance 2(positive test)
-ping new foo's context root on instance 2(negative test)
-asadmin stop-instance clustered_server_1
-asadmin start-instance clustered_server_1
-ping old foo's context root on instance 1(negative test)
-ping new foo's context root on instance 1 (positive test)
-ping old foo's context root on instance 2 (positive test)
-ping new foo's context root on instance 2 (negative test)
-asadmin stop-instance clustered_server_2
-asadmin start-instance clustered_server_2
-ping old foo's context root on instance 1(negative test)
-ping new foo's context root on instance 1 (positive test)
-ping old foo's context root on instance 2 (negative test)
-ping new foo's context root on instance 2 (positive test)
-asadmin set sqe-cluster.dynamic-reconfiguration-enabled=true
-asadmin deploy --target sqe-cluster bar.war
-ping new foo's context root on instance 1 (positive test)
-ping new foo's context root on instance 2 (positive test)
-ping bar's context root on instance 1 (positive test)
-ping bar's context root on instance 2 (positive test)
-asadmin undeploy --target domain foo
-ping new foo's context root on instance 1 (negative test)
-ping new foo's context root on instance 2 (negative test)
-ping bar's context root on instance 1 (positive test)
-ping bar's context root on instance 2 (positive test)
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/servletonly/META-INF/MANIFEST.MF b/appserver/tests/appserv-tests/devtests/deployment/war/servletonly/META-INF/MANIFEST.MF
deleted file mode 100644
index 1b01187..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/servletonly/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,4 +0,0 @@
-Manifest-Version: 1.0
-Ant-Version: Apache Ant 1.7.0
-Created-By: 1.6.0_07-b06-57 (Apple Inc.)
-Main-Class: not.Here
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/servletonly/TestClient.java b/appserver/tests/appserv-tests/devtests/deployment/war/servletonly/TestClient.java
deleted file mode 100644
index 8f9e224..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/servletonly/TestClient.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package servletonly.client;
-
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.IOException;
-import java.net.HttpURLConnection;
-import java.net.URL;
-
-public class TestClient {
-
-    /* to test .reload look for a changed value from one run to the next */
-    private String changeableValue = null;
-    private String expectedChangeableValue = null;
-
-    public static void main (String[] args) {
-        TestClient client = new TestClient();
-        client.doTest(args);
-    }
-
-    public void doTest(String[] args) {
-
-        String url = args[0];
-        if (args.length > 2) {
-            expectedChangeableValue = args[2];
-        }
-        boolean testPositive = (Boolean.valueOf(args[1])).booleanValue();
-        try {
-            log("Test: devtests/deployment/war/servletonly");
-            int code = invokeServlet(url);
-            report(code, testPositive, expectedChangeableValue, changeableValue);
-        } catch (IOException ex) {
-            if (testPositive) {
-                ex.printStackTrace();
-                fail();
-            } else {
-                log("Caught EXPECTED IOException: " + ex);
-                pass();
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    private int invokeServlet(String url) throws Exception {
-        log("Invoking URL = " + url);
-        URL u = new URL(url);
-        HttpURLConnection c1 = (HttpURLConnection)u.openConnection();
-        int code = c1.getResponseCode();
-        InputStream is = c1.getInputStream();
-        BufferedReader input = new BufferedReader (new InputStreamReader(is));
-        String line = null;
-        while ((line = input.readLine()) != null) {
-            log(line);
-            if (line.startsWith("changeableValue=")) {
-                changeableValue = line.substring("changeableValue=".length());
-            }
-        }
-        return code;
-    }
-
-    private void report(int code, boolean testPositive, String expectedChangeableValue, String changeableValue) {
-        if (testPositive) { //expect return code 200
-            if(code != 200) {
-                log("Incorrect return code: " + code);
-                fail();
-            } else {
-                log("Correct return code: " + code);
-                if (expectedChangeableValue != null && expectedChangeableValue.length() > 0 &&
-                        ! expectedChangeableValue.equals("${extra.args}")) {
-                    if (expectedChangeableValue.equals(changeableValue)) {
-                        log("Correct changeable value: " + changeableValue);
-                        pass();
-                    } else {
-                        log("Incorrect changeable value: expected " + expectedChangeableValue + " but found " + changeableValue);
-                        fail();
-                    }
-                } else {
-                    // No expected changeable value to check.
-                    pass();
-                }
-            }
-        } else {
-            if(code != 200) { //expect return code !200
-                log("Correct return code: " + code);
-                pass();
-            } else {
-                log("Incorrect return code: " + code);
-                fail();
-            }
-        }
-    }
-
-    private void log(String message) {
-        System.err.println("[war.client.Client]:: " + message);
-    }
-
-    private void pass() {
-        log("PASSED: devtests/deployment/war/servletonly");
-        System.exit(0);
-    }
-
-    private void fail() {
-        log("FAILED: devtests/deployment/war/servletonly");
-        System.exit(-1);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/servletonly/TestServlet.java b/appserver/tests/appserv-tests/devtests/deployment/war/servletonly/TestServlet.java
deleted file mode 100644
index e70e0ec..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/servletonly/TestServlet.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package servletonly;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-public class TestServlet extends HttpServlet
-{
-    public void
-    init () throws ServletException
-    {
-        super.init();
-        log("init()...");
-    }
-
-    public void
-    service (HttpServletRequest request, HttpServletResponse response)
-        throws ServletException, IOException
-    {
-        log("service()...");
-        try {
-            Context ic = new InitialContext();
-
-            //test: looking up the env-entry
-            String name = (String) ic.lookup("java:comp/env/name");
-            Integer value = (Integer) ic.lookup("java:comp/env/value");
-            log("[" + name + "] = [" + value + "]");
-
-            /*
-             * The following line will compile correctly only when the ant
-             * devtest is running.  The ChangeableClass class is generated
-             * by the ant task (two different ways at two different points
-             * in the processing).
-             */
-            final String changeableValue = ChangeableClass.changeableValue();
-            PrintWriter out = response.getWriter();
-            response.setContentType("text/html");
-            out.println("<html>");
-            out.println("<head>");
-            out.println("<title>TestServlet</title>");
-            out.println("</head>");
-            out.println("<body>");
-            out.println("<p>");
-            out.println("So what is your lucky number?");
-            out.println("</p>");
-            out.println("Mine is [" + value + "]");
-            out.println("<p>");
-            out.println("changeableValue=" + changeableValue);
-            out.println("</body>");
-            out.println("</html>");
-            out.flush();
-            out.close();
-
-        } catch (Exception ex) {
-            ex.printStackTrace();
-            ServletException se = new ServletException();
-            se.initCause(ex);
-            throw se;
-        }
-    }
-
-    public void log (String message) {
-       System.out.println("[war.servletonly.TestServlet]:: " + message);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/servletonly/alt-glassfish-web.xml b/appserver/tests/appserv-tests/devtests/deployment/war/servletonly/alt-glassfish-web.xml
deleted file mode 100644
index e7bd03f..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/servletonly/alt-glassfish-web.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<glassfish-web-app>
-  <context-root>altwar</context-root>
-  <session-config>
-    <session-manager/>
-  </session-config>
-  <class-loader delegate="true"/>
-  <jsp-config/>
-</glassfish-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/servletonly/build.xml b/appserver/tests/appserv-tests/devtests/deployment/war/servletonly/build.xml
deleted file mode 100644
index 4d74acf..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/servletonly/build.xml
+++ /dev/null
@@ -1,404 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="servletonlyApp" default="usage" basedir=".">
-
-    &commonBuild;
-
-    <property name="contextRoot" value="war"/>
-    <property name="altContextRoot" value="altwar"/>
-    <property name="testName" value="servletonly"/>
-    <property name="initial.changeable.value" value="first"/>
-    <property name="second.changeable.value" value="second"/>
-
-    <target name="prepare" depends="init">
-        <property name="portable.war" value="${build}/${testName}-portable.war"/>
-        <property name="all.war" value="${build}/${testName}.war"/>
-        <property name="deployplan.jar" value="${build}/${testName}-deployplan.jar"/>
-        <mkdir dir="${build}"/>
-    </target>
-
-    <target name="compile" depends="prepare">
-        <javac srcdir="."
-               destdir="${build}"
-               debug="on"
-               failonerror="true">
-            <classpath refid="gfv3.classpath" />
-        </javac>
-    </target>
-
-    <target name="generate-changeable-class" depends="prepare">
-        <echo file="${basedir}/ChangeableClass.java">
-package servletonly;
-public class ChangeableClass {
-    public static String changeableValue() {
-        return "${expectedChangeableValue}";
-    }
-}
-        </echo>
-    </target>
-
-    <target name="assemble" depends="compile">
-        <war destfile="${portable.war}" webxml="web.xml">
-            <classes dir="${build}"/>
-        </war>
-        <jar destfile="${deployplan.jar}">
-            <fileset dir="${basedir}" includes="glassfish-web.xml,sun-web.xml"/>
-        </jar>
-
-        <!--
-             The manifest in the next task specifies a Main-Class.  It is not used except
-             to make sure the app client sniffer does not claim the web
-             module simply because it has a Main-Class setting.
-        -->
-        <war destfile="${all.war}" webxml="web.xml" manifest="META-INF/MANIFEST.MF">
-            <webinf dir="." includes="glassfish-web.xml, sun-web.xml"/>
-            <classes dir="${build}" excludes="**-portable.war, **-deployplan.jar"/>
-        </war>
-        <copy file="alt-glassfish-web.xml" tofile="${build}/archive/alt-glassfish-web.xml"/>
-    </target>
-
-    <target name="deploy.asadmin" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="${all.war}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.asadmin.altdd" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="--runtimealtdd ${build}/archive/alt-glassfish-web.xml ${all.war}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.asadmin" depends="prepare">
-        <antcall target="common.redeploy.asadmin">
-            <param name="arg.list" value="${all.war}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-   <target name="v3.redeploy.asadmin" depends="prepare">
-        <antcall target="common.v3.redeploy.asadmin">
-            <param name="arg.list"
-                   value="--name ${testName} ${all.war}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.asadmin">
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="${testName}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="enable.asadmin">
-        <antcall target="common.enable.asadmin">
-            <param name="arg.list"
-                   value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="disable.asadmin">
-        <antcall target="common.disable.asadmin">
-            <param name="arg.list"
-                   value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.jsr88" depends="prepare">
-        <antcall target="common.deploy.jsr88">
-            <param name="arg.list" value="${portable.war} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.jsr88" depends="prepare">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="redeploy"/>
-            <param name="arg.list" value="servletonly-portable ${portable.war} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.jsr88">
-        <antcall target="common.undeploy.jsr88">
-            <param name="arg.list" value="servletonly-portable"/>
-        </antcall>
-    </target>
-
-    <target name="start.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="start"/>
-            <param name="arg.list" value="servletonly-portable"/>
-        </antcall>
-    </target>
-
-    <target name="stop.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="stop"/>
-            <param name="arg.list" value="servletonly-portable"/>
-        </antcall>
-    </target>
-
-    <target name="run" depends="run.positive"/>
-
-    <target name="run.positive" depends="setHttpPort">
-        <property name="extra.args" value=""/>
-        <antcall target="common.run.positive">
-            <param name="link" value="${contextRoot}/${testName}"/>
-            <param name="log.id" value="${log.id}"/>
-            <param name="extra.args" value="${extra.args}"/>
-        </antcall>
-    </target>
-
-    <target name="run.positive.altdd" depends="setHttpPort">
-        <property name="extra.args" value=""/>
-        <antcall target="common.run.positive">
-            <param name="link" value="${altContextRoot}/${testName}"/>
-            <param name="log.id" value="${log.id}"/>
-            <param name="extra.args" value="${extra.args}"/>
-        </antcall>
-    </target>
-
-    <target name="run.negative" depends="setHttpPort">
-        <property name="extra.args" value=""/>
-        <antcall target="common.run.negative">
-            <param name="link" value="${contextRoot}/${testName}"/>
-            <param name="log.id" value="${log.id}"/>
-            <param name="extra.args" value="${extra.args}"/>
-        </antcall>
-    </target>
-
-
-    <target name="runclient" depends="init">
-        <property name="extra.args" value=""/>
-        <echo message="TestClient ${arg.list}"/>
-        <javaWithResult
-            fork="true"
-            failonerror="false"
-            jvm="${JAVA}"
-            classname="servletonly.client.TestClient"
-            output="${build}/${log.id}.output.log"
-            resultproperty="result">
-            <jvmarg value="-Dorg.omg.CORBA.ORBInitialHost=${http.host}"/>
-            <jvmarg value="-Dorg.omg.CORBA.ORBInitialPort=${orb.port}"/>
-
-            <classpath>
-                <path location="${inst}/lib/j2ee.jar"/>
-                <path location="${build}"/>
-            </classpath>
-
-            <arg line="${arg.list}"/>
-        </javaWithResult>
-
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/${log.id}.output.log"/>
-        </antcall>
-    </target>
-
-    <target name="private-all">
-        <antcall target="generate-changeable-class">
-            <param name="expectedChangeableValue" value="${initial.changeable.value}"/>
-        </antcall>
-        <antcall target="assemble"/>
-        <antcall target="deploy.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="1.1"/>
-            <param name="desc" value="war/servletonly Test asadmin deploy"/>
-            <param name="extra.args" value="${initial.changeable.value}"/>
-        </antcall>
-
-        <antcall target="test-reload"/>
-
-        <antcall target="redeploy.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="2"/>
-            <param name="desc" value="war/servletonly Test asadmin redeploy"/>
-        </antcall>
-
-       <antcall target="v3.redeploy.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="3"/>
-            <param name="desc" value="war/servletonly Test v3 asadmin redeploy"/>
-        </antcall>
-
-        <antcall target="disable.asadmin"/>
-        <antcall target="run.negative">
-            <param name="log.id" value="4"/>
-            <param name="desc" value="war/servletonly Test asadmin disable"/>
-        </antcall>
-
-        <antcall target="enable.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="5"/>
-            <param name="desc" value="war/servletonly Test asadmin enable"/>
-        </antcall>
-
-        <antcall target="common.dotted.disable.ref.asadmin">
-            <param name="testName" value="${testName}"/>
-        </antcall>
-        <antcall target="run.negative">
-            <param name="log.id" value="6"/>
-            <param name="desc" value="war/servletonly Test asadmin dotted disable ref"/>
-        </antcall>
-        <antcall target="common.dotted.enable.ref.asadmin">
-            <param name="testName" value="${testName}"/>
-        </antcall>
-        <antcall target="run.positive">
-            <param name="log.id" value="7"/>
-            <param name="desc" value="war/servletonly Test asadmin dotted enableref "/>
-        </antcall>
-        <antcall target="common.dotted.disable.application.asadmin">
-            <param name="testName" value="${testName}"/>
-        </antcall>
-        <antcall target="run.negative">
-            <param name="log.id" value="8"/>
-            <param name="desc" value="war/servletonly Test asadmin dotted disable application"/>
-        </antcall>
-        <antcall target="common.dotted.enable.application.asadmin">
-            <param name="testName" value="${testName}"/>
-        </antcall>
-        <antcall target="run.positive">
-            <param name="log.id" value="9"/>
-            <param name="desc" value="war/servletonly Test asadmin dotted enable application"/>
-        </antcall>
-       <antcall target="common.dotted.disable.application.asadmin">
-            <param name="testName" value="${testName}"/>
-        </antcall>
-        <antcall target="common.dotted.disable.ref.asadmin">
-            <param name="testName" value="${testName}"/>
-        </antcall>
-        <antcall target="run.negative">
-            <param name="log.id" value="10"/>
-            <param name="desc" value="war/servletonly Test asadmin dotted disable ref and application"/>
-        </antcall>
-        <antcall target="common.dotted.enable.application.asadmin">
-            <param name="testName" value="${testName}"/>
-        </antcall>
-        <antcall target="run.negative">
-            <param name="log.id" value="11"/>
-            <param name="desc" value="war/servletonly Test asadmin dotted disable ref and enable application"/>
-        </antcall>
-        <antcall target="common.dotted.disable.application.asadmin">
-            <param name="testName" value="${testName}"/>
-        </antcall>
-       <antcall target="common.dotted.enable.ref.asadmin">
-            <param name="testName" value="${testName}"/>
-       </antcall>
-        <antcall target="run.negative">
-            <param name="log.id" value="12"/>
-            <param name="desc" value="war/servletonly Test asadmin dotted disable application and enable ref"/>
-        </antcall>
-        <antcall target="common.dotted.enable.application.asadmin">
-            <param name="testName" value="${testName}"/>
-        </antcall>
-        <antcall target="run.positive">
-            <param name="log.id" value="13"/>
-            <param name="desc" value="war/servletonly Test asadmin dotted enable application and enable ref"/>
-        </antcall>
-        <antcall target="undeploy.asadmin"/>
-
-        <antcall target="deploy.asadmin.altdd"/>
-        <antcall target="run.positive.altdd">
-            <param name="log.id" value="14"/>
-            <param name="desc" value="war/servletonly Test asadmin deploy with runtime altdd"/>
-        </antcall>
-        <antcall target="undeploy.asadmin"/>
-
-        <antcall target="deploy.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="15"/>
-            <param name="desc" value="war/servletonly Test jsr88 deploy"/>
-        </antcall>
-
-        <antcall target="stop.jsr88"/>
-        <antcall target="run.negative">
-            <param name="log.id" value="16"/>
-            <param name="desc" value="war/servletonly Test jsr88 stopped state"/>
-        </antcall>
-        <antcall target="start.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="17"/>
-            <param name="desc" value="war/servletonly Test jsr88 started state"/>
-        </antcall>
-
-        <antcall target="stop.jsr88"/>
-        <antcall target="redeploy.jsr88"/>
-        <antcall target="run.negative">
-            <param name="log.id" value="18"/>
-            <param name="desc" value="war/servletonly Test jsr88 redeploy stop"/>
-        </antcall>
-
-        <antcall target="start.jsr88"/>
-        <antcall target="redeploy.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="19"/>
-            <param name="desc" value="war/servletonly Test jsr88 redeploy start"/>
-        </antcall>
-
-        <antcall target="undeploy.jsr88"/>
-    </target>
-
-    <target name="test-reload" depends="test-reload-PE"/>
-
-    <!-- test .reload feature -->
-
-    <target name="test-reload-PE" if="PE">
-        <antcall target="generate-changeable-class">
-            <param name="expectedChangeableValue" value="${second.changeable.value}"/>
-        </antcall>
-
-        <antcall target="compile"/>
-
-        <copy file="${build}/servletonly/ChangeableClass.class"
-            overwrite="true"
-            todir="${s1as.home}/domains/domain1/applications/${testName}/WEB-INF/classes/servletonly"/>
-
-        <!-- Make sure the .reload file will have a later timestamp. -->
-        <sleep seconds="2"/>
-
-        <touch file="${s1as.home}/domains/domain1/applications/${testName}/.reload"/>
-
-        <!-- Give the server time to see the .reload file and to redeploy the app. -->
-        <sleep seconds="5"/>
-
-        <antcall target="run.positive">
-            <param name="log.id" value="1.2"/>
-            <param name="desc" value="war/servletonly Test .reload"/>
-            <param name="extra.args" value="${second.changeable.value}"/>
-        </antcall>
-
-    </target>
-
-    <target name="clobber" depends="clean">
-        <delete file="${portable.war}"/>
-        <delete file="${all.war}"/>
-        <delete file="${deployplan.war}"/>
-        <delete dir="${build}"/>
-    </target>
-
-    <target name="usage">
-        <antcall target="all"/>
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/servletonly/glassfish-web.xml b/appserver/tests/appserv-tests/devtests/deployment/war/servletonly/glassfish-web.xml
deleted file mode 100644
index 8a41263..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/servletonly/glassfish-web.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<glassfish-web-app>
-  <context-root>war</context-root>
-  <session-config>
-    <session-manager/>
-  </session-config>
-  <class-loader delegate="true"/>
-  <jsp-config/>
-</glassfish-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/servletonly/sun-web.xml b/appserver/tests/appserv-tests/devtests/deployment/war/servletonly/sun-web.xml
deleted file mode 100644
index b2d9e51..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/servletonly/sun-web.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 Servlet 2.4//EN' 'http://www.sun.com/software/sunone/appserver/dtds/sun-web-app_2_4-0.dtd'>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<sun-web-app>
-  <context-root>foo</context-root>
-  <session-config>
-    <session-manager/>
-  </session-config>
-  <class-loader delegate="true"/>
-  <jsp-config/>
-</sun-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/servletonly/web.xml b/appserver/tests/appserv-tests/devtests/deployment/war/servletonly/web.xml
deleted file mode 100644
index 6af6b4d..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/servletonly/web.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<web-app version="2.4"
-         xmlns="http://java.sun.com/xml/ns/j2ee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-  <display-name>servletonly</display-name>
-  <servlet>
-    <servlet-name>TestServlet</servlet-name>
-    <servlet-class>servletonly.TestServlet</servlet-class>
-    <load-on-startup>0</load-on-startup>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>TestServlet</servlet-name>
-    <url-pattern>/servletonly</url-pattern>
-  </servlet-mapping>
-  <session-config>
-    <session-timeout>54</session-timeout>
-  </session-config>
-  <env-entry>
-    <env-entry-name>name</env-entry-name>
-    <env-entry-type>java.lang.String</env-entry-type>
-    <env-entry-value>LuckyNumber</env-entry-value>
-  </env-entry>
-  <env-entry>
-    <env-entry-name>value</env-entry-name>
-    <env-entry-type>java.lang.Integer</env-entry-type>
-    <env-entry-value>888</env-entry-value>
-  </env-entry>
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/virtualserver/build.xml b/appserver/tests/appserv-tests/devtests/deployment/war/virtualserver/build.xml
index 6aee563..60bc48a 100644
--- a/appserver/tests/appserv-tests/devtests/deployment/war/virtualserver/build.xml
+++ b/appserver/tests/appserv-tests/devtests/deployment/war/virtualserver/build.xml
@@ -132,7 +132,7 @@
             <jvmarg value="-Dorg.omg.CORBA.ORBInitialPort=${orb.port}"/>
 
             <classpath>
-                <path location="${inst}/lib/j2ee.jar"/>
+                <path location="${inst}/lib/javaee.jar"/>
                 <path location="${build}"/>
             </classpath>
 
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/webinflib/TestClient.java b/appserver/tests/appserv-tests/devtests/deployment/war/webinflib/TestClient.java
deleted file mode 100644
index d816e77..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/webinflib/TestClient.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package webinflib.client;
-
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.IOException;
-import java.net.HttpURLConnection;
-import java.net.URL;
-
-public class TestClient {
-
-    public static void main (String[] args) {
-        TestClient client = new TestClient();
-        client.doTest(args);
-    }
-
-    public void doTest(String[] args) {
-
-        String url = args[0];
-        boolean testPositive = (Boolean.valueOf(args[1])).booleanValue();
-        try {
-            log("Test: devtests/deployment/war/webinflib");
-            int code = invokeServlet(url);
-            report(code, testPositive);
-        } catch (IOException ex) {
-            if (testPositive) {
-                ex.printStackTrace();
-                fail();
-            } else {
-                log("Caught EXPECTED IOException: " + ex);
-                pass();
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    private int invokeServlet(String url) throws Exception {
-        log("Invoking URL = " + url);
-        URL u = new URL(url);
-        HttpURLConnection c1 = (HttpURLConnection)u.openConnection();
-        int code = c1.getResponseCode();
-        InputStream is = c1.getInputStream();
-        BufferedReader input = new BufferedReader (new InputStreamReader(is));
-        String line = null;
-        while ((line = input.readLine()) != null) {
-            log(line);
-        }
-        return code;
-    }
-
-    private void report(int code, boolean testPositive) {
-        if (testPositive) { //expect return code 200
-            if(code != 200) {
-                log("Incorrect return code: " + code);
-                fail();
-            } else {
-                log("Correct return code: " + code);
-                pass();
-            }
-        } else {
-            if(code != 200) { //expect return code !200
-                log("Correct return code: " + code);
-                pass();
-            } else {
-                log("Incorrect return code: " + code);
-                fail();
-            }
-        }
-    }
-
-    private void log(String message) {
-        System.out.println("[war.client.Client]:: " + message);
-    }
-
-    private void pass() {
-        log("PASSED: devtests/deployment/war/webinflib");
-        System.exit(0);
-    }
-
-    private void fail() {
-        log("FAILED: devtests/deployment/war/webinflib");
-        System.exit(-1);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/webinflib/TestServlet.java b/appserver/tests/appserv-tests/devtests/deployment/war/webinflib/TestServlet.java
deleted file mode 100644
index b721e97..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/webinflib/TestServlet.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package webinflib;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-import dummypkg.DummyLib;
-
-public class TestServlet extends HttpServlet
-{
-    public void
-    init () throws ServletException
-    {
-        super.init();
-    }
-
-    public void
-    service (HttpServletRequest request, HttpServletResponse response)
-        throws ServletException, IOException
-    {
-        try {
-                        DummyLib d = new DummyLib();
-            PrintWriter out = response.getWriter();
-            response.setContentType("text/html");
-            out.println("<html>");
-            out.println("<head>");
-            out.println("<title>TestServlet</title>");
-            out.println("</head>");
-            out.println("<body>");
-            out.println("<p>");
-            out.println("Dummy Lib returned a String");
-            out.println("</p>");
-            out.println("Value is [" + d.getDummyString() + "]");
-            out.println("</body>");
-            out.println("</html>");
-            out.flush();
-            out.close();
-        } catch (Exception ex) {
-            ex.printStackTrace();
-            ServletException se = new ServletException();
-            se.initCause(ex);
-            throw se;
-        }
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/webinflib/build.xml b/appserver/tests/appserv-tests/devtests/deployment/war/webinflib/build.xml
deleted file mode 100644
index 5084285..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/webinflib/build.xml
+++ /dev/null
@@ -1,235 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="webinflib" default="usage" basedir=".">
-
-    &commonBuild;
-
-    <property name="contextRoot" value="war"/>
-    <property name="testName" value="webinflib"/>
-
-    <target name="prepare" depends="init">
-        <property name="portable.war" value="${build}/${testName}-portable.war"/>
-        <property name="all.war" value="${build}/${testName}.war"/>
-        <property name="deployplan.jar" value="${build}/${testName}-deployplan.jar"/>
-        <mkdir dir="${build}"/>
-    </target>
-
-    <target name="compile" depends="prepare">
-        <javac srcdir="dummylib"
-               destdir="${build}"
-               debug="on"
-               failonerror="true">
-        </javac>
-        <jar jarfile="${build}/dummy.jar" basedir="${build}"/>
-        <javac srcdir="."
-               destdir="${build}"
-               debug="on"
-               failonerror="true">
-            <classpath >
-                <path refid="gfv3.classpath"/>
-                <path location="${inst}/jdk/lib/tools.jar"/>
-                <path location="${dummy.jar}"/>
-            </classpath >
-        </javac>
-    </target>
-
-    <target name="assemble" depends="compile">
-        <war destfile="${portable.war}" webxml="web.xml">
-            <lib dir="${build}">
-                <include name="dummy.jar" />
-            </lib>
-            <classes dir="${build}">
-                <exclude name="dummy.jar" />
-                <exclude name="**/dummypkg/*" />
-                <exclude name="**/client/*" />
-            </classes>
-        </war>
-        <jar destfile="${deployplan.jar}">
-            <fileset dir="${basedir}" includes="sun-web.xml"/>
-        </jar>
-        <war destfile="${all.war}" webxml="web.xml">
-            <webinf dir="." includes="sun-web.xml"/>
-            <lib dir="${build}">
-                <include name="dummy.jar" />
-            </lib>
-            <classes dir="${build}">
-                <exclude name="dummy.jar" />
-                <exclude name="**/dummypkg/*" />
-                <exclude name="**/client/*" />
-            </classes>
-        </war>
-    </target>
-
-    <target name="deploy.asadmin" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="${all.war}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.asadmin" depends="prepare">
-        <antcall target="common.redeploy.asadmin">
-            <param name="arg.list" value="${all.war}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.asadmin">
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="${testName}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.jsr88" depends="prepare">
-        <antcall target="common.deploy.jsr88">
-            <param name="arg.list" value="${portable.war} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.jsr88" depends="prepare">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="redeploy"/>
-            <param name="arg.list" value="webinflib-portable ${portable.war} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.jsr88">
-        <antcall target="common.undeploy.jsr88">
-            <param name="arg.list" value="webinflib-portable"/>
-        </antcall>
-    </target>
-
-    <target name="start.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="start"/>
-            <param name="arg.list" value="webinflib-portable"/>
-        </antcall>
-    </target>
-
-    <target name="stop.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="stop"/>
-            <param name="arg.list" value="webinflib-portable"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.autodeploy">
-    </target>
-
-    <target name="run" depends="run.positive"/>
-
-    <target name="run.positive" depends="setHttpPort">
-        <antcall target="common.run.positive">
-            <param name="link" value="${contextRoot}/${testName}"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="run.negative" depends="setHttpPort">
-        <antcall target="common.run.negative">
-            <param name="link" value="${contextRoot}/${testName}"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="runclient" depends="init">
-        <echo message="TestClient ${arg.list}"/>
-        <javaWithResult
-            fork="true"
-            failonerror="false"
-            jvm="${JAVA}"
-            classname="webinflib.client.TestClient"
-            output="${build}/${log.id}.output.log"
-            resultproperty="result">
-            <jvmarg value="-Dorg.omg.CORBA.ORBInitialHost=${http.host}"/>
-            <jvmarg value="-Dorg.omg.CORBA.ORBInitialPort=${orb.port}"/>
-
-            <classpath>
-                <path location="${inst}/lib/j2ee.jar"/>
-                <path location="${build}"/>
-            </classpath>
-
-            <arg line="${arg.list}"/>
-        </javaWithResult>
-
-        <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/${log.id}.output.log"/>
-        </antcall>
-    </target>
-
-    <target name="private-all">
-        <antcall target="assemble"/>
-        <antcall target="deploy.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="1"/>
-            <param name="desc" value="war/webinflib Test asadmin deploy"/>
-        </antcall>
-
-        <antcall target="redeploy.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="2"/>
-            <param name="desc" value="war/webinflib Test asadmin redeploy"/>
-        </antcall>
-        <antcall target="undeploy.asadmin"/>
-
-        <antcall target="deploy.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="3"/>
-            <param name="desc" value="war/webinflib Test jsr88 deploy"/>
-        </antcall>
-
-        <antcall target="stop.jsr88"/>
-        <antcall target="run.negative">
-            <param name="desc" value="war/webinflib Test jsr88 stopped state"/>
-            <param name="log.id" value="4"/>
-        </antcall>
-
-        <antcall target="start.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="5"/>
-            <param name="desc" value="war/webinflib Test jsr88 started state"/>
-        </antcall>
-
-        <antcall target="redeploy.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="6"/>
-            <param name="desc" value="war/webinflib Test jsr88 redeploy"/>
-        </antcall>
-
-        <antcall target="undeploy.jsr88"/>
-    </target>
-
-    <target name="clobber" depends="clean">
-        <delete file="${portable.war}"/>
-        <delete file="${all.war}"/>
-        <delete file="${deployplan.war}"/>
-        <delete dir="${build}"/>
-    </target>
-
-    <target name="usage">
-        <antcall target="all"/>
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/webinflib/dummylib/DummyLib.java b/appserver/tests/appserv-tests/devtests/deployment/war/webinflib/dummylib/DummyLib.java
deleted file mode 100644
index 1a39a4b..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/webinflib/dummylib/DummyLib.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package dummypkg;
-
-public class DummyLib {
-
-        public DummyLib() {}
-
-    public String getDummyString() {
-        return "This is the string from dummy lib";
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/webinflib/sun-web.xml b/appserver/tests/appserv-tests/devtests/deployment/war/webinflib/sun-web.xml
deleted file mode 100644
index 5279cd2..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/webinflib/sun-web.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 Servlet 2.4//EN' 'http://www.sun.com/software/sunone/appserver/dtds/sun-web-app_2_4-0.dtd'>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<sun-web-app>
-  <context-root>war</context-root>
-  <session-config>
-    <session-manager/>
-  </session-config>
-  <class-loader delegate="true"/>
-  <jsp-config/>
-</sun-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/webinflib/web.xml b/appserver/tests/appserv-tests/devtests/deployment/war/webinflib/web.xml
deleted file mode 100644
index 241168f..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/webinflib/web.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<web-app version="2.4"
-         xmlns="http://java.sun.com/xml/ns/j2ee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-  <display-name>webinflib</display-name>
-  <servlet>
-    <servlet-name>TestServlet</servlet-name>
-    <servlet-class>webinflib.TestServlet</servlet-class>
-    <load-on-startup>0</load-on-startup>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>TestServlet</servlet-name>
-    <url-pattern>/webinflib</url-pattern>
-  </servlet-mapping>
-  <session-config>
-    <session-timeout>54</session-timeout>
-  </session-config>
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/webservices/build.xml b/appserver/tests/appserv-tests/devtests/deployment/war/webservices/build.xml
deleted file mode 100644
index fab18eb..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/webservices/build.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
-]>
-
-<project name="webservices" default="all" basedir=".">
-
-        &commonBuild;
-
-        <target name="private-all">
-                <ant dir="helloservice" target="private-all">
-                        <property name="build" value="${build}/helloservice"/>
-                </ant>
-        </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/webservices/helloservice/build.xml b/appserver/tests/appserv-tests/devtests/deployment/war/webservices/helloservice/build.xml
deleted file mode 100644
index f688edf..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/webservices/helloservice/build.xml
+++ /dev/null
@@ -1,219 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
- <!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<!ENTITY commonBuild SYSTEM "./../../../config/common.xml">
-]>
-
-<project name="HelloServiceWS" default="all" basedir=".">
-
-    &commonBuild;
-    <property name="archivedir" value="${build}/archives"/>
-
-    <property name="testName" value="SayHelloWS"/>
-    <target name="prepare" depends="init">
-        <property name="binary" value="${build}/WEB-INF/classes"/>
-        <property name="wsdl" value="${build}/WEB-INF/wsdl"/>
-        <mkdir dir="${binary}" />
-        <mkdir dir="${wsdl}"/>
-        <property name="portable.war" value="${archivedir}/sayhello-portable.war"/>
-        <property name="all.war" value="${archivedir}/sayhello.war"/>
-        <property name="deployplan.jar" value="${archivedir}/sayhello-deployplan.jar"/>
-    </target>
-
-    <target name="compile" depends="prepare">
-                <javac srcdir="helloservice" destdir="${binary}"
-                        classpath="${inst}/lib/j2ee.jar"/>
-                <echo message="invoking wscompile to generate wsdl file"/>
-                <exec executable="${WSCOMPILE}">
-                    <arg line="-define config-interface.xml  -d ${binary} -nd ${wsdl} -classpath ${binary} -mapping ${build}/mapping.xml"/>
-                 </exec>
-    </target>
-
-    <target name="assemble" depends="compile">
-                <copy file="web.xml" todir="${build}/WEB-INF"/>
-                <copy file="webservices.xml" todir="${build}/WEB-INF"/>
-                <jar destfile="${portable.war}" basedir="${build}"/>
-                <copy file="sun-web.xml" todir="${build}/WEB-INF" failonerror="false"/>
-                <jar destfile="${all.war}" basedir="${build}"/>
-                <jar destfile="${deployplan.jar}">
-                        <fileset dir="${basedir}" includes="sun-web.xml"/>
-                </jar>
-    </target>
-
-    <target name="deploy.asadmin" depends="prepare">
-        <antcall target="common.deploy.asadmin">
-            <param name="arg.list" value="--name ${testName} ${all.war}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-        <echo message="Create client webservices artifacts"/>
-        <exec executable="${WSCOMPILE}">
-                <arg line="-gen:client -keep -d ${binary} -classpath ${binary} config-interface.xml"/>
-        </exec>
-    </target>
-
-    <target name="redeploy.asadmin" depends="prepare">
-        <antcall target="common.redeploy.asadmin">
-            <param name="arg.list" value="--name ${testName} ${all.war}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-        <echo message="Create client webservices artifacts"/>
-        <exec executable="${WSCOMPILE}">
-                <arg line="-gen:client -keep -d ${binary} -classpath ${binary} config-interface.xml"/>
-        </exec>
-    </target>
-
-    <target name="undeploy.asadmin">
-        <antcall target="common.undeploy.asadmin">
-            <param name="arg.list" value="${testName}"/>
-            <param name="testName" value="${testName}"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.jsr88" depends="prepare">
-        <antcall target="common.deploy.jsr88">
-            <param name="arg.list" value="${portable.war} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="redeploy.jsr88" depends="prepare">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="redeploy"/>
-            <param name="arg.list" value="sayhello-portable ${portable.war} ${deployplan.jar}"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy.jsr88">
-        <antcall target="common.undeploy.jsr88">
-            <param name="arg.list" value="sayhello-portable"/>
-        </antcall>
-    </target>
-
-    <target name="start.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="start"/>
-            <param name="arg.list" value="sayhello-portable"/>
-        </antcall>
-    </target>
-
-    <target name="stop.jsr88">
-        <antcall target="common.run.jsr88">
-            <param name="command" value="stop"/>
-            <param name="arg.list" value="sayhello-portable"/>
-        </antcall>
-    </target>
-
-    <target name="deploy.autodeploy">
-    </target>
-
-    <target name="run" depends="run.positive"/>
-
-    <target name="run.positive" depends="setHttpPort">
-        <antcall target="common.run.positive">
-            <param name="link" value="HelloService/HelloService"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="run.negative" depends="setHttpPort">
-        <antcall target="common.run.negative">
-            <param name="link" value="HelloService/HelloService"/>
-            <param name="log.id" value="${log.id}"/>
-        </antcall>
-    </target>
-
-    <target name="runclient" depends="prepare">
-        <javac srcdir="staticstubclient" destdir="${binary}"
-                classpath="${inst}/lib/j2ee.jar:${inst}/lib/webservices-rt.jar:${inst}/lib/webservices-tools.jar"/>
-
-        <javaWithResult
-            fork="true"
-            failonerror="false"
-            jvm="${JAVA}"
-            classname="staticstubclient.SayHelloClient"
-            output="${build}/${log.id}.output.log"
-            resultproperty="result">
-
-
-            <classpath>
-                <path location="${inst}/lib/j2ee.jar"/>
-                <path location="${inst}/lib/webservices-rt.jar"/>
-                <path location="${inst}/lib/webservices-tools.jar"/>
-                <path location="${binary}"/>
-            </classpath>
-
-            <arg line="${arg.list}"/>
-        </javaWithResult>
-
-         <antcall target="processResult">
-            <param name="result" value="${result}"/>
-            <param name="log" value="${build}/${log.id}.output.log"/>
-        </antcall>
-    </target>
-
-    <target name="private-all">
-        <antcall target="assemble"/>
-        <antcall target="deploy.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="1"/>
-            <param name="desc" value="war/webservice Test asadmin deploy"/>
-        </antcall>
-
-        <antcall target="redeploy.asadmin"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="2"/>
-            <param name="desc" value="war/webservice Test asadmin redeploy"/>
-        </antcall>
-        <antcall target="undeploy.asadmin"/>
-
-        <antcall target="deploy.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="3"/>
-            <param name="desc" value="war/webservice Test jsr88 deploy"/>
-        </antcall>
-
-        <antcall target="stop.jsr88"/>
-        <antcall target="run.negative">
-            <param name="log.id" value="4"/>
-            <param name="desc" value="war/webservice Test jsr88 stopped state"/>
-        </antcall>
-
-        <antcall target="start.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="5"/>
-            <param name="desc" value="war/webservice Test jsr88 started state"/>
-        </antcall>
-
-        <antcall target="stop.jsr88"/>
-        <antcall target="redeploy.jsr88"/>
-        <antcall target="run.negative">
-            <param name="log.id" value="6"/>
-            <param name="desc" value="war/webservice Test jsr88 redeploy stop"/>
-        </antcall>
-
-        <antcall target="start.jsr88"/>
-        <antcall target="redeploy.jsr88"/>
-        <antcall target="run.positive">
-            <param name="log.id" value="7"/>
-            <param name="desc" value="war/webservice Test jsr88 redeploy start"/>
-        </antcall>
-        <antcall target="undeploy.jsr88"/>
-    </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/webservices/helloservice/config-interface.xml b/appserver/tests/appserv-tests/devtests/deployment/war/webservices/helloservice/config-interface.xml
deleted file mode 100644
index 894789a..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/webservices/helloservice/config-interface.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<configuration
-  xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
-  <service
-      name="SayHelloService"
-      targetNamespace="urn:DeploymentWebServiceTest"
-      typeNamespace="urn:DeploymentWebServiceTest"
-      packageName="helloservice">
-      <interface name="helloservice.SayHello"/>
-  </service>
-</configuration>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/webservices/helloservice/helloservice/SayHello.java b/appserver/tests/appserv-tests/devtests/deployment/war/webservices/helloservice/helloservice/SayHello.java
deleted file mode 100644
index d715c4f..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/webservices/helloservice/helloservice/SayHello.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
- package helloservice;
-
-import java.rmi.Remote;
-import java.rmi.RemoteException;
-
- /*
-  * This is a minimum WebService interface
-  */
-  public interface SayHello  extends Remote {
-
-          /*
-           * @return a hello string
-           */
-           public String sayHello(String name) throws RemoteException;
-
-  }
-
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/webservices/helloservice/helloservice/SayHelloImpl.java b/appserver/tests/appserv-tests/devtests/deployment/war/webservices/helloservice/helloservice/SayHelloImpl.java
deleted file mode 100644
index 59ac4c8..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/webservices/helloservice/helloservice/SayHelloImpl.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package helloservice;
-
-import java.rmi.RemoteException;
-
-public class SayHelloImpl implements SayHello {
-
-        public String message ="Bonjour ";
-
-        public String sayHello(String s) throws RemoteException {
-                return message + s;
-        }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/webservices/helloservice/staticstubclient/SayHelloClient.java b/appserver/tests/appserv-tests/devtests/deployment/war/webservices/helloservice/staticstubclient/SayHelloClient.java
deleted file mode 100644
index d65a7ea..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/webservices/helloservice/staticstubclient/SayHelloClient.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2003, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package staticstubclient;
-
-import javax.xml.rpc.Stub;
-import helloservice.*;
-
-public class SayHelloClient {
-
-    private String endpointAddress;
-
-    public static void main(String[] args) {
-
-        System.out.println("Endpoint address = " + args[0]);
-        boolean testPositive = (Boolean.valueOf(args[1])).booleanValue();
-        try {
-            Stub stub = createProxy();
-            stub._setProperty
-              (javax.xml.rpc.Stub.ENDPOINT_ADDRESS_PROPERTY,
-               args[0]);
-                        SayHello hello = (SayHello)stub;
-            System.out.println(hello.sayHello("Jerome !"));
-        } catch (Exception ex) {
-            if(testPositive) {
-                ex.printStackTrace();
-                System.exit(-1);
-            } else {
-                System.out.println("Exception recd as expected");
-            }
-        }
-        System.exit(0);
-    }
-
-    private static Stub createProxy() {
-        // Note: MyHelloService_Impl is implementation-specific.
-        return
-        (Stub) (new SayHelloService_Impl().getSayHelloPort());
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/webservices/helloservice/sun-web.xml b/appserver/tests/appserv-tests/devtests/deployment/war/webservices/helloservice/sun-web.xml
deleted file mode 100644
index 0fa56a9..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/webservices/helloservice/sun-web.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 Servlet 2.4//EN' 'http://www.sun.com/software/sunone/appserver/dtds/sun-web-app_2_4-0.dtd'>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<sun-web-app>
-    <context-root>HelloService</context-root>
-</sun-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/webservices/helloservice/web.xml b/appserver/tests/appserv-tests/devtests/deployment/war/webservices/helloservice/web.xml
deleted file mode 100644
index 2d64676..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/webservices/helloservice/web.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-  <display-name>HelloServiceWS</display-name>
-  <servlet>
-    <servlet-name>HelloService</servlet-name>
-    <servlet-class>helloservice.SayHelloImpl</servlet-class>
-    <load-on-startup>0</load-on-startup>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>HelloService</servlet-name>
-    <url-pattern>/HelloService</url-pattern>
-  </servlet-mapping>
-  <session-config>
-    <session-timeout>54</session-timeout>
-  </session-config>
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/war/webservices/helloservice/webservices.xml b/appserver/tests/appserv-tests/devtests/deployment/war/webservices/helloservice/webservices.xml
deleted file mode 100644
index e4ea4b1..0000000
--- a/appserver/tests/appserv-tests/devtests/deployment/war/webservices/helloservice/webservices.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
-
-    This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
-
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
--->
-
-<webservices xmlns="http://java.sun.com/xml/ns/j2ee"
-      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
-        http://www.ibm.com/webservices/xsd/j2ee_web_services_1_1.xsd"
-      version="1.1">
-  <description>Very simple web services</description>
-  <webservice-description>
-    <webservice-description-name>A WebService Servlet that says Hello</webservice-description-name>
-    <wsdl-file>WEB-INF/wsdl/SayHelloService.wsdl</wsdl-file>
-    <jaxrpc-mapping-file>mapping.xml</jaxrpc-mapping-file>
-    <port-component>
-      <description>port component description</description>
-      <port-component-name>SayHelloPort</port-component-name>
-      <wsdl-port xmlns:tns="urn:DeploymentWebServiceTest">tns:SayHelloPort </wsdl-port>
-      <service-endpoint-interface>helloservice.SayHello</service-endpoint-interface>
-      <service-impl-bean>
-        <servlet-link>HelloService</servlet-link>
-      </service-impl-bean>
-    </port-component>
-  </webservice-description>
-</webservices>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/webservices/annotations-common.xml b/appserver/tests/appserv-tests/devtests/deployment/webservices/annotations-common.xml
index a37975d..db84100 100644
--- a/appserver/tests/appserv-tests/devtests/deployment/webservices/annotations-common.xml
+++ b/appserver/tests/appserv-tests/devtests/deployment/webservices/annotations-common.xml
@@ -16,181 +16,188 @@
 
 -->
 
-<property environment="env"/>
-<property file="${env.APS_HOME}/config.properties"/>
+<property environment="env" />
+<property file="${env.APS_HOME}/config.properties" />
 
 <target name="test-all" depends="clean">
-    <basename file="${src-name}" property="server" suffix=".java"/>
-    <dirname file="${src-name}" property="directory"/>
-    <echo message="Starting Test ${directory}"/>
-    <basename file="${directory}" property="pkg-name"/>
+    <basename file="${src-name}" property="server" suffix=".java" />
+    <dirname file="${src-name}" property="directory" />
+    <echo message="Starting Test ${directory}" />
+    <basename file="${directory}" property="pkg-name" />
     <antcall target="deploy">
-        <param name="pkg-name" value="${pkg-name}"/>
+        <param name="pkg-name" value="${pkg-name}" />
     </antcall>
     <condition property="deploy_succeeded">
-        <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar_deployed"/>
+        <available
+            file="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar_deployed" />
     </condition>
     <condition property="deploy_failed">
-        <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar_deployFailed"/>
+        <available
+            file="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar_deployFailed" />
     </condition>
-    <fail message="Deployment failed" if="deploy_failed"/>
-    <antcall target="run"/>
-    <echo message="Removing jar bundle ${server}.jar from autodeploy directory"/>
-    <antcall target="undeploy"/>
-    <antcall target="report"/>
+    <fail message="Deployment failed" if="deploy_failed" />
+    <antcall target="run" />
+    <echo message="Removing jar bundle ${server}.jar from autodeploy directory" />
+    <antcall target="undeploy" />
+    <antcall target="report" />
 </target>
 
 <target name="clean">
-    <echo message="Clean from ${ant.file}"/>
-    <delete dir="${env.APS_HOME}/build/module/classes"/>
-    <delete dir="${env.APS_HOME}/build/module/archive"/>
-    <mkdir dir="${env.APS_HOME}/build/module/classes"/>
-    <mkdir dir="${env.APS_HOME}/build/module/archive"/>
+    <echo message="Clean from ${ant.file}" />
+    <delete dir="${env.APS_HOME}/build/module/classes" />
+    <delete dir="${env.APS_HOME}/build/module/archive" />
+    <mkdir dir="${env.APS_HOME}/build/module/classes" />
+    <mkdir dir="${env.APS_HOME}/build/module/archive" />
 </target>
- <path id="classpath">
-
-        <fileset dir="${env.S1AS_HOME}/modules">
-                      <include name="*.jar"/>
-
-                   </fileset>
-                   <fileset dir="${env.S1AS_HOME}/modules/endorsed">
-                      <include name="*.jar"/>
-
-                   </fileset>
-                   <fileset dir="${env.APS_HOME}/lib">
-                     <include name="reporter.jar"/>
-                   </fileset>
-
-
-    </path>
+<path id="classpath">
+    <fileset dir="${env.S1AS_HOME}/modules">
+        <include name="*.jar" />
+    </fileset>
+    <fileset dir="${env.APS_HOME}/lib">
+        <include name="reporter.jar" />
+    </fileset>
+</path>
 
 
 <target name="test-compile">
-    <echo message="Compiling into ${pkg-name}/${server}.class"/>
+    <echo message="Compiling into ${pkg-name}/${server}.class" />
     <javac srcdir="." destdir="${env.APS_HOME}/build/module/classes"
-        includes="${pkg-name}/*.java">
- <classpath refid="classpath"/>
-</javac>
+        includes="${pkg-name}/*.java"
+    >
+        <classpath refid="classpath" />
+    </javac>
 </target>
 
 <target name="compile-client">
     <javac srcdir="." destdir="${env.APS_HOME}/build/module/classes"
-        includes="${client-src-name}">
-        <classpath refid="classpath"/>
+        includes="${client-src-name}"
+    >
+        <classpath refid="classpath" />
     </javac>
 </target>
 
 <target name="build">
-    <basename file="${src-name}" property="server" suffix=".java"/>
-    <dirname file="${src-name}" property="directory"/>
-    <basename file="${directory}" property="pkg-name"/>
-    <antcall target="test-compile"/>
-    <echo message="Building with package ${pkg-name}"/>
+    <basename file="${src-name}" property="server" suffix=".java" />
+    <dirname file="${src-name}" property="directory" />
+    <basename file="${directory}" property="pkg-name" />
+    <antcall target="test-compile" />
+    <echo message="Building with package ${pkg-name}" />
     <jar destfile="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar"
-        basedir="${env.APS_HOME}/build/module/classes"
-        includes="${pkg-name}/**">
-        <metainf dir="${pkg-name}"
-                includes="*.xml **/*.wsdl **/*.xsd"/>
+        basedir="${env.APS_HOME}/build/module/classes" includes="${pkg-name}/**"
+    >
+        <metainf dir="${pkg-name}" includes="*.xml **/*.wsdl **/*.xsd" />
     </jar>
 </target>
 
 <target name="deploy">
-    <antcall target="build"/>
-    <basename file="${src-name}" property="server" suffix=".java"/>
+    <antcall target="build" />
+    <basename file="${src-name}" property="server" suffix=".java" />
     <waitfor maxwait="100" maxwaitunit="second">
-       <or>
-            <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar_deployed"/>
-            <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar_deployFailed"/>
-       </or>
+        <or>
+            <available
+                file="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar_deployed" />
+            <available
+                file="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar_deployFailed" />
+        </or>
     </waitfor>
 </target>
 
 <target name="undeploy">
-    <basename file="${src-name}" property="server" suffix=".java"/>
+    <basename file="${src-name}" property="server" suffix=".java" />
     <antcall target="autoundeploy-file">
-        <param name="filename" value="${server}.jar"/>
+        <param name="filename" value="${server}.jar" />
     </antcall>
     <condition property="undeploy_succeeded">
-        <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar_undeployed"/>
+        <available
+            file="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar_undeployed" />
     </condition>
     <condition property="undeploy_failed">
-        <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar_undeployFailed"/>
+        <available
+            file="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar_undeployFailed" />
     </condition>
-    <fail if="undeploy_failed" message="undeployment failed"/>
+    <fail if="undeploy_failed" message="undeployment failed" />
 </target>
 
 
 <target name="autoundeploy-file">
-    <delete file="${env.S1AS_HOME}/domains/domain1/autodeploy/${filename}"/>
+    <delete file="${env.S1AS_HOME}/domains/domain1/autodeploy/${filename}" />
     <waitfor maxwait="100" maxwaitunit="second">
-       <or>
-            <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${filename}_undeployed"/>
-            <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${filename}_undeployFailed"/>
-       </or>
+        <or>
+            <available
+                file="${env.S1AS_HOME}/domains/domain1/autodeploy/${filename}_undeployed" />
+            <available
+                file="${env.S1AS_HOME}/domains/domain1/autodeploy/${filename}_undeployFailed" />
+        </or>
     </waitfor>
 </target>
 
 <target name="report" depends="internal-report-success, internal-report-failure">
-    <delete file="${env.S1AS_HOME}/domains/domain1/autodeploy/${class-name}_*"/>
+    <delete file="${env.S1AS_HOME}/domains/domain1/autodeploy/${class-name}_*" />
 </target>
 
 <target name="run">
-    <basename file="${src-name}" property="server" suffix=".java"/>
+    <basename file="${src-name}" property="server" suffix=".java" />
     <condition property="deploy_succeeded">
-        <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar_deployed"/>
+        <available
+            file="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar_deployed" />
     </condition>
     <condition property="deploy_failed">
-        <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar_deployFailed"/>
+        <available
+            file="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar_deployFailed" />
     </condition>
-    <antcall target="prepare-client"/>
-    <antcall target="internal-run"/>
+    <antcall target="prepare-client" />
+    <antcall target="internal-run" />
 </target>
 
 <target name="wsdl-import">
     <antcall target="configurable-wsdl-import">
-        <param name="host-name" value="${http.host}"/>
-        <param name="host-port" value="${http.port}"/>
-        <param name="protocol" value="http"/>
+        <param name="host-name" value="${http.host}" />
+        <param name="host-port" value="${http.port}" />
+        <param name="protocol" value="http" />
     </antcall>
 </target>
 
 <target name="configurable-wsdl-import">
-    <echo message="wsimporting ${protocol}://${host-name}:${host-port}/${server}Service/${port}?WSDL; special args are ${wsimport-special-args}"/>
-    <exec executable="${env.S1AS_HOME}/bin/wsimport">
-        <arg line="-keep -d ${env.APS_HOME}/build/module/classes ${protocol}://${host-name}:${host-port}/${server}Service/${port}?WSDL"/>
+    <tstamp>
+      <format property="TIMESTAMP" pattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ" />
+    </tstamp>
+    <echo>Current time (ISO): ${TIMESTAMP}</echo>
+    <echo message="wsimporting ${protocol}://${host-name}:${host-port}/${server}Service/${port}?WSDL; special args are ${wsimport-special-args}" />
+    <exec executable="${env.S1AS_HOME}/bin/wsimport" failonerror="true">
+        <arg line="-keep -d ${env.APS_HOME}/build/module/classes ${protocol}://${host-name}:${host-port}/${server}Service/${port}?WSDL" />
     </exec>
 </target>
 
 <target name="prepare-client">
-    <!--basename file="${server}" property="port" suffix="EJB"/-->
-    <basename file="${server}" property="port"/>
+    <!--basename file="${server}" property="port" suffix="EJB"/ -->
+    <basename file="${server}" property="port" />
     <antcall target="wsdl-import">
-        <param name="server" value="${server}"/>
-        <param name="port" value="${port}"/>
+        <param name="server" value="${server}" />
+        <param name="port" value="${port}" />
     </antcall>
-    <antcall target="compile-client"/>
-    <antcall target="unjar-client-utils"/>
+    <antcall target="compile-client" />
+    <antcall target="unjar-client-utils" />
 </target>
 
 <target name="unjar-client-utils">
-    <unjar src="${env.APS_HOME}/lib/reporter.jar" dest="${env.APS_HOME}/build/module/classes"/>
+    <unjar src="${env.APS_HOME}/lib/reporter.jar" dest="${env.APS_HOME}/build/module/classes" />
 </target>
 
 <target name="internal-run" if="deploy_succeeded">
-    <basename file="${client-src-name}" property="client" suffix=".java"/>
-    <dirname file="${client-src-name}" property="client-directory"/>
-    <basename file="${client-directory}" property="client-pkg-name"/>
-    <property name="client-class-name" value="${client-pkg-name}/${client}.class"/>
-    <echo message="Running appclient with ${client-pkg-name}.${client} ${app-client-parameters} ${app-client-extra-parameters}"/>
-    <exec executable="${env.S1AS_HOME}/bin/appclient" dir="${env.APS_HOME}/build/module/classes">
-        <arg line="${client-pkg-name}.${client} ${app-client-parameters} ${app-client-extra-parameters}"/>
+    <basename file="${client-src-name}" property="client" suffix=".java" />
+    <dirname file="${client-src-name}" property="client-directory" />
+    <basename file="${client-directory}" property="client-pkg-name" />
+    <property name="client-class-name" value="${client-pkg-name}/${client}.class" />
+    <echo message="Running appclient with ${client-pkg-name}.${client} ${app-client-parameters} ${app-client-extra-parameters}" />
+    <exec executable="${env.S1AS_HOME}/bin/appclient" dir="${env.APS_HOME}/build/module/classes" failonerror="true">
+        <arg line="${client-pkg-name}.${client} ${app-client-parameters} ${app-client-extra-parameters}" />
     </exec>
 </target>
 
 <target name="internal-report-success" if="undeploy_succeeded">
-    <antcall target="report-success"/>
+    <antcall target="report-success" />
 </target>
 
 <target name="internal-report-failure" if="undeploy_failed, deploy_failed">
-    <antcall target="report-failure"/>
+    <antcall target="report-failure" />
 </target>
diff --git a/appserver/tests/appserv-tests/devtests/deployment/webservices/noinf/client/Client.java b/appserver/tests/appserv-tests/devtests/deployment/webservices/noinf/client/Client.java
index c0bbafc..0dda222 100644
--- a/appserver/tests/appserv-tests/devtests/deployment/webservices/noinf/client/Client.java
+++ b/appserver/tests/appserv-tests/devtests/deployment/webservices/noinf/client/Client.java
@@ -25,8 +25,7 @@
 
 public class Client {
 
-        private static SimpleReporterAdapter stat =
-                new SimpleReporterAdapter("appserv-tests");
+        private static SimpleReporterAdapter stat = new SimpleReporterAdapter("appserv-tests");
 
         @WebServiceRef(wsdlLocation="http://localhost:8080/HelloImplService/HelloImpl?WSDL")
         static HelloImplService service;
