Initial Contribution

Signed-off-by: Vinay Vishal <vinay.vishal@oracle.com>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/README.md b/appserver/tests/appserv-tests/devtests/cdi/README.md
new file mode 100644
index 0000000..c5cad8e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/README.md
@@ -0,0 +1,59 @@
+CDI developer tests README
+==========================
+
+To checkout CDI devtests
+------------------------
+- checkout CDI developer tests using the following commands:
+svn -N co https://svn.java.net/svn/glassfish~svn/trunk/v2/appserv-tests
+cd appserv-tests #this is the directory set later to APS_HOME
+svn co https://svn.java.net/svn/glassfish~svn/trunk/v2/appserv-tests/config
+svn co https://svn.java.net/svn/glassfish~svn/trunk/v2/appserv-tests/lib
+svn co https://svn.java.net/svn/glassfish~svn/trunk/v2/appserv-tests/util
+svn -N co https://svn.java.net/svn/glassfish~svn/trunk/v2/appserv-tests/devtests
+cd devtests
+svn co https://svn.java.net/svn/glassfish~svn/trunk/v2/appserv-tests/devtests/cdi
+
+Test setup
+----------
+- set S1AS_HOME, APS_HOME as appropriate
+export APS_HOME=<appserv-tests> directory
+export S1AS_HOME=<GlassFish Installation> directory
+- start GlassFish
+$S1AS_HOME/bin/asadmin start-domain domain1
+- start Derby
+$S1AS_HOME/bin/asadmin start-database
+
+To run all CDI developer tests
+------------------------------
+- cd $APS_HOME/devtests/cdi
+- ant all
+- results can be found at APS_HOME/test_results.html
+
+
+Test setup teardown
+-------------------
+- stop GlassFish
+$S1AS_HOME/bin/asadmin stop-domain domain1
+- asadmin stop-database
+$S1AS_HOME/bin/asadmin stop-database
+
+To run a single CDI developer test
+----------------------------------
+- after performing tasks under "Test setup"
+- cd $APS_HOME/devtests/cdi/[test-dir]
+- ant all
+- perform tasks listed under "Test setup teardown"
+
+To run CDI developer test suite with Security Manager on
+---------------------------------------------------------
+- start domain and enable security manager by 
+asadmin create-jvm-options -Djava.security.manager 
+- stop domain
+- Add the following permission block to $S1AS_HOME/domains/domain1/config/server.policy
+grant codeBase "file:${com.sun.aas.instanceRoot}/applications/-" {
+    permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
+};
+- restart domain
+- run tests
+
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/README_Embedded.txt b/appserver/tests/appserv-tests/devtests/cdi/README_Embedded.txt
new file mode 100644
index 0000000..0b349d3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/README_Embedded.txt
@@ -0,0 +1,25 @@
+export APS_HOME=<Your-Workspace>/v2/appserv-tests
+
+export S1AS_HOME=<installed-glassfish> (eg.,, /tmp/glassfish5/glassfish)
+
+export ANT_OPTS="-Xss128k -Xmx2048m -XX:MaxPermSize=256m"
+
+export CDI_TESTHOME=$APS_HOME/devtests/cdi
+export CDI_TESTRUNLOG=$CDI_TESTHOME/cditests-run.log
+export CDITESTSUMMARY=$CDI_TESTHOME/cditests-summary.log
+
+Download ant-tasks.jar[1] and copy it under /tmp
+
+export CLASSPATH=/tmp/ant-tasks-3.1.1-SNAPSHOT.jar:$S1AS_HOME/lib/embedded/glassfish-embedded-static-shell.jar:$S1AS_HOME/lib/gf-client.jar:$CLASSPATH
+
+export GF_EMBEDDED_ENABLE_CLI=true
+
+cp $APS_HOME/devtests/embedded/config/common.xml $APS_HOME/config
+cp $APS_HOME/devtests/embedded/config/run.xml $APS_HOME/config
+
+cd $APS_HOME/devtests/cdi
+
+########## Running CDI tests #########
+ant start-server all stop-server
+
+[1] http://maven.glassfish.org/content/groups/glassfish/org/glassfish/ant-tasks/3.1.1-SNAPSHOT/ant-tasks-3.1.1-SNAPSHOT.jar
diff --git a/appserver/tests/appserv-tests/devtests/cdi/alternatives/README b/appserver/tests/appserv-tests/devtests/cdi/alternatives/README
new file mode 100644
index 0000000..0dcab93
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/alternatives/README
@@ -0,0 +1,2 @@
+Test
+- Alternatives: MockPaymentProcessor is an Alternative that is enabled through beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/alternatives/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/alternatives/WebTest.java
new file mode 100644
index 0000000..4505147
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/alternatives/WebTest.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "alternatives-tests";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0. initParams: n1=v1, n2=v2";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Testing Alternatives");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+        System.out.println("TESTNAME " + TEST_NAME);
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/alternatives/build.properties b/appserver/tests/appserv-tests/devtests/cdi/alternatives/build.properties
new file mode 100644
index 0000000..317b372
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/alternatives/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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-alternatives"/>
+<property name="appname" value="${module}-servlet-annotation"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/alternatives/build.xml b/appserver/tests/appserv-tests/devtests/cdi/alternatives/build.xml
new file mode 100644
index 0000000..c0d904d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/alternatives/build.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/alternatives/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/alternatives/descriptor/beans.xml
new file mode 100644
index 0000000..c0da4fc
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/alternatives/descriptor/beans.xml
@@ -0,0 +1,26 @@
+<!--
+
+    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
+
+-->
+
+<beans 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/beans_1_0.xsd">
+  <alternatives>
+    <class>test.artifacts.MockPaymentProcessor</class>
+  </alternatives>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/AlternativesServlet.java b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/AlternativesServlet.java
new file mode 100644
index 0000000..77bee4e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/AlternativesServlet.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.artifacts.Asynchronous;
+import test.artifacts.AsynchronousPaymentProcessor;
+import test.artifacts.MockPaymentProcessor;
+import test.artifacts.PaymentProcessor;
+import test.artifacts.Synchronous;
+import test.artifacts.SynchronousPaymentProcessor;
+import test.beans.BeanToTestAlternatives;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" }, initParams = {
+        @WebInitParam(name = "n1", value = "v1"),
+        @WebInitParam(name = "n2", value = "v2") })
+public class AlternativesServlet extends HttpServlet {
+
+    @Inject
+    BeanToTestAlternatives tb;
+
+    @Inject
+    @Synchronous
+    PaymentProcessor synchronousPaymentProcessor;
+    @Inject
+    @Asynchronous
+    PaymentProcessor asynchronousPaymentProcessor;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0. ");
+        String msg = "n1=" + getInitParameter("n1") + ", n2="
+                + getInitParameter("n2");
+
+        if (!tb.testInjection())
+            msg += "Alternatives injection and test for availability of other beans via @Any Failed";
+
+        //In the case of ambiguous dependencies such as synchronous and asynchronous payment processors
+        //the enabled alternative wins
+        boolean qualifierTestSuccess = synchronousPaymentProcessor instanceof MockPaymentProcessor
+                && asynchronousPaymentProcessor instanceof MockPaymentProcessor;
+        if (!qualifierTestSuccess)
+            msg += "Qualifier based injection into Servlet Failed";
+
+        writer.write("initParams: " + msg + "\n");
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/Asynchronous.java b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/Asynchronous.java
new file mode 100644
index 0000000..ca0dd14
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/Asynchronous.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+import static java.lang.annotation.ElementType.*;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({TYPE, METHOD, PARAMETER, FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+
+public @interface Asynchronous {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/AsynchronousPaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/AsynchronousPaymentProcessor.java
new file mode 100644
index 0000000..9e0c62b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/AsynchronousPaymentProcessor.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+@Asynchronous
+public class AsynchronousPaymentProcessor implements PaymentProcessor {
+
+    @Override
+    public boolean processPayment() {
+        return false;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/CashReliablePaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/CashReliablePaymentProcessor.java
new file mode 100644
index 0000000..a72f9db
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/CashReliablePaymentProcessor.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+@PayBy(value=PaymentMethod.CASH) @Reliable
+//To test multiple qualifiers
+public class CashReliablePaymentProcessor implements PaymentProcessor {
+
+    @Override
+    public boolean processPayment() {
+        return false;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/ChequePaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/ChequePaymentProcessor.java
new file mode 100644
index 0000000..9fe824b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/ChequePaymentProcessor.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+@PayBy(PaymentMethod.CHEQUE)
+public class ChequePaymentProcessor implements PaymentProcessor {
+
+    @Override
+    public boolean processPayment() {
+        return false;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/MockPaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/MockPaymentProcessor.java
new file mode 100644
index 0000000..8d736e2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/MockPaymentProcessor.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+
+import javax.enterprise.inject.Alternative;
+
+@Alternative @Asynchronous @Synchronous
+public class MockPaymentProcessor implements PaymentProcessor{
+
+    @Override
+    public boolean processPayment() {
+        return true;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/PayBy.java b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/PayBy.java
new file mode 100644
index 0000000..179aca6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/PayBy.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+import static java.lang.annotation.ElementType.*;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.enterprise.util.Nonbinding;
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target( { TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface PayBy {
+    PaymentMethod value() default PaymentMethod.CHEQUE;
+
+    @Nonbinding
+    String comment() default ""; // A Non-Binding member. Is ignored during
+                                 // dependency resolution
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/PaymentMethod.java b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/PaymentMethod.java
new file mode 100644
index 0000000..82e7eb6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/PaymentMethod.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+public enum PaymentMethod {
+    CHEQUE, CASH
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/PaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/PaymentProcessor.java
new file mode 100644
index 0000000..3e25336
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/PaymentProcessor.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+
+public interface PaymentProcessor {
+    boolean processPayment();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/Reliable.java b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/Reliable.java
new file mode 100644
index 0000000..8ece693
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/Reliable.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+import static java.lang.annotation.ElementType.*;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({TYPE, METHOD, PARAMETER, FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Reliable {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/Synchronous.java b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/Synchronous.java
new file mode 100644
index 0000000..b4c5d7e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/Synchronous.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+import static java.lang.annotation.ElementType.*;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({TYPE, METHOD, PARAMETER, FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Synchronous {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/SynchronousPaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/SynchronousPaymentProcessor.java
new file mode 100644
index 0000000..921cd3e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/artifacts/SynchronousPaymentProcessor.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+@Synchronous
+public class SynchronousPaymentProcessor implements PaymentProcessor {
+
+    @Override
+    public boolean processPayment() {
+        return false;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/beans/BeanToTestAlternatives.java b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/beans/BeanToTestAlternatives.java
new file mode 100644
index 0000000..a640949
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/alternatives/servlet/test/beans/BeanToTestAlternatives.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Instance;
+import javax.inject.Inject;
+
+import test.artifacts.Asynchronous;
+import test.artifacts.MockPaymentProcessor;
+import test.artifacts.PaymentProcessor;
+import test.artifacts.Synchronous;
+
+//Alternatives injection and test for availability of other beans via @Any Failed
+public class BeanToTestAlternatives {
+    private int numberOfPaymentProcessors = 0;
+
+    @Inject
+    @Asynchronous
+    @Synchronous
+    private PaymentProcessor pp;
+
+    @Inject
+    public void init(@Any Instance<PaymentProcessor> payInstances) {
+        for (PaymentProcessor p : payInstances) {
+            System.out.println("Payment Processor #"
+                    + numberOfPaymentProcessors + ":" + p);
+            numberOfPaymentProcessors++;
+        }
+    }
+
+    public boolean testInjection() {
+        System.out.println("# of Payment processors:"
+                + numberOfPaymentProcessors);
+        System.out.println("mock payment procssor:" + pp);
+        return (numberOfPaymentProcessors == 5)
+                && (pp instanceof MockPaymentProcessor); // Async, Sync, Cheque,
+                                                         // ReliableCash,
+                                                         // MockPaymentProcessor
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/README b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/README
new file mode 100644
index 0000000..a53d83b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/README
@@ -0,0 +1,5 @@
+Test
+- Ensure that presence of disabled alternatives do not result in ambiguous 
+dependencies
+- Ensure that the presence of disabled alternatives do not result in appearance
+of @Any
diff --git a/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/WebTest.java
new file mode 100644
index 0000000..844c2a8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/WebTest.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "ambiguous-dependencies-tests";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0. initParams: n1=v1, n2=v2";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Testing Ambiguous dependencies");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+        System.out.println("TESTNAME " + TEST_NAME);
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/build.properties b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/build.properties
new file mode 100644
index 0000000..2b73b98
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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-ambiguousdeps"/>
+<property name="appname" value="${module}-servlet-annotation"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/build.xml b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/build.xml
new file mode 100644
index 0000000..c0d904d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/build.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/descriptor/beans.xml
new file mode 100644
index 0000000..19f070f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/descriptor/beans.xml
@@ -0,0 +1,33 @@
+<!--
+
+    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
+
+-->
+
+<beans 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/beans_1_0.xsd">
+  <alternatives>
+    <class>test.artifacts.MockPaymentProcessor</class>
+    <!-- DisabledMockPaymentProcessor is not enabled -->
+    <!-- 
+        <class>test.artifacts.DisabledMockPaymentProcessor</class>
+    -->
+    
+    <!--  MockCashReliablePaymentProcessor and MockChequePaymentProcessor are not enabled -->
+  </alternatives>
+  
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/AmbiguousDependenciesServlet.java b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/AmbiguousDependenciesServlet.java
new file mode 100644
index 0000000..f66b468
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/AmbiguousDependenciesServlet.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.artifacts.Asynchronous;
+import test.artifacts.AsynchronousPaymentProcessor;
+import test.artifacts.MockPaymentProcessor;
+import test.artifacts.PaymentProcessor;
+import test.artifacts.Synchronous;
+import test.artifacts.SynchronousPaymentProcessor;
+import test.beans.BeanToTestAmbiguousDependencies;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" }, initParams = {
+        @WebInitParam(name = "n1", value = "v1"),
+        @WebInitParam(name = "n2", value = "v2") })
+public class AmbiguousDependenciesServlet extends HttpServlet {
+
+    @Inject
+    BeanToTestAmbiguousDependencies tb;
+
+    @Inject
+    @Synchronous
+    PaymentProcessor synchronousPaymentProcessor;
+    @Inject
+    @Asynchronous
+    PaymentProcessor asynchronousPaymentProcessor;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0. ");
+        String msg = "n1=" + getInitParameter("n1") + ", n2="
+                + getInitParameter("n2");
+
+        if (!tb.testInjection())
+            msg += "Alternatives injection and test for availability of other beans via @Any Failed";
+
+        //In the case of ambiguous dependencies such as synchronous and asynchronous payment processors
+        //the enabled alternative wins
+        boolean qualifierTestSuccess = synchronousPaymentProcessor instanceof MockPaymentProcessor
+                && asynchronousPaymentProcessor instanceof MockPaymentProcessor;
+        if (!qualifierTestSuccess)
+            msg += "Qualifier based injection into Servlet Failed";
+
+        writer.write("initParams: " + msg + "\n");
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/Asynchronous.java b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/Asynchronous.java
new file mode 100644
index 0000000..ca0dd14
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/Asynchronous.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+import static java.lang.annotation.ElementType.*;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({TYPE, METHOD, PARAMETER, FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+
+public @interface Asynchronous {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/AsynchronousPaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/AsynchronousPaymentProcessor.java
new file mode 100644
index 0000000..9e0c62b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/AsynchronousPaymentProcessor.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+@Asynchronous
+public class AsynchronousPaymentProcessor implements PaymentProcessor {
+
+    @Override
+    public boolean processPayment() {
+        return false;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/CashReliablePaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/CashReliablePaymentProcessor.java
new file mode 100644
index 0000000..a72f9db
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/CashReliablePaymentProcessor.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+@PayBy(value=PaymentMethod.CASH) @Reliable
+//To test multiple qualifiers
+public class CashReliablePaymentProcessor implements PaymentProcessor {
+
+    @Override
+    public boolean processPayment() {
+        return false;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/ChequePaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/ChequePaymentProcessor.java
new file mode 100644
index 0000000..9fe824b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/ChequePaymentProcessor.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+@PayBy(PaymentMethod.CHEQUE)
+public class ChequePaymentProcessor implements PaymentProcessor {
+
+    @Override
+    public boolean processPayment() {
+        return false;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/DisabledMockPaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/DisabledMockPaymentProcessor.java
new file mode 100644
index 0000000..4f1a98f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/DisabledMockPaymentProcessor.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+
+import javax.enterprise.inject.Alternative;
+
+@Alternative
+@Asynchronous
+@Synchronous
+//Not enabled via beans.xml
+public class DisabledMockPaymentProcessor implements PaymentProcessor {
+
+    @Override
+    public boolean processPayment() {
+        return true;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/MockCashReliablePaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/MockCashReliablePaymentProcessor.java
new file mode 100644
index 0000000..a986225
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/MockCashReliablePaymentProcessor.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+
+import javax.enterprise.inject.Alternative;
+
+
+@Alternative @PayBy(value=PaymentMethod.CASH) @Reliable
+//To test multiple qualifiers
+//Not enabled via beans.xml
+public class MockCashReliablePaymentProcessor implements PaymentProcessor {
+
+    @Override
+    public boolean processPayment() {
+        return false;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/MockChequePaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/MockChequePaymentProcessor.java
new file mode 100644
index 0000000..e00b802
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/MockChequePaymentProcessor.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+
+import javax.enterprise.inject.Alternative;
+
+@Alternative @PayBy(PaymentMethod.CHEQUE)
+//Not enabled via beans.xml
+public class MockChequePaymentProcessor implements PaymentProcessor {
+
+    @Override
+    public boolean processPayment() {
+        return false;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/MockPaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/MockPaymentProcessor.java
new file mode 100644
index 0000000..8d736e2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/MockPaymentProcessor.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+
+import javax.enterprise.inject.Alternative;
+
+@Alternative @Asynchronous @Synchronous
+public class MockPaymentProcessor implements PaymentProcessor{
+
+    @Override
+    public boolean processPayment() {
+        return true;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/PayBy.java b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/PayBy.java
new file mode 100644
index 0000000..179aca6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/PayBy.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+import static java.lang.annotation.ElementType.*;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.enterprise.util.Nonbinding;
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target( { TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface PayBy {
+    PaymentMethod value() default PaymentMethod.CHEQUE;
+
+    @Nonbinding
+    String comment() default ""; // A Non-Binding member. Is ignored during
+                                 // dependency resolution
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/PaymentMethod.java b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/PaymentMethod.java
new file mode 100644
index 0000000..82e7eb6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/PaymentMethod.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+public enum PaymentMethod {
+    CHEQUE, CASH
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/PaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/PaymentProcessor.java
new file mode 100644
index 0000000..3e25336
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/PaymentProcessor.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+
+public interface PaymentProcessor {
+    boolean processPayment();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/Reliable.java b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/Reliable.java
new file mode 100644
index 0000000..8ece693
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/Reliable.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+import static java.lang.annotation.ElementType.*;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({TYPE, METHOD, PARAMETER, FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Reliable {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/Synchronous.java b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/Synchronous.java
new file mode 100644
index 0000000..b4c5d7e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/Synchronous.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+import static java.lang.annotation.ElementType.*;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({TYPE, METHOD, PARAMETER, FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Synchronous {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/SynchronousPaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/SynchronousPaymentProcessor.java
new file mode 100644
index 0000000..921cd3e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/artifacts/SynchronousPaymentProcessor.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+@Synchronous
+public class SynchronousPaymentProcessor implements PaymentProcessor {
+
+    @Override
+    public boolean processPayment() {
+        return false;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/beans/BeanToTestAmbiguousDependencies.java b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/beans/BeanToTestAmbiguousDependencies.java
new file mode 100644
index 0000000..438d3b9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/ambiguous-deps/servlet/test/beans/BeanToTestAmbiguousDependencies.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Instance;
+import javax.inject.Inject;
+
+import test.artifacts.Asynchronous;
+import test.artifacts.MockPaymentProcessor;
+import test.artifacts.PaymentProcessor;
+import test.artifacts.Synchronous;
+
+//Alternatives injection and test for availability of other beans via @Any Failed
+public class BeanToTestAmbiguousDependencies {
+    private int numberOfPaymentProcessors = 0;
+
+    @Inject
+    @Asynchronous
+    @Synchronous
+    private PaymentProcessor pp;
+
+    @Inject
+    public void init(@Any Instance<PaymentProcessor> payInstances) {
+        for (PaymentProcessor p : payInstances) {
+            System.out.println("Payment Processor #"
+                    + numberOfPaymentProcessors + ":" + p);
+            numberOfPaymentProcessors++;
+        }
+    }
+
+    public boolean testInjection() {
+        System.out.println("# of Payment processors:"
+                + numberOfPaymentProcessors);
+        System.out.println("mock payment procssor:" + pp);
+        return (numberOfPaymentProcessors == 5)
+                && (pp instanceof MockPaymentProcessor); // Async, Sync, Cheque,
+                                                         // ReliableCash,
+                                                         // MockPaymentProcessor
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/build.xml b/appserver/tests/appserv-tests/devtests/cdi/build.xml
new file mode 100644
index 0000000..0d9d960
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/build.xml
@@ -0,0 +1,244 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
+<!ENTITY commonRun SYSTEM "./../../config/run.xml">
+<!ENTITY reporting   SYSTEM "./report.xml">
+]>
+
+<project name="cdi" default="usage" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &commonRun;
+    &reporting;
+    
+    <property name="cdi-target" value="all"/>
+
+    <taskdef resource="net/sf/antcontrib/antcontrib.properties">
+        <classpath>
+            <pathelement location="${env.APS_HOME}/devtests/cdi/lib/ant-contrib-1.0b3.jar"/>
+        </classpath>
+    </taskdef>
+
+    <target name="pe-all">
+        <antcall target="backup-config-pe"/>
+	<echo message="NOTE: The file ${env.APS_HOME}/config.properties is being replaced with ${basedir}/config/pe-config.properties. The file will be reverted to its original state after the completion of these tests."/>
+	<copy file="${basedir}/config/pe-config.properties" tofile="${env.APS_HOME}/config.properties" overwrite="true"/>
+	<antcall target="create-pe-passwordfile"/>
+	<antcall target="all"/>
+        <antcall target="restore-config-pe"/>
+    </target>
+	
+    <target name="das-all">
+        <antcall target="backup-config-pe"/>
+        <echo message="NOTE: The file ${env.APS_HOME}/config.properties is being replaced with ${basedir}/config/das-config.properties. The file will be reverted to its original state after the completion of these tests."/>
+	<copy file="${basedir}/config/das-config.properties" tofile="${env.APS_HOME}/config.properties" overwrite="true"/>
+	<antcall target="create-ee-passwordfile"/>
+	<antcall target="all"/>
+        <antcall target="restore-config-pe"/>
+    </target>
+
+    <target name="ee-all">
+        <antcall target="backup-config-pe"/>
+        <antcall target="backup-config-ee"/>
+        <echo message="NOTE: The file ${env.APS_HOME}/config.properties is being replaced with ${basedir}/config/das-config.properties. The file will be reverted to its original state after the completion of these tests."/>
+	<copy file="${basedir}/config/ee-config.properties" tofile="${env.APS_HOME}/config.properties" overwrite="true"/>
+	<copy file="${basedir}/config/ee-config.properties" tofile="${env.APS_HOME}/eeconfig/ee-config.properties" overwrite="true"/>
+	<antcall target="create-ee-passwordfile"/>
+	<antcall target="ee"/>
+	<antcall target="all"/>
+        <antcall target="restore-config-pe"/>
+        <antcall target="restore-config-ee"/>
+    </target>
+
+    <target name="backup-config-pe" depends="replace-password-with-passwordfile">
+	<copy file="${env.APS_HOME}/config.properties" tofile="${env.APS_HOME}/config.properties.bak" overwrite="true"/>
+    </target>
+
+    <target name="restore-config-pe" depends="undo-replace-password-with-passwordfile">
+	<copy file="${env.APS_HOME}/config.properties.bak" tofile="${env.APS_HOME}/config.properties" overwrite="true"/>
+    </target>
+		
+    <target name="backup-config-ee">
+	<copy file="${env.APS_HOME}/eeconfig/ee-config.properties" tofile="${env.APS_HOME}/eeconfig/ee-config.properties.bak" overwrite="true"/>
+    </target>
+
+    <target name="restore-config-ee">
+	<copy file="${env.APS_HOME}/eeconfig/ee-config.properties.bak" tofile="${env.APS_HOME}/eeconfig/ee-config.properties" overwrite="true"/>
+    </target>
+    
+    <target name="create-pe-passwordfile">
+	<property file="${env.APS_HOME}/config.properties"/>
+	<echo message="AS_ADMIN_PASSWORD=${admin.password}${line.separator}" file="${env.APS_HOME}/devtests/cdi/config/password.txt"/>
+    </target>
+
+    <target name="create-ee-passwordfile">
+	<property file="${env.APS_HOME}/config.properties"/>
+	<echo message="AS_ADMIN_PASSWORD=${admin.password}${line.separator}" file="${env.APS_HOME}/devtests/cdi/config/password.txt"/>
+	<echo message="AS_ADMIN_MASTERPASSWORD=${master.password}${line.separator}" file="${env.APS_HOME}/devtests/cdi/config/password.txt" append="true"/>
+    </target>
+    
+    <target name="replace-password-with-passwordfile">
+	<replace dir="${env.APS_HOME}/config/">
+           <include name="**/*.xml"/>
+	   <replacetoken>--password ${admin.password}</replacetoken>
+	   <replacevalue>--passwordfile ${env.APS_HOME}/devtests/cdi/config/password.txt</replacevalue>
+	</replace>
+    </target>
+
+    <target name="undo-replace-password-with-passwordfile">
+	<replace dir="${env.APS_HOME}/config/">
+           <include name="**/*.xml"/>
+	   <replacetoken>--passwordfile ${env.APS_HOME}/devtests/cdi/config/password.txt</replacetoken>
+	   <replacevalue>--password ${admin.password}</replacevalue>
+	</replace>
+    </target>
+	
+    <target name="run-test">
+        <antcall target="cdi">
+        <param name="cdi-target" value="run-test"/>
+        </antcall>
+    </target>
+
+    <target name="all">
+        <antcall target="cdi">
+        <param name="cdi-target" value="all"/>
+        </antcall>
+    </target>
+
+    <target name="clean">
+        <antcall target="cdi">
+        <param name="cdi-target" value="clean"/>
+        </antcall>
+    </target>
+
+    <target name="build">
+        <antcall target="cdi">
+        <param name="cdi-target" value="build"/>
+        </antcall>
+    </target>
+
+    <target name="setup">
+        <antcall target="cdi">
+        <param name="cdi-target" value="setup"/>
+        </antcall>
+    </target>
+
+    <target name="deploy">
+        <antcall target="cdi">
+        <param name="cdi-target" value="deploy"/>
+        </antcall>
+    </target>
+
+    <target name="undeploy">
+        <antcall target="cdi">
+        <param name="cdi-target" value="undeploy"/>
+        </antcall>
+    </target>
+
+    <target name="unsetup">
+        <antcall target="cdi">
+        <param name="cdi-target" value="unsetup"/>
+        </antcall>
+    </target>
+
+    <target name="run">
+        <antcall target="cdi">
+        <param name="cdi-target" value="run"/>
+        </antcall>
+    </target>
+
+    <target name="cdi">
+        <record name="cdi.output" action="start" />
+		<echo message="@@## Running all CDI developer tests##@@"/>
+        <ant dir="smoke-tests" target="${cdi-target}"/>
+        <ant dir="qualifiers" target="${cdi-target}"/>
+
+        <!--
+        Not running until https://issues.jboss.org/browse/CDI-331 is sorted out.
+        In 1.1.10.Final the test passes.
+        In 2.0 Beta it fails.
+        See email from Jozef 3/4/13
+        <ant dir="alternatives" target="${cdi-target}"/>
+        <ant dir="ambiguous-deps" target="${cdi-target}"/>
+        -->
+        <ant dir="events" target="${cdi-target}"/>
+        <ant dir="injection-point" target="${cdi-target}"/>
+        <ant dir="interceptors" target="${cdi-target}"/>
+        <ant dir="javaee-component-resources" target="${cdi-target}"/>
+        <ant dir="javaee-integration" target="${cdi-target}"/>
+        <ant dir="managed-beans" target="${cdi-target}"/>
+        <ant dir="portable-extensions" target="${cdi-target}"/>
+        <ant dir="producer-methods" target="${cdi-target}"/>
+
+        <!--
+        Not running until https://issues.jboss.org/browse/CDI-331 is sorted out.
+        In 1.1.10.Final the test passes.
+        In 2.0 Beta it fails.
+        See email from Jozef 3/4/13
+        <ant dir="programmatic-lookup" target="${cdi-target}"/>
+        -->
+
+        <ant dir="scopes" target="${cdi-target}"/>
+        <ant dir="specialization" target="${cdi-target}"/>
+        <ant dir="stereotypes" target="${cdi-target}"/>
+        <ant dir="transactions" target="${cdi-target}"/>
+        <ant dir="unproxyable-deps" target="${cdi-target}"/>
+        <ant dir="unsatisfied-deps" target="${cdi-target}"/>
+
+        <ant dir="implicit" target="${cdi-target}"/>
+
+        <if>
+            <equals arg1="${test.embedded.mode}" arg2="true"/>
+            <then>
+                <echo> Excluding testcase directory osgi-cdi for embedded mode</echo>
+            </then>
+            <else>
+                <ant dir="osgi-cdi" target="${cdi-target}"/>
+            </else>
+        </if>
+        <!-- now generate report -->
+        <antcall target="report"/>
+
+        <record name="cdi.output" action="stop" />
+    </target>
+
+    <target name="usage">
+	<echo> Usage:
+		ant cdi (Executes the cdi tests)
+		ant all (Executes all the cdi tests)
+		ant clean (cleans all the cdi tests)
+		ant build (builds all the cdi tests)
+		ant setup (sets up all resources for cdi tests)
+		ant deploy (deploys all the cdi apps)
+		ant run (Executes all the cdi tests)
+		ant undeploy (undeploys all the  cdi apps)
+		ant unsetup (unsets all resources for cdi tests)
+	</echo>
+    </target>
+
+    <target name="report-local">
+      <exec executable="sh">
+        <arg value="./resultCount.sh"/>
+      </exec>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/config/alltables_oracle.sql b/appserver/tests/appserv-tests/devtests/cdi/config/alltables_oracle.sql
new file mode 100644
index 0000000..82a61d0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/config/alltables_oracle.sql
@@ -0,0 +1,3 @@
+-- droping all tables from the current user db
+-- delete from user_tables;
+select 'drop table', table_name,'cascade constraints;' from user_tables;
diff --git a/appserver/tests/appserv-tests/devtests/cdi/config/das-config.properties b/appserver/tests/appserv-tests/devtests/cdi/config/das-config.properties
new file mode 100644
index 0000000..e0f75f7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/config/das-config.properties
@@ -0,0 +1,53 @@
+#
+# 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
+#
+
+
+execution.mode=pe
+admin.port=4849
+admin.user=admin
+admin.host=localhost
+admin.domain=domain1
+admin.domain.dir=${env.S1AS_HOME}/domains
+activeconsumer.maxnum=1
+mail.host="ha21sca.sfbay.sun.com"
+http.port=8080
+http.host=localhost
+https.host=localhost
+https.port=8181
+orb.port=3700
+admin.password=admin123
+master.password=admin123
+appserver.instance.name=server
+appserver.config.name=server-config
+directory.server.host=localhost
+directory.server.port=389
+directory.server.basedn=dc=sfbay,dc=sun,dc=com
+directory.manager.dn=cn=Directory Manager
+directory.manager.pwd=directorymanager
+server.dir=home/results/s1aspe80
+log.server.location=sardinia.sfbay.sun.com
+win.map.drive=Q:
+results.mailer=abc@sun.com
+results.mailee=xyz@sun.com
+interop.admin.port=5858
+interop.admin.host=localhost
+interop.admin.domain=domain2
+interop.http.port=9090
+interop.http.host=localhost
+interop.https.port=2043
+interop.orb.port=4700
+isInteropDomain=true
+resources.dottedname.prefix=server.resources
diff --git a/appserver/tests/appserv-tests/devtests/cdi/config/database.xml b/appserver/tests/appserv-tests/devtests/cdi/config/database.xml
new file mode 100644
index 0000000..d4d1fb0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/config/database.xml
@@ -0,0 +1,123 @@
+<!--
+
+    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
+
+-->
+
+<!--
+<!DOCTYPE project [
+  <!ENTITY common SYSTEM "file:../../../config/common.xml">
+  <!ENTITY testcommon SYSTEM "file:../../../config/properties.xml">
+]>
+-->
+<!-- ============================ -->
+<!-- ORACLE SETUP FOR CONPOOL     -->
+<!-- ============================ -->
+<!--
+<project name="oracle-db-settings" default="create-jdbc-conpool-connector" basedir=".">
+
+&common; 
+&testcommon;
+-->
+
+<target name="create-jdbc-conpool-connector" depends="default-jdbc-conpool, oracle-jdbc-conpool"/>
+
+<target name="default-jdbc-conpool" depends="init-common" unless="oracle">
+	<antcall target="create-jdbc-connpool-common"/>
+</target>
+	   
+<target name="oracle-jdbc-conpool" depends="init-common" if="oracle">
+<echo message="creating jdbc connection pool ${jdbc.conpool.name}"
+    level="verbose"/>
+    <exec executable="${ASADMIN}" failonerror="false">
+        <arg line="create-jdbc-connection-pool"/>
+        <arg line="--datasourceclassname ${db.class}"/>
+        <arg line="--restype ${jdbc.resource.type}"/>
+        <arg line="--target ${appserver.instance.name}"/>
+        <arg line="${as.props}"/>
+        <arg line="${jdbc.conpool.name}"/>
+    </exec>
+    <antcall target="set-oracle-props">
+	<param name="pool.type" value="jdbc"/>
+	<param name="conpool.name" value="${jdbc.conpool.name}"/>
+    </antcall>
+</target>
+
+<target name="set-oracle-props" depends="init-common" if="oracle"> 
+  <property file="${env.APS_HOME}/devtests/connector/config/oracle.properties"/>
+  <antcall target="asadmin-common-ignore-fail">
+    <param name="admin.command" value="set" />
+    <param name="operand.props"
+      value="${resources.dottedname.prefix}.${pool.type}-connection-pool.${conpool.name}.property.ServerName=${oracleForConnector.host}"/>
+  </antcall>
+  <antcall target="asadmin-common-ignore-fail">
+    <param name="admin.command" value="set" />
+    <param name="operand.props"
+      value="${resources.dottedname.prefix}.${pool.type}-connection-pool.${conpool.name}.property.PortNumber=${oracleForConnector.port}" />
+  </antcall>
+  <antcall target="asadmin-common-ignore-fail">
+    <param name="admin.command" value="set" />
+    <param name="operand.props"
+      value="${resources.dottedname.prefix}.${pool.type}-connection-pool.${conpool.name}.property.DatabaseName='jdbc:sun:oracle://${oracleForConnector.host}:${oracleForConnector.port};SID=${oracleForConnector.sid}' " />
+  </antcall>
+  <antcall target="asadmin-common-ignore-fail">
+    <param name="admin.command" value="set" />
+    <param name="operand.props"
+      value="${resources.dottedname.prefix}.${pool.type}-connection-pool.${conpool.name}.property.ClassName=${oracleForConnector.dbclass}" />
+  </antcall>
+  <antcall target="asadmin-common-ignore-fail">
+    <param name="admin.command" value="set" />
+    <param name="operand.props"
+      value="${resources.dottedname.prefix}.${pool.type}-connection-pool.${conpool.name}.property.SID=${oracleForConnector.sid}" />
+  </antcall>
+  <antcall target="asadmin-common-ignore-fail">
+    <param name="admin.command" value="set" />
+    <param name="operand.props"
+      value="${resources.dottedname.prefix}.${pool.type}-connection-pool.${conpool.name}.property.User=${oracleForConnector.user}" />
+  </antcall>
+  <antcall target="asadmin-common-ignore-fail">
+    <param name="admin.command" value="set" />
+    <param name="operand.props"
+      value="${resources.dottedname.prefix}.${pool.type}-connection-pool.${conpool.name}.property.Password=${oracleForConnector.pwd}" />
+  </antcall>
+</target>
+
+
+<target name="execute-sql-connector" depends="init-common, default-sql, sql-oracle"/>
+
+<target name="default-sql" depends="init-common" unless="oracle" > 
+	<antcall target="execute-sql-common"/>
+</target>
+
+<target name="sql-oracle" depends="init-common" if="oracle">
+	<property file="${env.APS_HOME}/devtests/connector/config/oracle.properties"/>
+	<property name="domain.lib.ext" value="${env.S1AS_HOME}/domains/domain1/lib/ext"/>
+	<property name="oracle.driver.path" value="${domain.lib.ext}/smoracle.jar:${domain.lib.ext}/smbase.jar:${domain.lib.ext}/smresource.jar:${domain.lib.ext}/smutil.jar:${domain.lib.ext}/smspy.jar:${domain.lib.ext}/Oranxo.jar"/>
+	<echo message="${oracleForConnector.driver}"/>
+<echo message="Executing sql statement at ${basedir} from ${sql.file}"
+    level="verbose"/>
+  <sql
+    driver="${oracleForConnector.driver}"
+    url="${oracleForConnector.url}"
+    userid="${oracleForConnector.user}"
+    password="${oracleForConnector.pwd}"
+    src="${sql.file}"
+    onerror="continue"
+    print="yes"
+    classpath="${oracle.driver.path}"/>
+</target>
+<!--
+</project>
+-->
diff --git a/appserver/tests/appserv-tests/devtests/cdi/config/ee-config.properties b/appserver/tests/appserv-tests/devtests/cdi/config/ee-config.properties
new file mode 100644
index 0000000..461bee1
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/config/ee-config.properties
@@ -0,0 +1,57 @@
+#
+# 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
+#
+
+
+execution.mode=ee
+admin.port=4849
+admin.user=admin
+admin.password=admin123
+master.password=admin123
+admin.host=localhost
+admin.domain=sqe-domain
+admin.domain.dir=${env.S1AS_HOME}/domains
+imq.dir=${env.S1AS_HOME}/imq
+activeconsumer.maxnum=-1
+http.port=38080
+http.host=localhost
+https.host=localhost
+https.port=33820
+orb.port=33700
+nodeagent.name=sqe-agent
+appserver.config.name=server-config
+cluster.name=sqe-cluster
+clustered.instance.name=clustered_server
+server.instance.name=sqe-cluster
+appserver.instance.name=sqe-cluster
+config.dottedname.prefix=server
+resources.dottedname.prefix=domain.resources
+directory.server.host=localhost
+directory.server.port=389
+directory.server.basedn=dc=sfbay,dc=sun,dc=com
+directory.manager.dn=cn=Directory Manager
+directory.manager.pwd=directorymanager
+interop.admin.port=5858
+interop.admin.host=localhost
+interop.admin.domain=domain2
+interop.http.port=9090
+interop.http.host=localhost
+interop.https.port=2043
+interop.orb.port=4700
+isInteropDomain=true
+results.mailer=abc@sun.com
+results.mailee=xyz@sun.com
+mail.host="ha21sca.sfbay.sun.com"
+install.type=cluster
diff --git a/appserver/tests/appserv-tests/devtests/cdi/config/eesetup b/appserver/tests/appserv-tests/devtests/cdi/config/eesetup
new file mode 100644
index 0000000..ef24e53
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/config/eesetup
@@ -0,0 +1,226 @@
+#!/bin/sh
+#
+# 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 script creates and starts a domain called "sqe-domain"
+# with a single server instance named "sqe-server".
+
+#--- Extract environment properties --- "sed" doesn't work with iastools.zip used in windows
+
+PASSWORD_FILE=${APS_HOME}/devtests/connector/config/password.txt
+
+for x in `cat $APS_HOME/devtests/connector/config/ee-config.properties`
+do
+    varval=`echo $x |cut -d'=' -f1`
+
+    if [ $varval = "admin.user" ];
+    then
+        AS_ADMIN_USER=`echo $x |cut -d'=' -f2`
+    fi
+
+    if [ $varval = "admin.port" ];
+    then
+        AS_ADMIN_PORT=`echo $x |cut -d'=' -f2`
+    fi
+    
+    if [ $varval = "admin.host" ];
+    then
+        AS_ADMIN_HOST=`echo $x |cut -d'=' -f2`
+    fi
+
+    if [ $varval = "orb.port" ];
+    then
+        ORB_LISTENER_1_PORT=`echo $x |cut -d'=' -f2`
+    fi
+
+    if [ $varval = "http.port" ];
+    then
+        HTTP_LISTENER_1_PORT=`echo $x |cut -d'=' -f2`
+    fi
+
+    if [ $varval = "https.port" ];
+    then
+        SSL_PORT=`echo $x |cut -d'=' -f2`
+    fi
+    
+    if [ $varval = "admin.password" ];
+    then
+        echo "AS_ADMIN_PASSWORD=`echo $x |cut -d'=' -f2`" > ${PASSWORD_FILE} 
+        echo "AS_ADMIN_ADMINPASSWORD=`echo $x |cut -d'=' -f2`" >> ${PASSWORD_FILE} 
+    fi
+
+    if [ $varval = "master.password" ];
+    then
+        echo "AS_ADMIN_MASTERPASSWORD=`echo $x |cut -d'=' -f2`" >> ${PASSWORD_FILE}
+    fi
+
+    if [ $varval = "admin.domain" ];
+    then
+        AS_ADMIN_DOMAIN=`echo $x |cut -d'=' -f2`
+    fi
+    if [ $varval = "nodeagent.name" ];
+    then
+        AS_ADMIN_NODEAGENT=`echo $x |cut -d'=' -f2`
+    fi
+
+    if [ $varval = "server.instance.name" ];
+    then
+        AS_ADMIN_SERVER=`echo $x |cut -d'=' -f2`
+    fi
+
+    if [ $varval = "cluster.name" ];
+    then
+        CLUSTER_NAME=`echo $x |cut -d'=' -f2`
+    fi
+
+    if [ $varval = "clustered.instance.name" ];
+    then
+        CLUSTERED_INSTANCE_NAME=`echo $x |cut -d'=' -f2`
+    fi
+
+    if [ $varval = "install.type" ];
+    then
+        INSTALL_TYPE=`echo $x |cut -d'=' -f2`
+    fi
+
+done
+
+ASADMIN=${S1AS_HOME}/bin/asadmin
+HTTP_LISTENER_2_PORT="1042"
+SSL_MUTUALAUTH_PORT="1058"
+JMX_SYSTEM_CONNECTOR_PORT="8687"
+
+export AS_ADMIN_USER
+#export AS_ADMIN_PASSWORD ## do not set AS_ADMIN_PASSWORD in env. -password option is deprecated. 
+export AS_ADMIN_PORT
+export AS_ADMIN_HOST
+export AS_ADMIN_DOMAIN
+export AS_ADMIN_NODEAGENT
+export AS_ADMIN_SERVER
+export CLUSTER_NAME
+export CLUSTERED_INSTANCE_NAME
+
+##----- End Variable Defintions --------------
+
+
+
+#Create domain: sqe-domain----
+echo "               EESETUP: creating domain ${AS_ADMIN_DOMAIN}..."
+${ASADMIN} create-domain --adminport ${AS_ADMIN_PORT} --adminuser ${AS_ADMIN_USER} --passwordfile ${PASSWORD_FILE} ${AS_ADMIN_DOMAIN}
+
+# Start domain: sqe-domain----
+echo "               EESETUP: starting domain ${AS_ADMIN_DOMAIN}..."
+${ASADMIN} start-domain --user ${AS_ADMIN_USER} --passwordfile ${PASSWORD_FILE} ${AS_ADMIN_DOMAIN}
+
+# Create node agent (sqe-agent) referencing sqe-domain.----
+echo "               EESETUP: creating node agent: ${AS_ADMIN_NODEAGENT}..."
+${ASADMIN} create-node-agent --host ${AS_ADMIN_HOST} --port ${AS_ADMIN_PORT} --user ${AS_ADMIN_USER} --passwordfile ${PASSWORD_FILE} ${AS_ADMIN_NODEAGENT}
+
+#----Start the sqe-agent. ----
+echo "               EESETUP: starting node agent: ${AS_ADMIN_NODEAGENT}..."
+${ASADMIN} start-node-agent --user ${AS_ADMIN_USER} --passwordfile ${PASSWORD_FILE} ${AS_ADMIN_NODEAGENT}
+
+echo "               EESETUP: INSTALL TYPE is set to :${INSTALL_TYPE}"
+#echo "               EESETUP: install.type value in config.properties needs to be one of [standalone | cluster]"
+
+if [ ${INSTALL_TYPE} = "standalone" ]; then
+#  ----------------
+    # Create server instance: sqe-server----
+    echo "               EESETUP: creating sever instance:${AS_ADMIN_SERVER}..."
+    ${ASADMIN} create-instance \
+        --user ${AS_ADMIN_USER} \
+        --passwordfile ${PASSWORD_FILE} \
+        --nodeagent ${AS_ADMIN_NODEAGENT} \
+        ${AS_ADMIN_SERVER}
+
+    ${ASADMIN} start-instance \
+        --user ${AS_ADMIN_USER} \
+        --passwordfile ${PASSWORD_FILE} \
+        ${AS_ADMIN_SERVER}
+fi
+
+if [ ${INSTALL_TYPE} = "cluster" ]; then
+#  ----------------
+    # Create cluster: sqe-cluster----
+    echo "               EESETUP: creating cluster:${CLUSTER_NAME}..."
+    ${ASADMIN} create-cluster --user ${AS_ADMIN_USER} --passwordfile ${PASSWORD_FILE} --host ${AS_ADMIN_HOST} --port ${AS_ADMIN_PORT} ${CLUSTER_NAME}
+
+    # Set ports for first instance 
+    echo "               EESETUP: using default ports in ee-config.properties for first instance..."
+        HTTP_LISTENER_1_PORT=`expr ${HTTP_LISTENER_1_PORT} `
+        HTTP_LISTENER_2_PORT=`expr ${HTTP_LISTENER_2_PORT} `
+        ORB_LISTENER_1_PORT=`expr ${ORB_LISTENER_1_PORT} `
+        SSL_PORT=`expr ${SSL_PORT} `
+        SSL_MUTUALAUTH_PORT=`expr ${SSL_MUTUALAUTH_PORT} `
+        JMX_SYSTEM_CONNECTOR_PORT=`expr ${JMX_SYSTEM_CONNECTOR_PORT} `
+
+    # Create clustered instance: clustered-server----
+    echo "               EESETUP: creating server instance:${CLUSTERED_INSTANCE_NAME}_1..."
+    ${ASADMIN} create-instance \
+        --nodeagent ${AS_ADMIN_NODEAGENT} \
+        --cluster ${CLUSTER_NAME} \
+        --systemproperties "HTTP_LISTENER_PORT=${HTTP_LISTENER_1_PORT}:HTTP_SSL_LISTENER_PORT=${HTTP_LISTENER_2_PORT}:IIOP_LISTENER_PORT=${ORB_LISTENER_1_PORT}:IIOP_SSL_LISTENER_PORT=${SSL_PORT}:IIOP_SSL_MUTUALAUTH_PORT=${SSL_MUTUALAUTH_PORT}:JMX_SYSTEM_CONNECTOR_PORT=${JMX_SYSTEM_CONNECTOR_PORT}" \
+        --user ${AS_ADMIN_USER} \
+	--passwordfile ${PASSWORD_FILE} \
+    ${CLUSTERED_INSTANCE_NAME}_1
+
+    # Roll over ports ----------------
+    echo "               EESETUP: Rolling over default port values by 4."
+        HTTP_LISTENER_1_PORT=`expr ${HTTP_LISTENER_1_PORT} + 4`
+        HTTP_LISTENER_2_PORT=`expr ${HTTP_LISTENER_2_PORT} + 4`
+        ORB_LISTENER_1_PORT=`expr ${ORB_LISTENER_1_PORT} + 4`
+        SSL_PORT=`expr ${SSL_PORT} + 4`
+        SSL_MUTUALAUTH_PORT=`expr ${SSL_MUTUALAUTH_PORT} + 4`
+        JMX_SYSTEM_CONNECTOR_PORT=`expr ${JMX_SYSTEM_CONNECTOR_PORT} + 4`
+
+    # Create clustered instance: clustered-server----
+    echo "               EESETUP: creating server instance:${CLUSTERED_INSTANCE_NAME}_2..."
+    ${ASADMIN} create-instance \
+        --nodeagent ${AS_ADMIN_NODEAGENT} \
+        --cluster ${CLUSTER_NAME} \
+        --systemproperties "HTTP_LISTENER_PORT=${HTTP_LISTENER_1_PORT}:HTTP_SSL_LISTENER_PORT=${HTTP_LISTENER_2_PORT}:IIOP_LISTENER_PORT=${ORB_LISTENER_1_PORT}:IIOP_SSL_LISTENER_PORT=${SSL_PORT}:IIOP_SSL_MUTUALAUTH_PORT=${SSL_MUTUALAUTH_PORT}:JMX_SYSTEM_CONNECTOR_PORT=${JMX_SYSTEM_CONNECTOR_PORT}" \
+        --user ${AS_ADMIN_USER} \
+	--passwordfile ${PASSWORD_FILE} \
+    ${CLUSTERED_INSTANCE_NAME}_2
+    #-- END Cluster Setup--------------------------
+
+    # Start cluster: sqe-cluster----
+    echo "               EESETUP: Starting cluster:${CLUSTER_NAME}..."
+    ${ASADMIN} start-cluster --user ${AS_ADMIN_USER} --passwordfile ${PASSWORD_FILE} --host ${AS_ADMIN_HOST} --port ${AS_ADMIN_PORT} ${CLUSTER_NAME}
+
+fi
+
+rm -f $PASSWORD_FILE
+echo "               EESETUP: EE setup complete!"
+
+# ---------  Notes. ------------
+
+#NOTE: There is an unstated jmx port 8686 which is 
+# currently not configurable. This port will need to be specified 
+# when creating the node agent.
+
+#NOTE: The domain should be up an running when the node agent is started. 
+
+#NOTE: The stop-nodeagent command currently does
+# not function due to a bug so should you ever need to stop the node
+# agent you must kill its process. In reality you should never need 
+# to stop the node agent once it is started.
+
+#NOTE: The ports by default will not conflict with those of the DAS. 
+#The http-listener port will default to 8079. 
+
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/config/eeunsetup b/appserver/tests/appserv-tests/devtests/cdi/config/eeunsetup
new file mode 100644
index 0000000..b5a1038
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/config/eeunsetup
@@ -0,0 +1,173 @@
+#!/bin/sh
+#
+# 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
+#
+
+
+#--- Extract environment properties --- "sed" doesn't work with iastools.zip used in windows
+PASSWORD_FILE=${APS_HOME}/devtests/connector/config/password.txt
+for x in `cat $APS_HOME/devtests/connector/config/ee-config.properties`
+do
+    varval=`echo $x |cut -d'=' -f1`
+                                                                                                                                                             
+    if [ $varval = "admin.user" ];
+    then
+        AS_ADMIN_USER=`echo $x |cut -d'=' -f2`
+    fi
+                                                                                                                                                             
+    if [ $varval = "admin.port" ];
+    then
+        AS_ADMIN_PORT=`echo $x |cut -d'=' -f2`
+    fi
+                                                                                                                                                             
+    if [ $varval = "admin.host" ];
+    then
+        AS_ADMIN_HOST=`echo $x |cut -d'=' -f2`
+    fi
+                                                                                                                                                             
+    if [ $varval = "orb.port" ];
+    then
+        ORB_LISTENER_1_PORT=`echo $x |cut -d'=' -f2`
+    fi
+                                                                                                                                                             
+    if [ $varval = "http.port" ];
+    then
+        HTTP_LISTENER_1_PORT=`echo $x |cut -d'=' -f2`
+    fi
+                                                                                                                                                             
+    if [ $varval = "https.port" ];
+    then
+        SSL_PORT=`echo $x |cut -d'=' -f2`
+    fi
+                                                                                                                                                             
+    if [ $varval = "admin.password" ];
+    then
+        echo "AS_ADMIN_PASSWORD=`echo $x |cut -d'=' -f2`" > ${PASSWORD_FILE}
+        echo "AS_ADMIN_ADMINPASSWORD=`echo $x |cut -d'=' -f2`" >> ${PASSWORD_FILE}
+    fi
+    
+    if [ $varval = "master.password" ];
+    then
+        echo "AS_ADMIN_MASTERPASSWORD=`echo $x |cut -d'=' -f2`" >> ${PASSWORD_FILE}
+    fi
+                                                                                                                                                             
+    if [ $varval = "admin.domain" ];
+    then
+        AS_ADMIN_DOMAIN=`echo $x |cut -d'=' -f2`
+    fi
+    if [ $varval = "nodeagent.name" ];
+    then
+        AS_ADMIN_NODEAGENT=`echo $x |cut -d'=' -f2`
+    fi
+                                                                                                                                                             
+    if [ $varval = "server.instance.name" ];
+    then
+        AS_ADMIN_SERVER=`echo $x |cut -d'=' -f2`
+    fi
+                                                                                                                                                             
+    if [ $varval = "cluster.name" ];
+    then
+        CLUSTER_NAME=`echo $x |cut -d'=' -f2`
+    fi
+                                                                                                                                                             
+    if [ $varval = "clustered.instance.name" ];
+    then
+        CLUSTERED_INSTANCE_NAME=`echo $x |cut -d'=' -f2`
+    fi
+                                                                                                                                                             
+    if [ $varval = "install.type" ];
+    then
+        INSTALL_TYPE=`echo $x |cut -d'=' -f2`
+    fi
+                                                                                                                                                             
+done
+                                                                                                                                                             
+ASADMIN=${S1AS_HOME}/bin/asadmin
+HTTP_LISTENER_2_PORT="1042"
+SSL_MUTUALAUTH_PORT="1058"
+JMX_SYSTEM_CONNECTOR_PORT="8687"
+                                                                                                                                                             
+export AS_ADMIN_USER
+#export AS_ADMIN_PASSWORD ## do not set AS_ADMIN_PASSWORD in env. -password option is deprecated.
+export AS_ADMIN_PORT
+export AS_ADMIN_HOST
+export AS_ADMIN_DOMAIN
+export AS_ADMIN_NODEAGENT
+export AS_ADMIN_SERVER
+export CLUSTER_NAME
+export CLUSTERED_INSTANCE_NAME
+                                                                                                                                                             
+
+LOG_DIR=$APS_HOME/devtests/jdbc/logs
+
+if [ ${INSTALL_TYPE} = "standalone" ]; then
+#  ----------------
+    # Stop server instance: sqe-server----
+    echo "              EEUNSETUP: stopping sever instance:${AS_ADMIN_SERVER}..."
+    ${ASADMIN} stop-instance \
+        --user ${AS_ADMIN_USER} \
+        --passwordfile ${PASSWORD_FILE} \
+        ${AS_ADMIN_SERVER}
+
+    ${ASADMIN} delete-instance \
+        --user ${AS_ADMIN_USER} \
+        --passwordfile ${PASSWORD_FILE} \
+        ${AS_ADMIN_SERVER}
+fi
+
+if [ ${INSTALL_TYPE} = "cluster" ]; then
+#  ----------------
+    # Create server instance: sqe-server----
+    echo "              EEUNSETUP: stopping cluster ${CLUSTER_NAME}"
+    ${ASADMIN} stop-cluster \
+        --user ${AS_ADMIN_USER} \
+        --passwordfile ${PASSWORD_FILE} \
+        ${CLUSTER_NAME}
+
+   ${ASADMIN} delete-instance \
+        --user ${AS_ADMIN_USER} \
+        --passwordfile ${PASSWORD_FILE} \
+        ${CLUSTERED_INSTANCE_NAME}_1
+
+   ${ASADMIN} delete-instance \
+        --user ${AS_ADMIN_USER} \
+        --passwordfile ${PASSWORD_FILE} \
+        ${CLUSTERED_INSTANCE_NAME}_2
+
+   ${ASADMIN} delete-cluster \
+        --user ${AS_ADMIN_USER} \
+        --passwordfile ${PASSWORD_FILE} \
+        ${CLUSTER_NAME}
+fi
+
+
+echo "              EEUNSETUP: stopping nodeagent....."
+${ASADMIN} stop-node-agent $AS_ADMIN_NODEAGENT
+
+echo "              EEUNSETUP: Deleting nodeagent....."
+${ASADMIN} delete-node-agent ${AS_ADMIN_NODEAGENT}
+
+echo "              EEUNSETUP: Deleting nodeagent config....."
+${ASADMIN} delete-node-agent-config --passwordfile ${PASSWORD_FILE} ${AS_ADMIN_NODEAGENT}
+
+echo "              EEUNSETUP: stopping domain...."
+${ASADMIN} stop-domain ${AS_ADMIN_DOMAIN}
+
+${ASADMIN} delete-domain ${AS_ADMIN_DOMAIN}
+echo "              EEUNSETUP: EE domain,server instance and nodeagent has been deleted"
+
+rm -f $PASSWORD_FILE
+echo "		    EEUNSETUP: Unsetup complete.... "
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/config/oracle.properties b/appserver/tests/appserv-tests/devtests/cdi/config/oracle.properties
new file mode 100644
index 0000000..7109dfb
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/config/oracle.properties
@@ -0,0 +1,25 @@
+#
+# 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
+#
+
+
+oracleForConnector.port=1527
+oracleForConnector.host=localhost
+oracleForConnector.sid=testdb
+oracleForConnector.user=dbuser
+oracleForConnector.pwd=dbpassword
+oracleForConnector.driver=org.apache.derby.jdbc.ClientDriver
+oracleForConnector.dbclass=org.apache.derby.jdbc.ClientXADataSource
+oracleForConnector.url=jdbc:derby://${oracleForConnector.host}:${oracleForConnector.port}/${oracleForConnector.sid};create=true;
diff --git a/appserver/tests/appserv-tests/devtests/cdi/config/oracle_datadirect.properties b/appserver/tests/appserv-tests/devtests/cdi/config/oracle_datadirect.properties
new file mode 100644
index 0000000..3b7fe95
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/config/oracle_datadirect.properties
@@ -0,0 +1,46 @@
+#
+# 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
+#
+
+
+db.port=1521
+db.host=natraj.sfbay.sun.com
+db.sid=dbsmpl1
+db.type=oracle
+db.name=dbsmpl1
+db.user=dbuser
+db.pwd=dbpassword
+db.driver=com.sun.sql.jdbc.oracle.OracleDriver
+db.class=com.sun.sql.jdbcx.oracle.OracleDataSource
+db.xaclass=com.sun.sql.jdbcx.oracle.OracleDataSource
+db.url=jdbc:sun:oracle://${db.host}:${db.port};SID=${db.sid}
+connector.url=jdbc\\:sun\\:oracle\\://natraj.sfbay.sun.com\\:1521\\;SID\\=dbsmpl1
+db.unixdriverpath=lib/drivers/oracle/smoracle.jar
+db.windriverpath=lib/drivers/oracle/smoracle.jar
+cpds.class=com.sun.sql.jdbcx.oracle.OracleDataSource
+isDBOracle=true
+datadirect=true
+
+#properties used by global transaction tests.
+txdb.port=1521
+txdb.host=natraj.sfbay.sun.com
+txdb.name=dbsmpl2
+txdb.user=pbpublic
+txdb.pwd=pbpublic
+txdb.url=jdbc:sun:oracle://natraj.sfbay.sun.com:1521;SID=dbsmpl2
+
+#Properties used by admincli
+adminclidb.user=admincli
+adminclidb.pwd=admincli
diff --git a/appserver/tests/appserv-tests/devtests/cdi/config/pe-config.properties b/appserver/tests/appserv-tests/devtests/cdi/config/pe-config.properties
new file mode 100644
index 0000000..4e1e6fc
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/config/pe-config.properties
@@ -0,0 +1,54 @@
+#
+# 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
+#
+
+
+execution.mode=pe
+admin.port=4848
+admin.user=admin
+admin.host=localhost
+admin.domain=domain1
+admin.domain.dir=${env.S1AS_HOME}/domains
+activeconsumer.maxnum=1
+mail.host="ha21sca.sfbay.sun.com"
+http.port=8080
+http.host=localhost
+https.host=localhost
+https.port=8181
+orb.port=3700
+admin.password=adminadmin
+master.password=changeit
+appserver.instance.name=server
+appserver.config.name=server-config
+directory.server.host=localhost
+directory.server.port=389
+directory.server.basedn=dc=sfbay,dc=sun,dc=com
+directory.manager.dn=cn=Directory Manager
+directory.manager.pwd=directorymanager
+server.dir=home/results/s1aspe80
+log.server.location=sardinia.sfbay.sun.com
+win.map.drive=Q:
+results.mailer=abc@sun.com
+results.mailee=xyz@sun.com
+interop.admin.port=5858
+interop.admin.host=localhost
+interop.admin.domain=domain2
+interop.http.port=9090
+interop.http.host=localhost
+interop.https.port=2043
+interop.orb.port=4700
+isInteropDomain=true
+resources.dottedname.prefix=domain.resources
+admin.password.file=${env.APS_HOME}/devtests/connector/config/password.txt
diff --git a/appserver/tests/appserv-tests/devtests/cdi/config/pointbase.properties b/appserver/tests/appserv-tests/devtests/cdi/config/pointbase.properties
new file mode 100644
index 0000000..27f6c75
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/config/pointbase.properties
@@ -0,0 +1,42 @@
+#
+# 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
+#
+
+
+db.port=9092
+db.host=localhost
+db.type=pointbase
+db.user=dbuser
+db.pwd=dbpassword
+db.name=sqe-samples
+db.class=com.pointbase.jdbc.jdbcDataSource
+db.xaclass=com.pointbase.xa.xaDataSource
+db.driver=com.pointbase.jdbc.jdbcUniversalDriver
+db.url=jdbc:pointbase:server://${db.host}:${db.port}/${db.name},new
+#db.unixdriverpath=lib/drivers/pointbase/pbclient.jar
+db.unixdriverpath=pointbase/lib/pbclient.jar
+db.windriverpath=lib/\drivers/\pointbase\/\pbclient.jar
+connector.url=jdbc\\:pointbase\\:server\\://${db.host}\\:${db.port}/${db.name},new
+cpds.class=com.pointbase.jdbc.jdbcDataSource
+isDBPointbase=true
+
+#properties used by global transaction tests.
+txdb.port=9095
+txdb.host=localhost
+txdb.name=txsample
+txdb.user=dbuser
+txdb.pwd=dbpassword
+txdb.url=jdbc:pointbase:server://localhost:9095/txsample,new
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/config/startee b/appserver/tests/appserv-tests/devtests/cdi/config/startee
new file mode 100644
index 0000000..aad2af1
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/config/startee
@@ -0,0 +1,142 @@
+#!/bin/sh
+#
+# 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
+#
+
+
+#--- Extract environment properties --- "sed" doesn't work with iastools.zip used in windows
+
+for x in `cat $APS_HOME/devtests/jdbc/config/ee-config.properties`
+do
+    varval=`echo $x |cut -d'=' -f1`
+
+    if [ $varval = "admin.user" ];
+    then
+        AS_ADMIN_USER=`echo $x |cut -d'=' -f2`
+    fi
+
+    if [ $varval = "admin.port" ];
+    then
+        AS_ADMIN_PORT=`echo $x |cut -d'=' -f2`
+    fi
+    
+    if [ $varval = "admin.host" ];
+    then
+        AS_ADMIN_HOST=`echo $x |cut -d'=' -f2`
+    fi
+
+    if [ $varval = "orb.port" ];
+    then
+        ORB_LISTENER_1_PORT=`echo $x |cut -d'=' -f2`
+    fi
+
+    if [ $varval = "http.port" ];
+    then
+        HTTP_LISTENER_1_PORT=`echo $x |cut -d'=' -f2`
+    fi
+
+    if [ $varval = "https.port" ];
+    then
+        SSL_PORT=`echo $x |cut -d'=' -f2`
+    fi
+    
+    if [ $varval = "admin.password" ];
+    then
+        AS_ADMIN_PASSWORD=`echo $x |cut -d'=' -f2`
+    fi
+
+    if [ $varval = "admin.domain" ];
+    then
+        AS_ADMIN_DOMAIN=`echo $x |cut -d'=' -f2`
+    fi
+    if [ $varval = "nodeagent.name" ];
+    then
+        AS_ADMIN_NODEAGENT=`echo $x |cut -d'=' -f2`
+    fi
+
+    if [ $varval = "server.instance.name" ];
+    then
+        AS_ADMIN_SERVER=`echo $x |cut -d'=' -f2`
+    fi
+
+    if [ $varval = "cluster.name" ];
+    then
+        CLUSTER_NAME="sqe-cluster"
+    fi
+
+    if [ $varval = "clustered.instance.name" ];
+    then
+        CLUSTERED_INSTANCE_NAME="clustered_server"
+    fi
+
+    if [ $varval = "install.type" ];
+    then
+        INSTALL_TYPE=`echo $x |cut -d'=' -f2`
+    fi
+
+done
+
+
+ASADMIN=${ASADMIN}/bin/asadmin
+HTTP_LISTENER_2_PORT="1042"
+SSL_MUTUALAUTH_PORT="1058"
+JMX_SYSTEM_CONNECTOR_PORT="8687"
+
+export AS_ADMIN_USER
+export AS_ADMIN_PASSWORD
+export AS_ADMIN_PORT
+export AS_ADMIN_HOST
+export AS_ADMIN_DOMAIN
+export AS_ADMIN_NODEAGENT
+export AS_ADMIN_SERVER
+export CLUSTER_NAME
+export CLUSTERED_INSTANCE_NAME
+
+##---  End Variables Definitions --------
+
+# Start domain: sqe-domain----
+echo "starting domain ${AS_ADMIN_DOMAIN}..."
+${S1AS_HOME}/bin/asadmin start-domain --user ${AS_ADMIN_USER} --password ${AS_ADMIN_PASSWORD} ${AS_ADMIN_DOMAIN}
+
+
+# Create node agent (sqe-agent) referencing sqe-domain.----
+echo "starting node agent: ${AS_ADMIN_NODEAGENT}..."
+${S1AS_HOME}/bin/asadmin start-node-agent --user ${AS_ADMIN_USER} --password ${AS_ADMIN_PASSWORD} ${AS_ADMIN_NODEAGENT}
+
+
+if [ ${INSTALL_TYPE} = "standalone" -o ${INSTALL_TYPE} = "all" ]; then
+
+    echo "Doing nothing,starting nodeagent would have started server instance"
+#  ----------------
+   #echo "Starting server instance ${AS_ADMIN_SERVER}"
+   # ${S1AS_HOME}/bin/asadmin start-instance \
+   #     -u ${AS_ADMIN_USER} \
+   #     -w ${AS_ADMIN_PASSWORD} \
+   #     ${AS_ADMIN_SERVER}
+
+fi
+
+if [ ${INSTALL_TYPE} = "cluster" -o ${INSTALL_TYPE} = "all" ]; then
+#  ----------------
+    # Start cluster: sqe-cluster----
+    echo "Starting cluster:${CLUSTER_NAME}..."
+    ${S1AS_HOME}/bin/asadmin start-cluster -u ${AS_ADMIN_USER} -w ${AS_ADMIN_PASSWORD} ${CLUSTER_NAME}
+
+
+fi
+
+
+echo "***All server process started***"
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/config/stopee b/appserver/tests/appserv-tests/devtests/cdi/config/stopee
new file mode 100644
index 0000000..6ee0ba9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/config/stopee
@@ -0,0 +1,90 @@
+#!/bin/sh
+#
+# 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
+#
+
+
+for x in `cat $APS_HOME/devtests/jdbc/config/ee-config.properties`
+do
+    varval=`echo $x |cut -d'=' -f1`
+
+    if [ $varval = "admin.user" ];
+    then
+        AS_ADMIN_USER=`echo $x |cut -d'=' -f2`
+    fi
+
+    if [ $varval = "admin.port" ];
+    then
+        AS_ADMIN_PORT=`echo $x |cut -d'=' -f2`
+    fi
+
+    if [ $varval = "admin.password" ];
+    then
+        AS_ADMIN_PASSWORD=`echo $x |cut -d'=' -f2`
+    fi
+
+    if [ $varval = "admin.domain" ];
+    then
+        AS_ADMIN_DOMAIN=`echo $x |cut -d'=' -f2`
+    fi
+    if [ $varval = "nodeagent.name" ];
+    then
+        AS_ADMIN_NODEAGENT=`echo $x |cut -d'=' -f2`
+    fi
+
+    if [ $varval = "server.instance.name" ];
+    then
+        AS_ADMIN_SERVER=`echo $x |cut -d'=' -f2`
+    fi
+
+    if [ $varval = "cluster.name" ];
+    then
+        CLUSTER_NAME="sqe-cluster"
+    fi
+
+    if [ $varval = "clustered.instance.name" ];
+    then
+        CLUSTERED_INSTANCE_NAME="clustered_server"
+    fi
+
+done
+
+
+export AS_ADMIN_USER
+export AS_ADMIN_PASSWORD
+export AS_ADMIN_PORT
+export AS_ADMIN_DOMAIN
+export AS_ADMIN_NODEAGENT
+export AS_ADMIN_SERVER
+export CLUSTER_NAME
+export CLUSTERED_INSTANCE_NAME
+
+##---  End Variables Definitions --------
+
+# stop standalone server instance ----
+
+# stop nodeagent ----
+echo "stopping nodeagent:${AS_ADMIN_NODEAGENT}..."
+${S1AS_HOME}/bin/asadmin stop-node-agent ${AS_ADMIN_NODEAGENT}
+
+# sleep ----
+echo "sleeping for 15 seconds..."
+sleep 15
+
+# stop domain ----
+echo "stopping domain ${AS_ADMIN_DOMAIN}..."
+${S1AS_HOME}/bin/asadmin stop-domain ${AS_ADMIN_DOMAIN}
+
+echo "***All Server Processes Stopped!"
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/build.xml b/appserver/tests/appserv-tests/devtests/cdi/decorators/build.xml
new file mode 100644
index 0000000..823b1b1
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/build.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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="decorators-test" default="usage" basedir=".">
+
+    <property name="decorators-target" value="all"/>
+
+    <target name="run-test">
+        <antcall target="decorators">
+        <param name="decorators-target" value="run-test"/>
+        </antcall>
+    </target>
+
+    <target name="all">
+        <antcall target="decorators">
+        <param name="decorators-target" value="all"/>
+        </antcall>
+    </target>
+
+    <target name="clean">
+        <antcall target="decorators">
+        <param name="decorators-target" value="clean"/>
+        </antcall>
+    </target>
+
+    <target name="build">
+        <antcall target="decorators">
+        <param name="decorators-target" value="build"/>
+        </antcall>
+    </target>
+
+    <target name="setup">
+        <antcall target="decorators">
+        <param name="decorators-target" value="setup"/>
+        </antcall>
+    </target>
+
+    <target name="deploy">
+        <antcall target="decorators">
+        <param name="decorators-target" value="deploy"/>
+        </antcall>
+    </target>
+
+    <target name="undeploy">
+        <antcall target="decorators">
+        <param name="decorators-target" value="undeploy"/>
+        </antcall>
+    </target>
+
+    <target name="unsetup">
+        <antcall target="decorators">
+        <param name="decorators-target" value="unsetup"/>
+        </antcall>
+    </target>
+
+    <target name="run">
+        <antcall target="decorators">
+        <param name="decorators-target" value="run"/>
+        </antcall>
+    </target>
+
+    <target name="decorators">
+        <record name="decorators.output" action="start" />
+            <ant dir="simple-decorator" target="${decorators-target}"/>
+        <record name="decorators.output" action="stop" />
+    </target>
+
+    <target name="usage">
+	<echo> Usage:
+		ant all (Executes all the decorators tests)
+		ant clean (cleans all the decorators tests)
+		ant build (builds all the decorators tests)
+		ant setup (sets up all resources for decorators tests)
+		ant deploy (deploys all the decorators apps)
+		ant run (Executes all the decorators tests)
+		ant undeploy (undeploys all the  decorators apps)
+		ant unsetup (unsets all resources for decorators tests)
+	</echo>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/README b/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/README
new file mode 100644
index 0000000..8c0e832
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/README
@@ -0,0 +1 @@
+Test to check if Beans produced from Producer Methods are decorated
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/build.properties b/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/build.properties
new file mode 100644
index 0000000..581be99
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-decorator-for-beeans-from-producer-methods"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/build.xml b/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/build.xml
new file mode 100644
index 0000000..0b9b3a3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/build.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/client/test/client/WebTest.java
new file mode 100644
index 0000000..d445b69
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/client/test/client/WebTest.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "decorators-decorator-for-beeans-from-producer-methods";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for interceptors");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/descriptor/beans.xml
new file mode 100644
index 0000000..efdec0d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/descriptor/beans.xml
@@ -0,0 +1,26 @@
+<!--
+
+    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
+
+-->
+
+<beans 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/beans_1_0.xsd">
+  <decorators>
+    <class>test.beans.TestBeanDecorator</class>
+  </decorators>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/servlet/test/beans/ProducedAtRuntime.java b/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/servlet/test/beans/ProducedAtRuntime.java
new file mode 100644
index 0000000..aca6de0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/servlet/test/beans/ProducedAtRuntime.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Retention(RUNTIME)
+@Target({METHOD, FIELD, PARAMETER, TYPE})
+public @interface ProducedAtRuntime {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/servlet/test/beans/TestBeanDecorator.java b/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/servlet/test/beans/TestBeanDecorator.java
new file mode 100644
index 0000000..82d43d0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/servlet/test/beans/TestBeanDecorator.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.decorator.Decorator;
+import javax.decorator.Delegate;
+import javax.inject.Inject;
+
+@Decorator
+public abstract class TestBeanDecorator implements TestBeanInterface{
+    
+    public static boolean decoratorCalled = false;
+    
+    @Inject
+    @Delegate
+    @ProducedAtRuntime
+    TestBeanInterface tb;
+
+    @Override
+    public String m1() {
+        System.out.println("Decorator called");
+        decoratorCalled = true;
+        return tb.m1();
+    }
+    
+    
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/servlet/test/beans/TestBeanImpl.java b/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/servlet/test/beans/TestBeanImpl.java
new file mode 100644
index 0000000..4c55e89
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/servlet/test/beans/TestBeanImpl.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public class TestBeanImpl implements TestBeanInterface {
+
+    @Override
+    public String m1() {
+        return "TestBeanImpl::m1";
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/servlet/test/beans/TestBeanInterface.java b/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/servlet/test/beans/TestBeanInterface.java
new file mode 100644
index 0000000..0afbf75
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/servlet/test/beans/TestBeanInterface.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public interface TestBeanInterface {
+    public String m1();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/servlet/test/beans/TestBeanProducer.java b/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/servlet/test/beans/TestBeanProducer.java
new file mode 100644
index 0000000..a171c87
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/servlet/test/beans/TestBeanProducer.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+import javax.enterprise.inject.New;
+import javax.enterprise.inject.Produces;
+
+public class TestBeanProducer {
+
+    @Produces
+    @ProducedAtRuntime
+    @RequestScoped
+    public TestBeanInterface getRuntimeTB(@New TestBeanImpl tbi) {
+        return tbi;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/servlet/test/servlet/TestDecorationOfBeansFromProducerMethodsTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/servlet/test/servlet/TestDecorationOfBeansFromProducerMethodsTestServlet.java
new file mode 100644
index 0000000..8fa868b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/decorators-over-beans-from-producer-methods/servlet/test/servlet/TestDecorationOfBeansFromProducerMethodsTestServlet.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.ProducedAtRuntime;
+import test.beans.TestBeanDecorator;
+import test.beans.TestBeanInterface;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class TestDecorationOfBeansFromProducerMethodsTestServlet extends HttpServlet {
+    @Inject
+    @ProducedAtRuntime
+    TestBeanInterface tb;
+    
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        if (tb == null)
+            msg += "Injection of request scoped bean failed";
+
+        tb.m1();
+        if (!TestBeanDecorator.decoratorCalled)
+            msg += "decorator for beans from producer methods not called";
+        
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/README b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/README
new file mode 100644
index 0000000..87401fe
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/README
@@ -0,0 +1,3 @@
+Test
+- Simple decorator test  
+    - ensure that decorated methods are called and the ability for the decorator to modify method arguments. 
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/build.properties b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/build.properties
new file mode 100644
index 0000000..5d45b07
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-simple-decorator"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/build.xml b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/build.xml
new file mode 100644
index 0000000..0b9b3a3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/build.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/client/test/client/WebTest.java
new file mode 100644
index 0000000..0a194c9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/client/test/client/WebTest.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "decorators-simple-decorator";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for interceptors");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/descriptor/beans.xml
new file mode 100644
index 0000000..54a5a82
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/descriptor/beans.xml
@@ -0,0 +1,30 @@
+<!--
+
+    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
+
+-->
+
+<beans 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/beans_1_0.xsd">
+  <interceptors>
+    <class>test.beans.TransactionInterceptor</class>
+    <class>test.beans.RequiresNewTransactionInterceptor</class>
+  </interceptors>
+  <decorators>
+    <class>test.beans.LargeTransactionDecorator</class>
+  </decorators>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/Account.java b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/Account.java
new file mode 100644
index 0000000..dfeaaa3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/Account.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import java.math.BigDecimal;
+
+public interface Account {
+
+    public BigDecimal getBalance();
+
+    public String getOwner();
+
+    public void withdraw(BigDecimal amount);
+
+    public void deposit(BigDecimal amount);
+
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/LargeTransactionDecorator.java b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/LargeTransactionDecorator.java
new file mode 100644
index 0000000..e0a1302
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/LargeTransactionDecorator.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import java.math.BigDecimal;
+
+import javax.decorator.Decorator;
+import javax.decorator.Delegate;
+import javax.inject.Inject;
+
+@Decorator
+public abstract class LargeTransactionDecorator implements Account {
+   public static boolean withDrawCalled = false;
+   public static boolean depositCalled = false;
+
+   @Inject @Delegate 
+   Account account;
+
+   @Override
+   public void withdraw(BigDecimal amount) {
+       System.out.println("LargeTransactionDecorator::withdraw");
+       LargeTransactionDecorator.withDrawCalled = true;
+       account.withdraw(amount);
+   }
+
+
+   @Override
+   public void deposit(BigDecimal amount){
+       System.out.println("LargeTransactionDecorator::deposit");
+       LargeTransactionDecorator.depositCalled = true;
+       account.deposit(amount);
+   }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/Preferred.java
new file mode 100644
index 0000000..fa8fdb7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/RequiresNewTransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/RequiresNewTransactionInterceptor.java
new file mode 100644
index 0000000..73f5964
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/RequiresNewTransactionInterceptor.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+@Interceptor
+@Transactional(requiresNew=true, rolesAllowed={"admin", "manager"})
+//the rolesAllowed value must be ignored as it s a non-binding attribute
+public class RequiresNewTransactionInterceptor  {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestDependentBean tb;
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("RequiresNewTransactionInterceptor::AroundInvoke");
+        if (tb == null) errorMessage="Dependency Injection " +
+                "into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/ShoppingCart.java b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/ShoppingCart.java
new file mode 100644
index 0000000..60a8a40
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/ShoppingCart.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+
+@Transactional(requiresNew=true)
+@Preferred
+public class ShoppingCart  {
+    
+    public void addItem(String s) {
+        System.out.println("ShoppingCart::addItem called");
+        
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/TestAccount.java b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/TestAccount.java
new file mode 100644
index 0000000..066e62b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/TestAccount.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import java.math.BigDecimal;
+
+public class TestAccount implements Account {
+    BigDecimal currentBal = new BigDecimal(100);
+
+    @Override
+    public void deposit(BigDecimal amount) {
+        System.out.println("TestAccount::deposit+" + amount);
+        
+        //get a bonus of 5
+        currentBal = currentBal.add(amount.add(new BigDecimal(5)));
+        System.out.println("new bal:" + currentBal);
+    }
+
+    @Override
+    public BigDecimal getBalance() {
+        System.out.println("TestAccount::getBalance");
+        return currentBal;
+    }
+
+    @Override
+    public String getOwner() {
+        return "test user";
+    }
+
+    @Override
+    public void withdraw(BigDecimal amount) {
+        System.out.println("TestAccount::withdraw-" + amount);
+        currentBal = currentBal.subtract(amount);
+        System.out.println("new bal:" + currentBal);
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/TestBean.java
new file mode 100644
index 0000000..4792d26
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/TestBean.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+
+@Transactional
+@RequestScoped
+@Preferred
+public class TestBean {
+
+    public void m1() {
+        System.out.println("TestBean::m1 called");
+    }
+
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/TestDependentBean.java b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/TestDependentBean.java
new file mode 100644
index 0000000..230c493
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/TestDependentBean.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import java.io.Serializable;
+
+public class TestDependentBean  {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/TransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/TransactionInterceptor.java
new file mode 100644
index 0000000..f762992
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/TransactionInterceptor.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+@Interceptor
+@Transactional
+public class TransactionInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestDependentBean tb;
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("TransactionInterceptor::AroundInvoke");
+        if (tb == null) errorMessage="Dependency Injection " +
+        		"into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/Transactional.java b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/Transactional.java
new file mode 100644
index 0000000..b8937b9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/beans/Transactional.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.enterprise.util.Nonbinding;
+import javax.interceptor.InterceptorBinding;
+
+@Target({TYPE, METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface Transactional {
+    boolean requiresNew() default false;
+    @Nonbinding String[] rolesAllowed() default {};
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/servlet/SimpleDecoratorTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/servlet/SimpleDecoratorTestServlet.java
new file mode 100644
index 0000000..a327946
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/decorators/simple-decorator/servlet/test/servlet/SimpleDecoratorTestServlet.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.math.BigDecimal;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.Account;
+import test.beans.LargeTransactionDecorator;
+import test.beans.Preferred;
+import test.beans.RequiresNewTransactionInterceptor;
+import test.beans.ShoppingCart;
+import test.beans.TestBean;
+import test.beans.TransactionInterceptor;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class SimpleDecoratorTestServlet extends HttpServlet {
+    @Inject
+    @Preferred
+    TestBean tb;
+    
+    @Inject
+    @Preferred
+    ShoppingCart sc;
+    
+    @Inject
+    Account testAccount;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        if (tb == null)
+            msg += "Injection of request scoped bean failed";
+
+        tb.m1();
+        if (!TransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke not called";
+        tb.m2();
+        if (TransactionInterceptor.aroundInvokeInvocationCount != 2)
+            msg += "Business method interceptor invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =2, actual="
+                    + TransactionInterceptor.aroundInvokeInvocationCount;
+        if (!TransactionInterceptor.errorMessage.trim().equals(""))
+            msg += TransactionInterceptor.errorMessage;
+        
+        if (RequiresNewTransactionInterceptor.aroundInvokeCalled)
+            msg += "RequiresNew TransactionInterceptor called when " +
+            		"it shouldn't have been called";
+        
+        TransactionInterceptor.clear();
+        //invoke shopping cart bean. This should result in an invocation on
+        //the RequiresNewTransactional
+        sc.addItem("Test Item");
+        if (!RequiresNewTransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke in requires new " +
+            		"transaction interceptor not called";
+        if (RequiresNewTransactionInterceptor.aroundInvokeInvocationCount != 1)
+            msg += "Business method requires new interceptor invocation on " +
+            		"method-level interceptor annotation count not expected. "
+                    + "expected =1, actual="
+                    + RequiresNewTransactionInterceptor.aroundInvokeInvocationCount;
+        if (!RequiresNewTransactionInterceptor.errorMessage.trim().equals(""))
+            msg += RequiresNewTransactionInterceptor.errorMessage;
+        
+        //TransactionInterceptor should not have been called
+        if (TransactionInterceptor.aroundInvokeCalled)
+            msg += "TranscationInterceptor aroundInvoke called when a requiresnew" +
+            		"transaction interceptor should have been called";
+        
+        //Test decorators
+        System.out.println(testAccount.getBalance());
+        if (testAccount.getBalance().compareTo(new BigDecimal(100)) != 0)            
+                msg += "Decorators:Invalid initial balance";
+        
+        testAccount.deposit(new BigDecimal(10));
+        if (testAccount.getBalance().compareTo(new BigDecimal(115)) != 0) //5 as bonus by the decorator
+            msg += "Decorators:Invalid balance after deposit";
+            
+        
+        testAccount.withdraw(new BigDecimal(10));
+        if (testAccount.getBalance().compareTo(new BigDecimal(105)) != 0)
+            msg += "Decorators:Invalid balance after withdrawal";
+
+        
+        if (!LargeTransactionDecorator.depositCalled)
+            msg += "deposit method in Decorator not called";
+        if (!LargeTransactionDecorator.withDrawCalled)
+            msg += "deposit method in Decorator not called";
+        
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/build.xml b/appserver/tests/appserv-tests/devtests/cdi/events/build.xml
new file mode 100644
index 0000000..63beb4a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/build.xml
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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="events-test" default="usage" basedir=".">
+
+    <property name="events-target" value="all"/>
+
+    <target name="run-test">
+        <antcall target="events">
+        <param name="events-target" value="run-test"/>
+        </antcall>
+    </target>
+
+    <target name="all">
+        <antcall target="events">
+        <param name="events-target" value="all"/>
+        </antcall>
+    </target>
+
+    <target name="clean">
+        <antcall target="events">
+        <param name="events-target" value="clean"/>
+        </antcall>
+    </target>
+
+    <target name="build">
+        <antcall target="events">
+        <param name="events-target" value="build"/>
+        </antcall>
+    </target>
+
+    <target name="setup">
+        <antcall target="events">
+        <param name="events-target" value="setup"/>
+        </antcall>
+    </target>
+
+    <target name="deploy">
+        <antcall target="events">
+        <param name="events-target" value="deploy"/>
+        </antcall>
+    </target>
+
+    <target name="undeploy">
+        <antcall target="events">
+        <param name="events-target" value="undeploy"/>
+        </antcall>
+    </target>
+
+    <target name="unsetup">
+        <antcall target="events">
+        <param name="events-target" value="unsetup"/>
+        </antcall>
+    </target>
+
+    <target name="run">
+        <antcall target="events">
+        <param name="events-target" value="run"/>
+        </antcall>
+    </target>
+
+    <target name="events">
+        <record name="events.output" action="start" />
+            <ant dir="simple-event-observers" target="${events-target}"/>
+<!--
+            <ant dir="conditional-observer" target="${events-target}"/>
+-->
+            <ant dir="event-producers" target="${events-target}"/>
+            <ant dir="multiple-event-qualifiers" target="${events-target}"/>
+        <record name="events.output" action="stop" />
+    </target>
+
+    <target name="usage">
+	<echo> Usage:
+		ant all (Executes all the events tests)
+		ant clean (cleans all the events tests)
+		ant build (builds all the events tests)
+		ant setup (sets up all resources for events tests)
+		ant deploy (deploys all the events apps)
+		ant run (Executes all the events tests)
+		ant undeploy (undeploys all the  events apps)
+		ant unsetup (unsets all resources for events tests)
+	</echo>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/README b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/README
new file mode 100644
index 0000000..d84291b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/README
@@ -0,0 +1,4 @@
+Test
+- Use of Events
+    - conditional observer methods. ensuring that there is no event notification
+    to a conversation scoped observer when there is no active conversation context
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/build.properties b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/build.properties
new file mode 100644
index 0000000..aaa9202
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-event-producers"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/build.xml b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/build.xml
new file mode 100644
index 0000000..0b9b3a3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/build.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/client/test/client/WebTest.java
new file mode 100644
index 0000000..1ea454b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/client/test/client/WebTest.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = 
+        "events-conditional-observers";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for interceptors");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/descriptor/beans.xml
new file mode 100644
index 0000000..1d355f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/descriptor/beans.xml
@@ -0,0 +1,25 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/servlet/test/beans/Approved.java b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/servlet/test/beans/Approved.java
new file mode 100644
index 0000000..7a107aa
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/servlet/test/beans/Approved.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Approved {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/servlet/test/beans/Created.java b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/servlet/test/beans/Created.java
new file mode 100644
index 0000000..f71048f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/servlet/test/beans/Created.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Created {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/servlet/test/beans/Document.java b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/servlet/test/beans/Document.java
new file mode 100644
index 0000000..d857f5a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/servlet/test/beans/Document.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public class Document {
+    String name = "";
+    public Document(String name) {
+        System.out.println("Document created with name" + name );
+        this.name = name;
+    }
+    
+    public void update(){
+        System.out.println("Document:" + name + " updated.");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/servlet/test/beans/SecondTestEventConditionalObserver.java b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/servlet/test/beans/SecondTestEventConditionalObserver.java
new file mode 100644
index 0000000..0a34e1e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/servlet/test/beans/SecondTestEventConditionalObserver.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import java.io.Serializable;
+
+import javax.enterprise.context.ConversationScoped;
+import javax.enterprise.event.Observes;
+import javax.enterprise.event.Reception;
+
+@ConversationScoped
+public class SecondTestEventConditionalObserver implements Serializable{
+    public static int documentCreatedEvent = 0;
+
+    //should not get called as there is no conversation is in this test
+    public void onDocumentCreate(@Observes(notifyObserver=Reception.IF_EXISTS) 
+            @Created Document d) {
+        System.out.println("TestEventObserver:onDocumentCreate");
+        documentCreatedEvent++;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/servlet/test/beans/TestEventConditionalObserver.java b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/servlet/test/beans/TestEventConditionalObserver.java
new file mode 100644
index 0000000..1725d36
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/servlet/test/beans/TestEventConditionalObserver.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+import javax.enterprise.event.Observes;
+import javax.enterprise.event.Reception;
+
+@RequestScoped
+public class TestEventConditionalObserver {
+    public static int documentCreatedEvent = 0;
+    public static int documentUpdatedEvent = 0;
+    public static int documentAnyEvents = 0;
+    public static int documentApprovedEvents = 0;
+
+    public void onDocumentCreate(@Observes(notifyObserver=Reception.IF_EXISTS) @Created Document d) {
+        System.out.println("TestEventObserver:onDocumentCreate");
+        documentCreatedEvent++;
+    }
+
+    public void onAnyDocumentEvent(@Observes Document d) {
+        System.out.println("TestEventObserver:onAnyDocumentUpdatedEvent");
+        documentAnyEvents++;
+    }
+
+    public void afterDocumentUpdate(@Observes @Updated Document d) {
+        System.out.println("TestEventObserver:afterDocumentUpdate");
+        documentUpdatedEvent++;
+    }
+    
+    public void onDocumentUpdatedAndApproved(
+            @Observes @Updated @Approved Document d){
+        System.out.println("TestEventObserver:updated and approved");
+        documentApprovedEvents++;
+        
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/servlet/test/beans/TestEventProducer.java b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/servlet/test/beans/TestEventProducer.java
new file mode 100644
index 0000000..92dafa7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/servlet/test/beans/TestEventProducer.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.event.Event;
+import javax.enterprise.util.AnnotationLiteral;
+import javax.inject.Inject;
+
+public class TestEventProducer {
+    @Inject Event<Document> docEvent;
+    
+    public void fireEvents(){
+        Document d = new Document("Test");
+        docEvent.fire(d); //general fire of a Document related event
+        
+        //send a created event
+        docEvent.select(
+                new AnnotationLiteral<Created>(){}).fire(d);
+        
+        
+        d.update();
+        //send an updated event
+        docEvent.select(
+                new AnnotationLiteral<Updated>(){}).fire(d);
+        
+        //send an updated and approved event
+        docEvent.select(new AnnotationLiteral<Updated>(){}, new AnnotationLiteral<Approved>(){}).fire(d);
+        
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/servlet/test/beans/Updated.java b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/servlet/test/beans/Updated.java
new file mode 100644
index 0000000..07c6894
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/servlet/test/beans/Updated.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Updated {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/servlet/test/servlet/ConditionalObserverTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/servlet/test/servlet/ConditionalObserverTestServlet.java
new file mode 100644
index 0000000..52863cb
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/conditional-observer/servlet/test/servlet/ConditionalObserverTestServlet.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.SecondTestEventConditionalObserver;
+import test.beans.TestEventConditionalObserver;
+import test.beans.TestEventProducer;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class ConditionalObserverTestServlet extends HttpServlet {
+
+    @Inject
+    TestEventProducer trsb;
+
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        trsb.fireEvents();
+        if (TestEventConditionalObserver.documentCreatedEvent != 1){
+            msg += "Document created event not received by observer";
+        }
+        
+        if (TestEventConditionalObserver.documentUpdatedEvent != 2){
+            msg += "Document updated event not received by observer";
+        }
+        
+        if (TestEventConditionalObserver.documentApprovedEvents != 1){
+            msg += "Document updated and approved event not " +
+            		"received by observer";
+        }
+        
+        if (TestEventConditionalObserver.documentAnyEvents != 4){
+            msg += "# of Document event received by observer does not " +
+            		"match expected values. expected = 2. observed="+ TestEventConditionalObserver.documentAnyEvents;
+        }
+        
+        if (SecondTestEventConditionalObserver.documentCreatedEvent > 0) 
+            msg += "A conditional observer was notified when it did not exist";
+        
+        
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/README b/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/README
new file mode 100644
index 0000000..1a0da81
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/README
@@ -0,0 +1,7 @@
+Test
+- Use of Events
+    - Simple observer methods that observer qualified and any events on a 
+    particular Event payload
+    - event producer to produce the appropriate event by specifying event 
+    qualifiers dynamically through the select() method
+    - events produced and observed with multiple event qualifiers
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/build.properties b/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/build.properties
new file mode 100644
index 0000000..aaa9202
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-event-producers"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/build.xml b/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/build.xml
new file mode 100644
index 0000000..0b9b3a3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/build.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/client/test/client/WebTest.java
new file mode 100644
index 0000000..5d6b503
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/client/test/client/WebTest.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = 
+        "events-simple-event-producer";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for interceptors");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/descriptor/beans.xml
new file mode 100644
index 0000000..1d355f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/descriptor/beans.xml
@@ -0,0 +1,25 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/servlet/test/beans/Approved.java b/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/servlet/test/beans/Approved.java
new file mode 100644
index 0000000..7a107aa
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/servlet/test/beans/Approved.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Approved {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/servlet/test/beans/Created.java b/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/servlet/test/beans/Created.java
new file mode 100644
index 0000000..f71048f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/servlet/test/beans/Created.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Created {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/servlet/test/beans/Document.java b/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/servlet/test/beans/Document.java
new file mode 100644
index 0000000..d857f5a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/servlet/test/beans/Document.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public class Document {
+    String name = "";
+    public Document(String name) {
+        System.out.println("Document created with name" + name );
+        this.name = name;
+    }
+    
+    public void update(){
+        System.out.println("Document:" + name + " updated.");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/servlet/test/beans/TestEventObserver.java b/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/servlet/test/beans/TestEventObserver.java
new file mode 100644
index 0000000..9bddd9a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/servlet/test/beans/TestEventObserver.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.event.Observes;
+
+public class TestEventObserver {
+    public static int documentCreatedEvent = 0;
+    public static int documentUpdatedEvent = 0;
+    public static int documentAnyEvents = 0;
+    public static int documentApprovedEvents = 0;
+
+    public void onDocumentCreate(@Observes @Created Document d) {
+        System.out.println("TestEventObserver:onDocumentCreate");
+        documentCreatedEvent++;
+    }
+
+    public void onAnyDocumentEvent(@Observes Document d) {
+        System.out.println("TestEventObserver:onAnyDocumentUpdatedEvent");
+        documentAnyEvents++;
+    }
+
+    public void afterDocumentUpdate(@Observes @Updated Document d) {
+        System.out.println("TestEventObserver:afterDocumentUpdate");
+        documentUpdatedEvent++;
+    }
+    
+    public void onDocumentUpdatedAndApproved(
+            @Observes @Updated @Approved Document d){
+        System.out.println("TestEventObserver:updated and approved");
+        documentApprovedEvents++;
+        
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/servlet/test/beans/TestEventProducer.java b/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/servlet/test/beans/TestEventProducer.java
new file mode 100644
index 0000000..92dafa7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/servlet/test/beans/TestEventProducer.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.event.Event;
+import javax.enterprise.util.AnnotationLiteral;
+import javax.inject.Inject;
+
+public class TestEventProducer {
+    @Inject Event<Document> docEvent;
+    
+    public void fireEvents(){
+        Document d = new Document("Test");
+        docEvent.fire(d); //general fire of a Document related event
+        
+        //send a created event
+        docEvent.select(
+                new AnnotationLiteral<Created>(){}).fire(d);
+        
+        
+        d.update();
+        //send an updated event
+        docEvent.select(
+                new AnnotationLiteral<Updated>(){}).fire(d);
+        
+        //send an updated and approved event
+        docEvent.select(new AnnotationLiteral<Updated>(){}, new AnnotationLiteral<Approved>(){}).fire(d);
+        
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/servlet/test/beans/Updated.java b/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/servlet/test/beans/Updated.java
new file mode 100644
index 0000000..07c6894
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/servlet/test/beans/Updated.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Updated {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/servlet/test/servlet/SimpleEventObserverTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/servlet/test/servlet/SimpleEventObserverTestServlet.java
new file mode 100644
index 0000000..b621081
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/event-producers/servlet/test/servlet/SimpleEventObserverTestServlet.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.TestEventObserver;
+import test.beans.TestEventProducer;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class SimpleEventObserverTestServlet extends HttpServlet {
+
+    @Inject
+    TestEventProducer trsb;
+
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        trsb.fireEvents();
+        if (TestEventObserver.documentCreatedEvent != 1){
+            msg += "Document created event not received by observer";
+        }
+        
+        if (TestEventObserver.documentUpdatedEvent != 2){
+            msg += "Document updated event not received by observer";
+        }
+        
+        if (TestEventObserver.documentApprovedEvents != 1){
+            msg += "Document updated and approved event not " +
+            		"received by observer";
+        }
+        
+        
+        if (TestEventObserver.documentAnyEvents != 4){
+            msg += "# of Document event received by observer does not " +
+            		"match expected values. expected = 2. observed="+ TestEventObserver.documentAnyEvents;
+        }
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/README b/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/README
new file mode 100644
index 0000000..dbbffd6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/README
@@ -0,0 +1,5 @@
+Test
+- Use of Events
+    - Event Qualifiers with members
+    - qualifier member value specified statically for event production and dynamically through a
+    subclass of AnnotationLiteral
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/build.properties b/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/build.properties
new file mode 100644
index 0000000..aaa9202
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-event-producers"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/build.xml b/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/build.xml
new file mode 100644
index 0000000..0b9b3a3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/build.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/client/test/client/WebTest.java
new file mode 100644
index 0000000..ded1d20
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/client/test/client/WebTest.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = 
+        "events-event-qualifiers-with-members";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for interceptors");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/descriptor/beans.xml
new file mode 100644
index 0000000..1d355f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/descriptor/beans.xml
@@ -0,0 +1,25 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/servlet/test/beans/Approved.java b/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/servlet/test/beans/Approved.java
new file mode 100644
index 0000000..7a107aa
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/servlet/test/beans/Approved.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Approved {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/servlet/test/beans/Created.java b/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/servlet/test/beans/Created.java
new file mode 100644
index 0000000..f71048f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/servlet/test/beans/Created.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Created {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/servlet/test/beans/Document.java b/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/servlet/test/beans/Document.java
new file mode 100644
index 0000000..d857f5a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/servlet/test/beans/Document.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public class Document {
+    String name = "";
+    public Document(String name) {
+        System.out.println("Document created with name" + name );
+        this.name = name;
+    }
+    
+    public void update(){
+        System.out.println("Document:" + name + " updated.");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/servlet/test/beans/TestEventConditionalObserver.java b/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/servlet/test/beans/TestEventConditionalObserver.java
new file mode 100644
index 0000000..8c2f110
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/servlet/test/beans/TestEventConditionalObserver.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+import javax.enterprise.event.Observes;
+import javax.enterprise.event.Reception;
+
+public class TestEventConditionalObserver {
+    public static int documentAdminUpdatedEvent,
+            documentFooUserUpdatedEvent = 0;
+
+    public void afterAdminDocumentUpdate(
+            @Observes @Updated(updatedBy = "admin") Document d) {
+        System.out.println("TestEventObserver:afterAdminDocumentUpdate");
+        documentAdminUpdatedEvent++;
+    }
+
+    public void afterFooUserDocumentUpdate(
+            @Observes @Updated(updatedBy = "FooUser") Document d) {
+        System.out.println("TestEventObserver:afterFooUserDocumentUpdate");
+        documentFooUserUpdatedEvent++;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/servlet/test/beans/TestEventProducer.java b/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/servlet/test/beans/TestEventProducer.java
new file mode 100644
index 0000000..407807f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/servlet/test/beans/TestEventProducer.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.event.Event;
+import javax.enterprise.util.AnnotationLiteral;
+import javax.inject.Inject;
+
+public class TestEventProducer {
+    @Inject Event<Document> docEvent;
+    
+    @Inject @Updated(updatedBy="admin") Event<Document> updatedByAdminEvent;
+    
+    public void fireEvents(){
+        Document d = new Document("Test");
+        docEvent.fire(d); //general fire of a Document related event
+        
+        //send a created event
+        docEvent.select(
+                new AnnotationLiteral<Created>(){}).fire(d);
+        
+        
+        d.update();
+        //send an updated by admin event
+        updatedByAdminEvent.fire(d);
+        
+        //send an updated by FooUser event
+        docEvent.select(new UserBinding("FooUser")).fire(d);
+        
+    }
+    
+
+}
+
+class UserBinding extends AnnotationLiteral<Updated> implements Updated{
+    private String userName;
+
+    public UserBinding(String userName){
+        this.userName = userName;
+    }
+
+    @Override
+    public String updatedBy() {
+        return this.userName;
+    }
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/servlet/test/beans/Updated.java b/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/servlet/test/beans/Updated.java
new file mode 100644
index 0000000..b6893f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/servlet/test/beans/Updated.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Updated {
+    String updatedBy();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/servlet/test/servlet/ConditionalObserverTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/servlet/test/servlet/ConditionalObserverTestServlet.java
new file mode 100644
index 0000000..9b25265
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/event-qualifiers-with-members/servlet/test/servlet/ConditionalObserverTestServlet.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.TestEventConditionalObserver;
+import test.beans.TestEventProducer;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class ConditionalObserverTestServlet extends HttpServlet {
+
+    @Inject
+    TestEventProducer trsb;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        trsb.fireEvents();
+        if (TestEventConditionalObserver.documentAdminUpdatedEvent != 1) {
+            msg += "Document updated event by admin not received by observer";
+        }
+
+        if (TestEventConditionalObserver.documentFooUserUpdatedEvent != 1) {
+            msg += "Document updated event by FooUser not received by observer";
+        }
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/README b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/README
new file mode 100644
index 0000000..23607e1
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/README
@@ -0,0 +1,4 @@
+Test
+- Use of Events
+    - Multiple Event Qualifiers and notification of observers when 
+    such qualifier types are combined
\ No newline at end of file
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/build.properties b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/build.properties
new file mode 100644
index 0000000..362e832
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-multiple-event-qualifiers"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/build.xml b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/build.xml
new file mode 100644
index 0000000..0b9b3a3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/build.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/client/test/client/WebTest.java
new file mode 100644
index 0000000..748fc4d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/client/test/client/WebTest.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = 
+        "events-multiple-event-qualifiers";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for interceptors");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/descriptor/beans.xml
new file mode 100644
index 0000000..1d355f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/descriptor/beans.xml
@@ -0,0 +1,25 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/servlet/test/beans/Approved.java b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/servlet/test/beans/Approved.java
new file mode 100644
index 0000000..7a107aa
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/servlet/test/beans/Approved.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Approved {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/servlet/test/beans/Blog.java b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/servlet/test/beans/Blog.java
new file mode 100644
index 0000000..573402b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/servlet/test/beans/Blog.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Blog {
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/servlet/test/beans/Created.java b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/servlet/test/beans/Created.java
new file mode 100644
index 0000000..f71048f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/servlet/test/beans/Created.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Created {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/servlet/test/beans/Document.java b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/servlet/test/beans/Document.java
new file mode 100644
index 0000000..6e6eee6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/servlet/test/beans/Document.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public class Document {
+    String name = "";
+    private boolean isBlog;
+    public Document(String name, boolean blog) {
+        System.out.println("Document created with name" + name );
+        this.name = name;
+        this.isBlog = blog;
+    }
+    
+    public boolean isBlog(){
+        return this.isBlog;
+    }
+    
+    public void update(){
+        System.out.println("Document:" + name + " updated.");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/servlet/test/beans/TestEventObserver.java b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/servlet/test/beans/TestEventObserver.java
new file mode 100644
index 0000000..7885b88
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/servlet/test/beans/TestEventObserver.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.event.Observes;
+
+public class TestEventObserver {
+    public static int documentAfterBlogUpdate;
+    public static int documentAfterDocumentUpdate;
+    public static int documentOnAnyBlogEvent;
+    public static int documentOnAnyDocumentEvent;
+
+    public void afterBlogUpdate(
+            @Observes @Updated @Blog Document d) {
+        System.out.println("TestEventObserver:afterBlogUpdate");
+        documentAfterBlogUpdate++;
+    }
+
+
+    public void afterDocumentUpdate(
+            @Observes @Updated  Document d) {
+        System.out.println("TestEventObserver:afterDocumentUpdate");
+        documentAfterDocumentUpdate++;
+    }
+    
+    public void onAnyBlogEvent(
+            @Observes @Blog Document d) {
+        System.out.println("TestEventObserver:onAnyBlogEvent");
+        documentOnAnyBlogEvent++;
+    }
+    
+    public void onAnyDocumentEvent(@Observes Document d){
+        System.out.println("TestEventObserver:onAnyDocumentEvent");
+        documentOnAnyDocumentEvent++;
+        
+    }
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/servlet/test/beans/TestEventProducer.java b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/servlet/test/beans/TestEventProducer.java
new file mode 100644
index 0000000..a1b19d2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/servlet/test/beans/TestEventProducer.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.event.Event;
+import javax.enterprise.util.AnnotationLiteral;
+import javax.inject.Inject;
+
+import com.sun.research.ws.wadl.Doc;
+
+public class TestEventProducer {
+    @Inject
+    Event<Document> docEvent;
+
+    @Inject @Blog
+    Event<Document> blogEvent;
+    public void fireEvents() {
+        Document d = new Document("Test", true);
+        docEvent.fire(d); // general fire of a Document related event
+
+        // send a created event
+        docEvent.select(new AnnotationLiteral<Created>() {
+        }).fire(d);
+
+        d.update();
+        // send an updated blog event
+        if (d.isBlog()){
+            blogEvent.select(new AnnotationLiteral<Updated>() {}).fire(d);
+        }
+
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/servlet/test/beans/Updated.java b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/servlet/test/beans/Updated.java
new file mode 100644
index 0000000..14cebc9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/servlet/test/beans/Updated.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Updated {
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/servlet/test/servlet/MultipleEventQualifierTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/servlet/test/servlet/MultipleEventQualifierTestServlet.java
new file mode 100644
index 0000000..cb2684a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/multiple-event-qualifiers/servlet/test/servlet/MultipleEventQualifierTestServlet.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.TestEventObserver;
+import test.beans.TestEventProducer;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class MultipleEventQualifierTestServlet extends HttpServlet {
+
+    @Inject
+    TestEventProducer trsb;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        trsb.fireEvents();
+        if (TestEventObserver.documentAfterBlogUpdate != 1) {
+            msg += "Blog updated event not received by observer";
+        }
+
+        if (TestEventObserver.documentAfterDocumentUpdate != 1) {
+            msg += "Document updated event not received by observer";
+        }
+        
+        if (TestEventObserver.documentOnAnyBlogEvent != 1) {
+            msg += "On Any Blog event not received by observer";
+        }
+        
+        if (TestEventObserver.documentOnAnyDocumentEvent != 3) {
+            msg += "On any document event not received by observer";
+        }
+        
+
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/README b/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/README
new file mode 100644
index 0000000..039a7e9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/README
@@ -0,0 +1,5 @@
+Test
+- Use of Events
+    -  Defining Event Qualifiers
+    - Simple observer methods that observer qualified and any events on a particular Event payload
+    - Simple event producer (with qualifiers) to produce the appropriate event
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/build.properties b/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/build.properties
new file mode 100644
index 0000000..5b4b830
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-simple-event-observer"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/build.xml b/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/build.xml
new file mode 100644
index 0000000..0b9b3a3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/build.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/client/test/client/WebTest.java
new file mode 100644
index 0000000..bcac1d2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/client/test/client/WebTest.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = 
+        "events-simple-event-observer";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for interceptors");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/descriptor/beans.xml
new file mode 100644
index 0000000..1d355f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/descriptor/beans.xml
@@ -0,0 +1,25 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/servlet/test/beans/Created.java b/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/servlet/test/beans/Created.java
new file mode 100644
index 0000000..f71048f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/servlet/test/beans/Created.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Created {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/servlet/test/beans/Document.java b/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/servlet/test/beans/Document.java
new file mode 100644
index 0000000..d857f5a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/servlet/test/beans/Document.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public class Document {
+    String name = "";
+    public Document(String name) {
+        System.out.println("Document created with name" + name );
+        this.name = name;
+    }
+    
+    public void update(){
+        System.out.println("Document:" + name + " updated.");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/servlet/test/beans/TestEventObserver.java b/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/servlet/test/beans/TestEventObserver.java
new file mode 100644
index 0000000..9b642a6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/servlet/test/beans/TestEventObserver.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.event.Observes;
+
+public class TestEventObserver {
+    public static int documentCreatedEvent = 0;
+    public static int documentUpdatedEvent = 0;
+    public static int documentAnyEvents = 0;
+
+    public void onDocumentCreate(@Observes @Created Document d) {
+        System.out.println("TestEventObserver:onDocumentCreate");
+        documentCreatedEvent++;
+    }
+
+    public void onAnyDocumentEvent(@Observes Document d) {
+        System.out.println("TestEventObserver:onAnyDocumentUpdatedEvent");
+        documentAnyEvents++;
+    }
+
+    public void afterDocumentUpdate(@Observes @Updated Document d) {
+        System.out.println("TestEventObserver:afterDocumentUpdate");
+        documentUpdatedEvent++;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/servlet/test/beans/TestRequestScopedBean.java b/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/servlet/test/beans/TestRequestScopedBean.java
new file mode 100644
index 0000000..aa0613e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/servlet/test/beans/TestRequestScopedBean.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.event.Event;
+import javax.inject.Inject;
+
+public class TestRequestScopedBean {
+    @Inject @Created Event<Document> docCreatedEvent;
+    @Inject @Updated Event<Document> docUpdatedEvent;
+    
+    public void fireEvents(){
+        Document d = new Document("Test");
+        docCreatedEvent.fire(d);
+        d.update();
+        docUpdatedEvent.fire(d);
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/servlet/test/beans/Updated.java b/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/servlet/test/beans/Updated.java
new file mode 100644
index 0000000..07c6894
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/servlet/test/beans/Updated.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Updated {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/servlet/test/servlet/SimpleEventObserverTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/servlet/test/servlet/SimpleEventObserverTestServlet.java
new file mode 100644
index 0000000..af1783e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/events/simple-event-observers/servlet/test/servlet/SimpleEventObserverTestServlet.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.TestEventObserver;
+import test.beans.TestRequestScopedBean;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class SimpleEventObserverTestServlet extends HttpServlet {
+
+    @Inject
+    TestRequestScopedBean trsb;
+
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        trsb.fireEvents();
+        if (TestEventObserver.documentCreatedEvent != 1){
+            msg += "Document created event not received by observer";
+        }
+        if (TestEventObserver.documentUpdatedEvent != 1){
+            msg += "Document updated event not received by observer";
+        }
+        
+        if (TestEventObserver.documentAnyEvents != 2){
+            msg += "# of Document event received by observer does not match expected values. expected = 2. observed="+ TestEventObserver.documentAnyEvents;
+        }
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/implicit/build.xml b/appserver/tests/appserv-tests/devtests/cdi/implicit/build.xml
new file mode 100644
index 0000000..8860d2f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/implicit/build.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../config/common.xml">
+<!ENTITY commonRun SYSTEM "./../../../config/run.xml">
+<!ENTITY reporting   SYSTEM "../report.xml">
+]>
+
+<project name="implicit-test" default="usage" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &commonRun;
+    &reporting;
+    
+    <property name="implicit-target" value="all"/>
+
+    <taskdef resource="net/sf/antcontrib/antcontrib.properties">
+        <classpath>
+            <pathelement location="${env.APS_HOME}/devtests/cdi/lib/ant-contrib-1.0b3.jar"/>
+        </classpath>
+    </taskdef>
+
+    <target name="run-test">
+        <antcall target="implicit">
+        <param name="implicit-target" value="run-test"/>
+        </antcall>
+    </target>
+
+    <target name="all">
+        <antcall target="implicit">
+        <param name="implicit-target" value="all"/>
+        </antcall>
+    </target>
+
+    <target name="clean">
+        <antcall target="implicit">
+        <param name="implicit-target" value="clean"/>
+        </antcall>
+    </target>
+
+    <target name="build">
+        <antcall target="implicit">
+        <param name="implicit-target" value="build"/>
+        </antcall>
+    </target>
+
+    <target name="setup">
+        <antcall target="implicit">
+        <param name="implicit-target" value="setup"/>
+        </antcall>
+    </target>
+
+    <target name="deploy">
+        <antcall target="implicit">
+        <param name="implicit-target" value="deploy"/>
+        </antcall>
+    </target>
+
+    <target name="undeploy">
+        <antcall target="implicit">
+        <param name="implicit-target" value="undeploy"/>
+        </antcall>
+    </target>
+
+    <target name="unsetup">
+        <antcall target="implicit">
+        <param name="implicit-target" value="unsetup"/>
+        </antcall>
+    </target>
+
+    <target name="run">
+        <antcall target="implicit">
+        <param name="implicit-target" value="run"/>
+        </antcall>
+    </target>
+
+    <target name="implicit">
+        <record name="implicit.output" action="start" />
+            <ant dir="simple-ejb-cdi" target="${implicit-target}"/>
+            <ant dir="deployment-option" target="${implicit-target}"/>
+            <!--ant dir="bean-discovery-mode-none" target="${implicit-target}"/-->
+        <record name="implicit.output" action="stop" />
+    </target>
+
+    <target name="usage">
+	<echo> Usage:
+		ant all (Executes all the smoke tests)
+		ant clean (cleans all the smoke tests)
+		ant build (builds all the smoke tests)
+		ant setup (sets up all resources for smoke tests)
+		ant deploy (deploys all the smoke apps)
+		ant run (Executes all the smoke tests)
+		ant undeploy (undeploys all the  smoke apps)
+		ant unsetup (unsets all resources for smoke tests)
+	</echo>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/build.properties b/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/build.properties
new file mode 100644
index 0000000..281ba02
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/build.properties
@@ -0,0 +1,33 @@
+<!--
+
+    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="simple-ejb-implicit-cdi-deployment-opt"/>
+<property name="appname" value="${module}"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="test.client" value="Client"/>
+<property name="application.xml" value="descriptor/application.xml"/>
+<property name="sun-application.xml" value="descriptor/sun-application.xml"/>
+<property name="ejb-jar.xml" value="descriptor/ejb-jar.xml"/>
+<property name="sun-ejb-jar.xml" value="descriptor/sun-ejb-jar.xml"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
+<property name="application-client.xml" value="descriptor/application-client.xml"/>
+<property name="sun-application-client.xml" value="descriptor/sun-application-client.xml"/>
+<property name="appclientjar.files" value="${build.classes.dir}"/>
+<property name="appclient.jar" value="${assemble.dir}/${appname}-client.jar"/>
+<property name="app.type" value="application"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/build.xml b/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/build.xml
new file mode 100644
index 0000000..f13f542
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/build.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="simple-ejb-implicit-cdi-deployment-opt" default="usage" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+      <antcall  target="clean-common"/>
+      <delete file="client/Client.java"/>
+    </target>
+
+    <target name="compile" depends="clean">
+        <copy file="client/Client.java.token" tofile="client/Client.java"/>
+        <replace file="client/Client.java" token="@ORB_PORT@" value="${orb.port}"/>
+
+        <antcall target="compile-common">
+            <param name="src" value="ejb"/>
+        </antcall>
+        <antcall target="compile-common">
+            <param name="src" value="client"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <antcall target="build-ear-common">
+            <param name="ejbjar.classes"
+                   value="**/Sless*.class, **/ImplicitTestBean.class"/>
+            <param name="appclientjar.classes"
+                   value="**/Client.class,**/Sless.class"/>
+        </antcall>
+    </target>
+
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-common">
+            <param name="extra-params" value="--property implicitCdiEnabled=false"/>
+        </antcall>
+    </target>
+
+    <target name="run" depends="init-common">
+        <antcall target="runclient-common"/>
+    </target>
+
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-common"/>
+    </target>
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/client/Client.java b/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/client/Client.java
new file mode 100644
index 0000000..65d580f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/client/Client.java
@@ -0,0 +1,74 @@
+/*
+ * 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.io.*;
+import java.util.*;
+import javax.ejb.EJB;
+import javax.naming.InitialContext;
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+public class Client {
+
+    private static SimpleReporterAdapter stat =
+        new SimpleReporterAdapter("appserv-tests");
+
+    public static void main (String[] args) {
+
+        stat.addDescription("simple-ejb-implicit-cdi-deployment-opt");
+        Client client = new Client(args);
+        client.doTest();
+        stat.printSummary("simple-ejb-implicit-cdi-deployment-opt");
+    }
+
+    public Client (String[] args) {
+    }
+
+    private static @EJB(mappedName="Sless") Sless sless;
+
+    public void doTest() {
+
+        try {
+
+            System.out.println("Creating InitialContext()");
+            InitialContext ic = new InitialContext();
+            org.omg.CORBA.ORB orb = (org.omg.CORBA.ORB) ic.lookup("java:comp/ORB");
+            Sless sless = (Sless) ic.lookup("Sless");
+
+            String response = null;
+
+            response = sless.hello();
+            testResponse("invoking stateless", response);
+
+            System.out.println("test complete");
+
+            stat.addStatus("local main", stat.PASS);
+
+        } catch(Exception e) {
+            e.printStackTrace();
+            stat.addStatus("local main" , stat.FAIL);
+        }
+
+    	return;
+    }
+
+    private void testResponse(String testDescription, String response){
+        // Expecting a null response because the injection should fail since implicit bean discovery
+        // is disabled by the deployment property implicitCdiEnabled=false
+        stat.addStatus(testDescription, (response == null ? stat.PASS : stat.FAIL));
+    }
+
+}
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/client/Client.java.token b/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/client/Client.java.token
new file mode 100644
index 0000000..f377ea1
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/client/Client.java.token
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2008, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.*;
+import java.util.*;
+import javax.ejb.EJB;
+import javax.naming.InitialContext;
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+public class Client {
+
+    private static SimpleReporterAdapter stat =
+        new SimpleReporterAdapter("appserv-tests");
+
+    public static void main (String[] args) {
+
+        stat.addDescription("simple-ejb-implicit-cdi-deployment-opt");
+        Client client = new Client(args);
+        client.doTest();
+        stat.printSummary("simple-ejb-implicit-cdi-deployment-opt");
+    }
+
+    public Client (String[] args) {
+    }
+
+    private static @EJB(mappedName="Sless") Sless sless;
+
+    public void doTest() {
+
+        try {
+
+            System.out.println("Creating InitialContext()");
+            InitialContext ic = new InitialContext();
+            org.omg.CORBA.ORB orb = (org.omg.CORBA.ORB) ic.lookup("java:comp/ORB");
+            Sless sless = (Sless) ic.lookup("Sless");
+
+            String response = null;
+
+            response = sless.hello();
+            testResponse("invoking stateless", response);
+
+            System.out.println("test complete");
+
+            stat.addStatus("local main", stat.PASS);
+
+        } catch(Exception e) {
+            e.printStackTrace();
+            stat.addStatus("local main" , stat.FAIL);
+        }
+
+    	return;
+    }
+
+    private void testResponse(String testDescription, String response){
+        // Expecting a null response because the injection should fail since implicit bean discovery
+        // is disabled by the deployment property implicitCdiEnabled=false
+        stat.addStatus(testDescription, (response == null ? stat.PASS : stat.FAIL));
+    }
+
+}
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/client/MANIFEST.MF b/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/client/MANIFEST.MF
new file mode 100644
index 0000000..20ba4bf
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/client/MANIFEST.MF
@@ -0,0 +1,4 @@
+Manifest-Version: 1.0
+Created-By: 1.4.0-beta3 (Sun Microsystems Inc.)
+Main-Class: Client
+Class-Path: reporter.jar
diff --git a/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/ejb/ImplicitTestBean.java b/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/ejb/ImplicitTestBean.java
new file mode 100644
index 0000000..c7ca937
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/ejb/ImplicitTestBean.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 javax.enterprise.context.RequestScoped;
+
+//Simple TestBean to test CDI.
+@RequestScoped
+public class ImplicitTestBean {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/ejb/Sless.java b/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/ejb/Sless.java
new file mode 100644
index 0000000..851ca56
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/ejb/Sless.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 javax.ejb.Remote;
+
+@Remote
+public interface Sless {
+    public String hello();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/ejb/SlessEJB.java b/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/ejb/SlessEJB.java
new file mode 100644
index 0000000..30d299a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/ejb/SlessEJB.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 javax.ejb.Stateless;
+import javax.inject.Inject;
+
+
+@Stateless
+public class SlessEJB implements Sless {
+
+    @Inject ImplicitTestBean tb; //Field Injection
+
+    public String hello() {
+        System.out.println("In SlessEJB:hello()");
+        if (tb != null) return "hello";
+        else return null;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/readme.txt b/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/readme.txt
new file mode 100644
index 0000000..ad1515b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/implicit/deployment-option/readme.txt
@@ -0,0 +1,3 @@
+client/Client.java is created during build process from client/Client.java.token via copying it and replacing token @ORB_PORT@ with the ORB port number from config.properties (${orb.pprt}).
+
+The application is deployed with the implicitCdiEnabled deployment property set to false, which disables CDI 1.1 implicit bean discovery.
diff --git a/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/build.properties b/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/build.properties
new file mode 100644
index 0000000..382bcd3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/build.properties
@@ -0,0 +1,33 @@
+<!--
+
+    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="simple-ejb-implicit-cdi"/>
+<property name="appname" value="${module}"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="test.client" value="Client"/>
+<property name="application.xml" value="descriptor/application.xml"/>
+<property name="sun-application.xml" value="descriptor/sun-application.xml"/>
+<property name="ejb-jar.xml" value="descriptor/ejb-jar.xml"/>
+<property name="sun-ejb-jar.xml" value="descriptor/sun-ejb-jar.xml"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
+<property name="application-client.xml" value="descriptor/application-client.xml"/>
+<property name="sun-application-client.xml" value="descriptor/sun-application-client.xml"/>
+<property name="appclientjar.files" value="${build.classes.dir}"/>
+<property name="appclient.jar" value="${assemble.dir}/${appname}-client.jar"/>
+<property name="app.type" value="application"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/build.xml b/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/build.xml
new file mode 100644
index 0000000..2b950fc
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/build.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="simple-ejb-cdi" default="usage" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+      <antcall  target="clean-common"/>
+      <delete file="client/Client.java"/>
+    </target>
+
+    <target name="compile" depends="clean">
+        <copy file="client/Client.java.token" tofile="client/Client.java"/>
+        <replace file="client/Client.java" token="@ORB_PORT@" value="${orb.port}"/>
+
+        <antcall target="compile-common">
+            <param name="src" value="ejb"/>
+        </antcall>
+        <antcall target="compile-common">
+            <param name="src" value="client"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <antcall target="build-ear-common">
+            <param name="ejbjar.classes"
+                   value="**/Sless*.class, **/ImplicitTestBean.class"/>
+            <param name="appclientjar.classes"
+                   value="**/Client.class,**/Sless.class"/>
+        </antcall>
+    </target>
+
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-common"/>
+    </target>
+
+    <target name="run" depends="init-common">
+        <antcall target="runclient-common"/>
+    </target>
+
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-common"/>
+    </target>
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/client/Client.java b/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/client/Client.java
new file mode 100644
index 0000000..339f717
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/client/Client.java
@@ -0,0 +1,98 @@
+/*
+ * 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.io.*;
+import java.util.*;
+import javax.ejb.EJB;
+import javax.naming.InitialContext;
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+public class Client {
+
+    private static SimpleReporterAdapter stat =
+        new SimpleReporterAdapter("appserv-tests");
+
+    public static void main (String[] args) {
+
+        stat.addDescription("simple-ejb-implicit-cdi");
+        Client client = new Client(args);
+        client.doTest();
+        stat.printSummary("simple-ejb-implicit-cdi");
+    }
+
+    public Client (String[] args) {
+    }
+
+    private static @EJB(mappedName="Sless") Sless sless;
+
+    //
+    // NOTE: Token 3700 will be replaced in @EJB annotations below
+    // with the value of the port from config.properties during the build
+    //
+    private static @EJB(mappedName="corbaname:iiop:localhost:3700#Sless") Sless sless2;
+
+    private static @EJB(mappedName="corbaname:iiop:localhost:3700#java:global/simple-ejb-implicit-cdiApp/simple-ejb-implicit-cdi-ejb/SlessEJB!Sless") Sless sless3;
+
+
+    public void doTest() {
+
+        try {
+
+            System.out.println("Creating InitialContext()");
+            InitialContext ic = new InitialContext();
+            org.omg.CORBA.ORB orb = (org.omg.CORBA.ORB) ic.lookup("java:comp/ORB");
+            Sless sless = (Sless) ic.lookup("Sless");
+
+            String response = null;
+
+            response = sless.hello();
+            testResponse("invoking stateless", response);
+
+	        response = sless2.hello();
+            testResponse("invoking stateless2", response);
+
+            System.out.println("ensuring that sless1 and sless2 are not equal");
+            if( !sless.equals(sless2) ) {
+                stat.addStatus("ensuring that sless1 and sless2 are not equal" , stat.FAIL);
+                throw new Exception("invalid equality checks on same " +
+                                    "sless session beans");
+            }
+
+
+	        response = sless3.hello();
+            testResponse("invoking stateless3", response);
+
+            System.out.println("test complete");
+
+            stat.addStatus("local main", stat.PASS);
+
+        } catch(Exception e) {
+            e.printStackTrace();
+            stat.addStatus("local main" , stat.FAIL);
+        }
+
+    	return;
+    }
+
+    private void testResponse(String testDescription, String response){
+        if(response.equals("hello"))
+            stat.addStatus(testDescription, stat.PASS);
+        else
+            stat.addStatus(testDescription, stat.FAIL);
+    }
+
+}
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/client/Client.java.token b/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/client/Client.java.token
new file mode 100644
index 0000000..d1e456d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/client/Client.java.token
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2008, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.*;
+import java.util.*;
+import javax.ejb.EJB;
+import javax.naming.InitialContext;
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+public class Client {
+
+    private static SimpleReporterAdapter stat =
+        new SimpleReporterAdapter("appserv-tests");
+
+    public static void main (String[] args) {
+
+        stat.addDescription("simple-ejb-implicit-cdi");
+        Client client = new Client(args);
+        client.doTest();
+        stat.printSummary("simple-ejb-implicit-cdi");
+    }
+
+    public Client (String[] args) {
+    }
+
+    private static @EJB(mappedName="Sless") Sless sless;
+
+    //
+    // NOTE: Token @ORB_PORT@ will be replaced in @EJB annotations below
+    // with the value of the port from config.properties during the build
+    //
+    private static @EJB(mappedName="corbaname:iiop:localhost:@ORB_PORT@#Sless") Sless sless2;
+
+    private static @EJB(mappedName="corbaname:iiop:localhost:@ORB_PORT@#java:global/simple-ejb-implicit-cdiApp/simple-ejb-implicit-cdi-ejb/SlessEJB!Sless") Sless sless3;
+
+
+    public void doTest() {
+
+        try {
+
+            System.out.println("Creating InitialContext()");
+            InitialContext ic = new InitialContext();
+            org.omg.CORBA.ORB orb = (org.omg.CORBA.ORB) ic.lookup("java:comp/ORB");
+            Sless sless = (Sless) ic.lookup("Sless");
+
+            String response = null;
+
+            response = sless.hello();
+            testResponse("invoking stateless", response);
+
+	        response = sless2.hello();
+            testResponse("invoking stateless2", response);
+
+            System.out.println("ensuring that sless1 and sless2 are not equal");
+            if( !sless.equals(sless2) ) {
+                stat.addStatus("ensuring that sless1 and sless2 are not equal" , stat.FAIL);
+                throw new Exception("invalid equality checks on same " +
+                                    "sless session beans");
+            }
+
+
+	        response = sless3.hello();
+            testResponse("invoking stateless3", response);
+
+            System.out.println("test complete");
+
+            stat.addStatus("local main", stat.PASS);
+
+        } catch(Exception e) {
+            e.printStackTrace();
+            stat.addStatus("local main" , stat.FAIL);
+        }
+
+    	return;
+    }
+
+    private void testResponse(String testDescription, String response){
+        if(response.equals("hello"))
+            stat.addStatus(testDescription, stat.PASS);
+        else
+            stat.addStatus(testDescription, stat.FAIL);
+    }
+
+}
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/client/MANIFEST.MF b/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/client/MANIFEST.MF
new file mode 100644
index 0000000..20ba4bf
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/client/MANIFEST.MF
@@ -0,0 +1,4 @@
+Manifest-Version: 1.0
+Created-By: 1.4.0-beta3 (Sun Microsystems Inc.)
+Main-Class: Client
+Class-Path: reporter.jar
diff --git a/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/ejb/ImplicitTestBean.java b/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/ejb/ImplicitTestBean.java
new file mode 100644
index 0000000..c7ca937
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/ejb/ImplicitTestBean.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 javax.enterprise.context.RequestScoped;
+
+//Simple TestBean to test CDI.
+@RequestScoped
+public class ImplicitTestBean {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/ejb/Sless.java b/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/ejb/Sless.java
new file mode 100644
index 0000000..851ca56
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/ejb/Sless.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 javax.ejb.Remote;
+
+@Remote
+public interface Sless {
+    public String hello();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/ejb/SlessEJB.java b/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/ejb/SlessEJB.java
new file mode 100644
index 0000000..30d299a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/ejb/SlessEJB.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 javax.ejb.Stateless;
+import javax.inject.Inject;
+
+
+@Stateless
+public class SlessEJB implements Sless {
+
+    @Inject ImplicitTestBean tb; //Field Injection
+
+    public String hello() {
+        System.out.println("In SlessEJB:hello()");
+        if (tb != null) return "hello";
+        else return null;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/readme.txt b/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/readme.txt
new file mode 100644
index 0000000..bad16d6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/implicit/simple-ejb-cdi/readme.txt
@@ -0,0 +1 @@
+client/Client.java is created during build process from client/Client.java.token via copying it and replacing token @ORB_PORT@ with the ORB port number from config.properties (${orb.pprt}).
diff --git a/appserver/tests/appserv-tests/devtests/cdi/injection-point/README b/appserver/tests/appserv-tests/devtests/cdi/injection-point/README
new file mode 100644
index 0000000..3892cf0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/injection-point/README
@@ -0,0 +1,4 @@
+Test
+- Use of InjectionPoint API to get dependent objects that needs to know something
+about the injection point(Logger and HttpParams example from the CDI documentation at
+https://docs.jboss.org/weld/reference/snapshot/en-US/html/injection.html#d0e1635)
diff --git a/appserver/tests/appserv-tests/devtests/cdi/injection-point/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/injection-point/WebTest.java
new file mode 100644
index 0000000..4fd782a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/injection-point/WebTest.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "injection-point-tests";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Testing InjectionPoint capabilities");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl?username=scott&password=tiger";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+        System.out.println("TESTNAME " + TEST_NAME);
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/injection-point/build.properties b/appserver/tests/appserv-tests/devtests/cdi/injection-point/build.properties
new file mode 100644
index 0000000..57ba5ff
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/injection-point/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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-programmatic-lookup"/>
+<property name="appname" value="${module}-servlet-annotation"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/injection-point/build.xml b/appserver/tests/appserv-tests/devtests/cdi/injection-point/build.xml
new file mode 100644
index 0000000..c0d904d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/injection-point/build.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/injection-point/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/injection-point/descriptor/beans.xml
new file mode 100644
index 0000000..c35311a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/injection-point/descriptor/beans.xml
@@ -0,0 +1,23 @@
+<!--
+
+    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
+
+-->
+
+<beans 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/beans_1_0.xsd">
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/injection-point/servlet/InjectionPointFilter.java b/appserver/tests/appserv-tests/devtests/cdi/injection-point/servlet/InjectionPointFilter.java
new file mode 100644
index 0000000..0fd897e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/injection-point/servlet/InjectionPointFilter.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.annotation.WebFilter;
+
+import test.artifacts.HttpParams;
+
+
+//A web filter to set ServletRequest in the thread local context.
+@WebFilter(urlPatterns="/*")
+public class InjectionPointFilter implements Filter{
+    
+    @Override
+    public void destroy() {
+        System.out.println("InjectionPointFilter::destroy");
+        
+    }
+
+    public void doFilter(ServletRequest req, ServletResponse res,
+            FilterChain arg2) throws IOException, ServletException {
+        System.out.println("InjectionPointFilter::doFilter");
+        //setting the ServletRequest in the thread-local 
+        //variable so that it could be used in HttpParams
+        HttpParams.sr.set(req); 
+        arg2.doFilter(req, res);
+    }
+
+    @Override
+    public void init(FilterConfig arg0) throws ServletException {
+        System.out.println("InjectionPointFilter::init");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/injection-point/servlet/InjectionPointServlet.java b/appserver/tests/appserv-tests/devtests/cdi/injection-point/servlet/InjectionPointServlet.java
new file mode 100644
index 0000000..137e205
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/injection-point/servlet/InjectionPointServlet.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.IOException;
+import java.io.PrintWriter;
+import java.util.logging.Logger;
+
+import javax.enterprise.inject.Instance;
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.artifacts.HttpParam;
+import test.artifacts.HttpParams;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class InjectionPointServlet extends HttpServlet {
+
+    @Inject
+    Logger log;
+
+    // Another workaround. The servletrequest is not available in HttpParams
+    // unless the request comes in and so we use programmatic lookup of the
+    // http parameters
+    @Inject
+    @HttpParam()
+    Instance<String> username;
+    @Inject
+    @HttpParam()
+    Instance<String> password;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        System.out.println("Injected logger into servlet:" + log);
+        boolean loggerAvailable = (log != null);
+        if (!loggerAvailable)
+            msg += " Logger unavailable:" + "injection into Servlet Failed ";
+
+        System.out.println("Injected username:" + username.get()
+                + " password:" + password.get());
+        boolean httpParamInjectionSuccess = username.get().equals("scott")
+                && password.get().equals("tiger");
+        if (!httpParamInjectionSuccess)
+            msg += " HTTP Parameter injection through InjectionPoint capabilities failed ";
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/injection-point/servlet/test/artifacts/HttpParam.java b/appserver/tests/appserv-tests/devtests/cdi/injection-point/servlet/test/artifacts/HttpParam.java
new file mode 100644
index 0000000..88e91c7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/injection-point/servlet/test/artifacts/HttpParam.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import static java.lang.annotation.ElementType.*;
+
+import javax.enterprise.util.Nonbinding;
+import javax.inject.Qualifier;
+
+@Qualifier
+@Retention(RetentionPolicy.RUNTIME)
+@Target({TYPE, METHOD, FIELD, PARAMETER})
+public @interface HttpParam {
+    @Nonbinding public String value() default ""; //If none specified, the injection point's member name is used as the parameter name.
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/injection-point/servlet/test/artifacts/HttpParams.java b/appserver/tests/appserv-tests/devtests/cdi/injection-point/servlet/test/artifacts/HttpParams.java
new file mode 100644
index 0000000..d7d2bd4
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/injection-point/servlet/test/artifacts/HttpParams.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+
+import java.util.Enumeration;
+
+import javax.enterprise.context.RequestScoped;
+import javax.enterprise.inject.Produces;
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.servlet.ServletRequest;
+
+@RequestScoped
+public class HttpParams {
+    //A thread local variable to house the servlet request. This is set by the
+    //servlet filter. This is not a recommended way to get hold of HttpServletRequest 
+    //in a CDI bean but a workaround that is described in
+    //http://www.seamframework.org/Community/HowToReachHttpServletRequestAndHttpServletResponseFromBean
+    //The right approach is to use JSF's FacesContext as described in
+    //https://docs.jboss.org/weld/reference/snapshot/en-US/html/injection.html#d0e1635
+    public static ThreadLocal<ServletRequest> sr = new ThreadLocal<ServletRequest>();
+    
+    @Produces
+    @HttpParam("")
+    String getParamValue(InjectionPoint ip) {
+        ServletRequest req = sr.get();
+        String parameterName = ip.getAnnotated().getAnnotation(HttpParam.class).value();
+        if (parameterName.trim().equals("")) parameterName = ip.getMember().getName();
+        return req.getParameter(parameterName);
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/injection-point/servlet/test/artifacts/LogFactory.java b/appserver/tests/appserv-tests/devtests/cdi/injection-point/servlet/test/artifacts/LogFactory.java
new file mode 100644
index 0000000..a486c8f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/injection-point/servlet/test/artifacts/LogFactory.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+
+import java.util.logging.Logger;
+
+import javax.enterprise.inject.Produces;
+import javax.enterprise.inject.spi.InjectionPoint;
+
+public class LogFactory {
+    @Produces Logger createLogger(InjectionPoint ip){
+        String name=ip.getMember().getDeclaringClass().getName();
+        System.out.println("Logger for:"+ name);
+        System.out.println("Logger:" + Logger.getLogger(name));
+        return Logger.getLogger(name);
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/build.xml b/appserver/tests/appserv-tests/devtests/cdi/interceptors/build.xml
new file mode 100644
index 0000000..0cb7ab1
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/build.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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="interceptors-test" default="usage" basedir=".">
+
+    <property name="interceptors-target" value="all"/>
+
+    <target name="run-test">
+        <antcall target="interceptors">
+        <param name="interceptors-target" value="run-test"/>
+        </antcall>
+    </target>
+
+    <target name="all">
+        <antcall target="interceptors">
+        <param name="interceptors-target" value="all"/>
+        </antcall>
+    </target>
+
+    <target name="clean">
+        <antcall target="interceptors">
+        <param name="interceptors-target" value="clean"/>
+        </antcall>
+    </target>
+
+    <target name="build">
+        <antcall target="interceptors">
+        <param name="interceptors-target" value="build"/>
+        </antcall>
+    </target>
+
+    <target name="setup">
+        <antcall target="interceptors">
+        <param name="interceptors-target" value="setup"/>
+        </antcall>
+    </target>
+
+    <target name="deploy">
+        <antcall target="interceptors">
+        <param name="interceptors-target" value="deploy"/>
+        </antcall>
+    </target>
+
+    <target name="undeploy">
+        <antcall target="interceptors">
+        <param name="interceptors-target" value="undeploy"/>
+        </antcall>
+    </target>
+
+    <target name="unsetup">
+        <antcall target="interceptors">
+        <param name="interceptors-target" value="unsetup"/>
+        </antcall>
+    </target>
+
+    <target name="run">
+        <antcall target="interceptors">
+        <param name="interceptors-target" value="run"/>
+        </antcall>
+    </target>
+
+    <target name="interceptors">
+        <record name="interceptors.output" action="start" />
+            <ant dir="interceptors-bean-validation" target="${interceptors-target}"/>
+            <ant dir="interceptors-binding-type-inheritance" target="${interceptors-target}"/>
+            <ant dir="interceptors-binding-type-with-members" target="${interceptors-target}"/>
+            <ant dir="interceptors-business-method-interception" target="${interceptors-target}"/>
+            <ant dir="interceptors-invalid-interceptor-specified-at-beans-xml" target="${interceptors-target}"/>
+            <ant dir="interceptors-multiple-interceptor-binding-annotations" target="${interceptors-target}"/>
+            <ant dir="interceptors-multiple-interceptors-for-a-binding-type" target="${interceptors-target}"/>
+            <ant dir="interceptors-use-of-at-interceptors" target="${interceptors-target}"/>
+            <ant dir="interceptors-use-of-interceptors-in-ejbs-through-at-interceptors" target="${interceptors-target}"/>
+            <ant dir="interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings" target="${interceptors-target}"/>
+        <record name="interceptors.output" action="stop" />
+    </target>
+
+    <target name="usage">
+	<echo> Usage:
+		ant all (Executes all the interceptors tests)
+		ant clean (cleans all the interceptors tests)
+		ant build (builds all the interceptors tests)
+		ant setup (sets up all resources for interceptors tests)
+		ant deploy (deploys all the interceptors apps)
+		ant run (Executes all the interceptors tests)
+		ant undeploy (undeploys all the  interceptors apps)
+		ant unsetup (unsets all resources for interceptors tests)
+	</echo>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/README b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/README
new file mode 100644
index 0000000..05388f4
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/README
@@ -0,0 +1,5 @@
+Test
+- Use of business method interceptors 
+    - definition of interceptor binding, interceptor and enabling
+interceptor in beans.xml. check interceptor AroundInvoke invocation count
+    - injection of beans into Interceptors  
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/build.properties b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/build.properties
new file mode 100644
index 0000000..90a4e51
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-bean-validation"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/build.xml b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/build.xml
new file mode 100644
index 0000000..4c7e300
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/build.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <property name="jpda.port" value="5009"/>
+    <property name="suspend"   value="n"/>
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java fork="true" classname="test.client.WebTest">
+          <jvmarg value="-agentlib:jdwp=transport=dt_socket,server=y,suspend=${suspend},address=${jpda.port}"/>
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/client/test/client/WebTest.java
new file mode 100644
index 0000000..0684cfd
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/client/test/client/WebTest.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "interceptors-bean-validation";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for interceptors");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url)).openConnection();
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/descriptor/beans.xml
new file mode 100644
index 0000000..1af38a6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/descriptor/beans.xml
@@ -0,0 +1,26 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+    <interceptors>
+        <class>test.beans.TestInterceptor</class>
+    </interceptors>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/AnotherTestBean.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/AnotherTestBean.java
new file mode 100644
index 0000000..a2d8873
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/AnotherTestBean.java
@@ -0,0 +1,45 @@
+/*
+ * 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.beans;
+
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+import javax.validation.constraints.NotNull;
+
+
+/**
+ * @author <a href="mailto:phil.zampino@oracle.com">Phil Zampino</a>
+ */
+@CDITest
+public class AnotherTestBean {
+
+    private TestProduct tp;
+
+
+    @Inject
+    public AnotherTestBean(@Preferred TestProduct testProduct) {
+        this.tp = testProduct;
+    }
+
+
+    @PostConstruct
+    public void log() {
+        System.out.println("TestProduct injected: " + (tp != null));
+    }
+
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/BadProducer.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/BadProducer.java
new file mode 100644
index 0000000..c5e5f43
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/BadProducer.java
@@ -0,0 +1,38 @@
+/*
+ * 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.beans;
+
+import javax.enterprise.inject.Produces;
+
+
+/**
+ * @author <a href="mailto:phil.zampino@oracle.com">Phil Zampino</a>
+ */
+public class BadProducer {
+
+    @Produces @Preferred
+    public TestProduct getTestProduct() {
+        System.out.println(getClass().getName() + "#getTestProducer() invoked...returning null");
+        return null; // This producer is bad because it always returns null
+    }
+
+    @Produces @Preferred
+    public String getPreferredString() {
+        return null;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/Bar.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/Bar.java
new file mode 100644
index 0000000..d0bf09f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/Bar.java
@@ -0,0 +1,23 @@
+/*
+ * 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.beans;
+
+/**
+ * @author <a href="mailto:phil.zampino@oracle.com">Phil Zampino</a>
+ */
+public interface Bar {
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/BarImpl.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/BarImpl.java
new file mode 100644
index 0000000..63b2ab8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/BarImpl.java
@@ -0,0 +1,23 @@
+/*
+ * 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.beans;
+
+/**
+ * @author <a href="mailto:phil.zampino@oracle.com">Phil Zampino</a>
+ */
+public class BarImpl implements Bar {
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/CDITest.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/CDITest.java
new file mode 100644
index 0000000..a21f4fb
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/CDITest.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.interceptor.InterceptorBinding;
+
+
+@Target({TYPE, METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface CDITest {
+
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/Foo.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/Foo.java
new file mode 100644
index 0000000..326d12e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/Foo.java
@@ -0,0 +1,26 @@
+/*
+ * 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.beans;
+
+/**
+ * @author <a href="mailto:phil.zampino@oracle.com">Phil Zampino</a>
+ */
+public interface Foo {
+
+    public String value();
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/FooImpl.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/FooImpl.java
new file mode 100644
index 0000000..fdee67b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/FooImpl.java
@@ -0,0 +1,29 @@
+/*
+ * 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.beans;
+
+/**
+ * @author <a href="mailto:phil.zampino@oracle.com">Phil Zampino</a>
+ */
+public class FooImpl implements Foo {
+
+    @Override
+    public String value() {
+        return getClass().getName();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/Preferred.java
new file mode 100644
index 0000000..4323e19
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/Preferred.java
@@ -0,0 +1,34 @@
+/*
+ * 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.beans;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+
+import javax.inject.Qualifier;
+
+
+/**
+ * @author <a href="mailto:phil.zampino@oracle.com">Phil Zampino</a>
+ */
+@Qualifier
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE})
+public @interface Preferred {
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/TestBean.java
new file mode 100644
index 0000000..2515cf2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/TestBean.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.annotation.PostConstruct;
+import javax.enterprise.context.RequestScoped;
+
+import javax.validation.constraints.NotNull;
+
+import javax.inject.Inject;
+
+
+@RequestScoped
+@CDITest
+public class TestBean {
+
+    private Bar myBar;
+
+    @Inject
+    private Foo myFoo;
+
+    private String ctorLog;
+
+    public TestBean() {
+        ctorLog = "no-args ctor";
+    }
+
+
+    @Inject
+    public TestBean(@NotNull Bar bar) {
+        ctorLog = "annotated ctor";
+        this.myBar = bar;
+    }
+
+    @PostConstruct
+    private void log() {
+        System.out.println(toString() + ": ctor=" + getConstructorLog() + " ; myFoo=" + myFoo.toString() + " ; myBar=" + myBar.toString());
+    }
+
+    public String echo(@NotNull String message) {
+        System.out.println("TestBean::echo called with String argument: " + message);
+        return message + " : " + myFoo.value() + " : " + myBar.toString();
+    }
+
+
+    public void hello(String name) {
+        System.out.println("TestBean::hello called with String argument: " + name);
+    }
+
+
+    public String getConstructorLog() {
+        return ctorLog;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/TestDependentBean.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/TestDependentBean.java
new file mode 100644
index 0000000..0811a03
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/TestDependentBean.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+
+import javax.inject.Inject;
+
+
+public class TestDependentBean {
+
+    @Inject TestBean bean;
+
+
+    public TestBean getTestBean() {
+        return bean;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/TestInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/TestInterceptor.java
new file mode 100644
index 0000000..de03948
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/TestInterceptor.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundConstruct;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+@CDITest
+@Interceptor
+public class TestInterceptor {
+
+    public static boolean aroundConstructCalled = false;
+    public static int     aroundConstructInvocationCount = 0;
+
+    public static boolean aroundInvokeCalled = false;
+    public static int     aroundInvokeInvocationCount = 0;
+
+    public static String  errorMessage = "";
+
+    @AroundConstruct
+    public void interceptConstruction(InvocationContext ctx) throws Exception {
+
+        System.out.println(getClass().getName() + "::AroundConstruct");
+
+        aroundConstructCalled = true;
+        aroundConstructInvocationCount++;
+
+        ctx.proceed();
+    }
+
+    @AroundInvoke
+    public Object interceptInvocation(InvocationContext ctx) throws Exception {
+
+        System.out.println(getClass().getName() + "::AroundInvoke");
+
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount++;
+
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundConstructCalled = false;
+        aroundConstructInvocationCount = 0;
+        errorMessage = "";
+    }
+
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/TestProduct.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/TestProduct.java
new file mode 100644
index 0000000..95e32ad
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/beans/TestProduct.java
@@ -0,0 +1,28 @@
+/*
+ * 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.beans;
+
+/**
+ * @author <a href="mailto:phil.zampino@oracle.com">Phil Zampino</a>
+ */
+public class TestProduct {
+
+    public TestProduct() {
+        System.out.println(getClass().getName() + "Default Constructor invoked.");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/servlet/BusinessMethodInterceptorTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/servlet/BusinessMethodInterceptorTestServlet.java
new file mode 100644
index 0000000..e5302a9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-bean-validation/servlet/test/servlet/BusinessMethodInterceptorTestServlet.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.AnotherTestBean;
+import test.beans.Preferred;
+import test.beans.TestBean;
+import test.beans.TestInterceptor;
+
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class BusinessMethodInterceptorTestServlet extends HttpServlet {
+
+    @Inject
+    TestBean tb;
+
+
+    @Inject @Preferred
+    String echoMessage;
+
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        if (tb == null) {
+            msg += "Injection of request scoped bean failed ";
+        }
+
+        // Violate the constraint on the echo method
+        try {
+            tb.echo(null);
+            msg += "; Expected ConstraintViolationException not thrown ";
+        } catch (Exception e) {
+            // Expected exception
+            if (!"javax.validation.ConstraintViolationException".equals(e.getClass().getName())) {
+                msg += "; Unexpected exception: " + e.getClass().getName();
+            }
+        }
+
+        // Since validation failed, the aroundConstruct interceptor method should still have been called
+        if (!TestInterceptor.aroundConstructCalled) {
+            msg += "; Business method interceptor aroundConstruct was not called ";
+        }
+
+        // Since validation failed, the interceptor should not have been called
+        if (TestInterceptor.aroundInvokeCalled || TestInterceptor.aroundInvokeInvocationCount != 0) {
+            msg += "; Business method interceptor aroundInvoke should not have been called ";
+        }
+
+        tb.echo("Test Echo Request Message");
+
+        if (!TestInterceptor.aroundConstructCalled) {
+            msg += "; Business method interceptor aroundConstruct not called ";
+        }
+
+        if (!TestInterceptor.aroundInvokeCalled || TestInterceptor.aroundInvokeInvocationCount != 1) {
+            msg += "; Business method interceptor aroundInvoke not called ";
+        }
+
+        tb.hello("Client");
+
+        if (TestInterceptor.aroundInvokeInvocationCount != 2) {
+            msg += "Business method interceptor invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected=2, actual="
+                    + TestInterceptor.aroundInvokeInvocationCount;
+        }
+
+        if (TestInterceptor.aroundConstructInvocationCount != 1) {
+            msg += "Bean construct interceptor invocation count not expected. "
+                    + "expected=1, actual="
+                    + TestInterceptor.aroundConstructInvocationCount;
+        }
+
+        if (!TestInterceptor.errorMessage.trim().equals("")) {
+            msg += TestInterceptor.errorMessage;
+        }
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/README b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/README
new file mode 100644
index 0000000..d71c47b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/README
@@ -0,0 +1,5 @@
+Test
+- Use of business method interceptors 
+    - Interceptor binding type inheritance
+    - bean annotated with @Action bound to TranscationInterceptor, 
+    SecureInterceptor, TransactionalSecureInterceptor
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/build.properties b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/build.properties
new file mode 100644
index 0000000..8432d77
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-interceptor-binding-type-inheritance"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/build.xml b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/build.xml
new file mode 100644
index 0000000..0b9b3a3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/build.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/client/test/client/WebTest.java
new file mode 100644
index 0000000..3c45f3c
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/client/test/client/WebTest.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = 
+        "interceptors-interceptor-binding-type-inheritance";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for interceptors");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/descriptor/beans.xml
new file mode 100644
index 0000000..c7dc6b2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/descriptor/beans.xml
@@ -0,0 +1,30 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+   <interceptors>
+      <class>test.beans.TransactionalSecureInterceptor</class>
+      <class>test.beans.TransactionInterceptor</class>
+      <class>test.beans.SecureInterceptor</class>
+   </interceptors>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/Action.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/Action.java
new file mode 100644
index 0000000..684bd63
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/Action.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+import javax.interceptor.InterceptorBinding;
+
+@Target({ TYPE, METHOD })
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+@Transactional @Secure
+public @interface Action {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/Preferred.java
new file mode 100644
index 0000000..fa8fdb7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/SecondShoppingCart.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/SecondShoppingCart.java
new file mode 100644
index 0000000..c7cd9a5
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/SecondShoppingCart.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+@Action
+@Preferred
+public class SecondShoppingCart {
+
+    public void checkout() {
+        System.out.println("SecondShoppingCart::checkout");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/Secure.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/Secure.java
new file mode 100644
index 0000000..90251e3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/Secure.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+import javax.interceptor.InterceptorBinding;
+
+@Target({ TYPE, METHOD })
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface Secure {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/SecureInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/SecureInterceptor.java
new file mode 100644
index 0000000..7085281
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/SecureInterceptor.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+@Secure @Interceptor
+public class SecureInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestRequestScopedBean tb;
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        
+        System.out.println("SecureInterceptor::AroundInvoke");
+        if (tb == null) errorMessage="Dependency Injection " +
+                "into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        tb.interceptorInvocationOrder.add(this.getClass().getCanonicalName());
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/ShoppingCart.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/ShoppingCart.java
new file mode 100644
index 0000000..793c408
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/ShoppingCart.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public class ShoppingCart {
+    
+    @Action public void checkout(){
+        System.out.println("ShoppingCart::checkout");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/TestBean.java
new file mode 100644
index 0000000..4792d26
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/TestBean.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+
+@Transactional
+@RequestScoped
+@Preferred
+public class TestBean {
+
+    public void m1() {
+        System.out.println("TestBean::m1 called");
+    }
+
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/TestRequestScopedBean.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/TestRequestScopedBean.java
new file mode 100644
index 0000000..4317821
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/TestRequestScopedBean.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.enterprise.context.RequestScoped;
+
+@RequestScoped
+public class TestRequestScopedBean {
+    public static List<String> interceptorInvocationOrder = new ArrayList<String>();
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/TransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/TransactionInterceptor.java
new file mode 100644
index 0000000..5e47864
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/TransactionInterceptor.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+@Transactional @Interceptor
+public class TransactionInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestRequestScopedBean tb;
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        
+        System.out.println("TransactionInterceptor::AroundInvoke");
+        if (tb == null) errorMessage="Dependency Injection " +
+                "into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        tb.interceptorInvocationOrder.add(this.getClass().getCanonicalName());
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/Transactional.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/Transactional.java
new file mode 100644
index 0000000..42f2c58
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/Transactional.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.interceptor.InterceptorBinding;
+
+@Target({TYPE, METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface Transactional {
+
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/TransactionalSecureInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/TransactionalSecureInterceptor.java
new file mode 100644
index 0000000..ddcdff6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/beans/TransactionalSecureInterceptor.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+@Transactional @Secure @Interceptor
+public class TransactionalSecureInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestRequestScopedBean tb;
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        
+        System.out.println("TransactionalSecureInterceptor::AroundInvoke");
+        if (tb == null) errorMessage="Dependency Injection " +
+                "into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        tb.interceptorInvocationOrder.add(this.getClass().getCanonicalName());
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/servlet/BindingTypeInheritanceTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/servlet/BindingTypeInheritanceTestServlet.java
new file mode 100644
index 0000000..0d74aae
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-inheritance/servlet/test/servlet/BindingTypeInheritanceTestServlet.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.Preferred;
+import test.beans.SecondShoppingCart;
+import test.beans.SecureInterceptor;
+import test.beans.ShoppingCart;
+import test.beans.TestBean;
+import test.beans.TransactionInterceptor;
+import test.beans.TransactionalSecureInterceptor;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class BindingTypeInheritanceTestServlet extends HttpServlet {
+
+    @Inject
+    ShoppingCart sc;
+
+    @Inject
+    @Preferred
+    SecondShoppingCart sc2;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        // Now use the two shopping cart to test TransactionalSecureInterceptor
+        sc.checkout();
+        if (!TransactionalSecureInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke on "
+                    + "TransactionSecureInterceptor not called";
+
+        if (!TransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke on "
+                    + "TransactionInterceptor not called";
+
+        if (!SecureInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke on "
+                    + "SecureInterceptor not called";
+
+        if (TransactionalSecureInterceptor.aroundInvokeInvocationCount != 1)
+            msg += "Business method interceptor invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =1, actual="
+                    + TransactionalSecureInterceptor.aroundInvokeInvocationCount;
+        if (!TransactionalSecureInterceptor.errorMessage.trim().equals(""))
+            msg += TransactionalSecureInterceptor.errorMessage;
+
+        // reset all counts
+        TransactionInterceptor.clear();
+        SecureInterceptor.clear();
+        TransactionalSecureInterceptor.clear();
+
+        // try on the second shopping cart bean
+        sc2.checkout();
+        if (!TransactionalSecureInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke on "
+                    + "TransactionSecureInterceptor not called";
+
+        if (!TransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke on "
+                    + "TransactionInterceptor not called";
+
+        if (!SecureInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke on "
+                    + "SecureInterceptor not called";
+
+        if (TransactionalSecureInterceptor.aroundInvokeInvocationCount != 1)
+            msg += "Business method interceptor invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =1, actual="
+                    + TransactionalSecureInterceptor.aroundInvokeInvocationCount;
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/README b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/README
new file mode 100644
index 0000000..3e2d829
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/README
@@ -0,0 +1,6 @@
+Test
+- Use of business method interceptors 
+    - definition of interceptor binding type with members
+    - association of an interceptor binding type with different values for a member 
+    variable with different interceptors
+    - non-binding members in an interceptor binding type 
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/build.properties b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/build.properties
new file mode 100644
index 0000000..669edc0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-binding-types-with-members"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/build.xml b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/build.xml
new file mode 100644
index 0000000..0b9b3a3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/build.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/client/test/client/WebTest.java
new file mode 100644
index 0000000..ed0bec0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/client/test/client/WebTest.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "interceptors-business-method-interceptors";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for interceptors");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/descriptor/beans.xml
new file mode 100644
index 0000000..bc97106
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/descriptor/beans.xml
@@ -0,0 +1,29 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+   <interceptors>
+      <class>test.beans.TransactionInterceptor</class>
+      <class>test.beans.RequiresNewTransactionInterceptor</class>
+   </interceptors>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/servlet/test/beans/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/servlet/test/beans/Preferred.java
new file mode 100644
index 0000000..fa8fdb7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/servlet/test/beans/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/servlet/test/beans/RequiresNewTransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/servlet/test/beans/RequiresNewTransactionInterceptor.java
new file mode 100644
index 0000000..73f5964
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/servlet/test/beans/RequiresNewTransactionInterceptor.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+@Interceptor
+@Transactional(requiresNew=true, rolesAllowed={"admin", "manager"})
+//the rolesAllowed value must be ignored as it s a non-binding attribute
+public class RequiresNewTransactionInterceptor  {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestDependentBean tb;
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("RequiresNewTransactionInterceptor::AroundInvoke");
+        if (tb == null) errorMessage="Dependency Injection " +
+                "into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/servlet/test/beans/ShoppingCart.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/servlet/test/beans/ShoppingCart.java
new file mode 100644
index 0000000..60a8a40
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/servlet/test/beans/ShoppingCart.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+
+@Transactional(requiresNew=true)
+@Preferred
+public class ShoppingCart  {
+    
+    public void addItem(String s) {
+        System.out.println("ShoppingCart::addItem called");
+        
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/servlet/test/beans/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/servlet/test/beans/TestBean.java
new file mode 100644
index 0000000..4792d26
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/servlet/test/beans/TestBean.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+
+@Transactional
+@RequestScoped
+@Preferred
+public class TestBean {
+
+    public void m1() {
+        System.out.println("TestBean::m1 called");
+    }
+
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/servlet/test/beans/TestDependentBean.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/servlet/test/beans/TestDependentBean.java
new file mode 100644
index 0000000..230c493
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/servlet/test/beans/TestDependentBean.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import java.io.Serializable;
+
+public class TestDependentBean  {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/servlet/test/beans/TransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/servlet/test/beans/TransactionInterceptor.java
new file mode 100644
index 0000000..f762992
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/servlet/test/beans/TransactionInterceptor.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+@Interceptor
+@Transactional
+public class TransactionInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestDependentBean tb;
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("TransactionInterceptor::AroundInvoke");
+        if (tb == null) errorMessage="Dependency Injection " +
+        		"into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/servlet/test/beans/Transactional.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/servlet/test/beans/Transactional.java
new file mode 100644
index 0000000..b8937b9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/servlet/test/beans/Transactional.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.enterprise.util.Nonbinding;
+import javax.interceptor.InterceptorBinding;
+
+@Target({TYPE, METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface Transactional {
+    boolean requiresNew() default false;
+    @Nonbinding String[] rolesAllowed() default {};
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/servlet/test/servlet/BusinessMethodInterceptorTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/servlet/test/servlet/BusinessMethodInterceptorTestServlet.java
new file mode 100644
index 0000000..7dfbb05
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-binding-type-with-members/servlet/test/servlet/BusinessMethodInterceptorTestServlet.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.Preferred;
+import test.beans.RequiresNewTransactionInterceptor;
+import test.beans.ShoppingCart;
+import test.beans.TestBean;
+import test.beans.TransactionInterceptor;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class BusinessMethodInterceptorTestServlet extends HttpServlet {
+    @Inject
+    @Preferred
+    TestBean tb;
+    
+    @Inject
+    @Preferred
+    ShoppingCart sc;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        if (tb == null)
+            msg += "Injection of request scoped bean failed";
+
+        tb.m1();
+        if (!TransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke not called";
+        tb.m2();
+        if (TransactionInterceptor.aroundInvokeInvocationCount != 2)
+            msg += "Business method interceptor invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =2, actual="
+                    + TransactionInterceptor.aroundInvokeInvocationCount;
+        if (!TransactionInterceptor.errorMessage.trim().equals(""))
+            msg += TransactionInterceptor.errorMessage;
+        
+        if (RequiresNewTransactionInterceptor.aroundInvokeCalled)
+            msg += "RequiresNew TransactionInterceptor called when " +
+            		"it shouldn't have been called";
+        
+        TransactionInterceptor.clear();
+        //invoke shopping cart bean. This should result in an invocation on
+        //the RequiresNewTransactional
+        sc.addItem("Test Item");
+        if (!RequiresNewTransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke in requires new " +
+            		"transaction interceptor not called";
+        if (RequiresNewTransactionInterceptor.aroundInvokeInvocationCount != 1)
+            msg += "Business method requires new interceptor invocation on " +
+            		"method-level interceptor annotation count not expected. "
+                    + "expected =1, actual="
+                    + RequiresNewTransactionInterceptor.aroundInvokeInvocationCount;
+        if (!RequiresNewTransactionInterceptor.errorMessage.trim().equals(""))
+            msg += RequiresNewTransactionInterceptor.errorMessage;
+        
+        //TransactionInterceptor should not have been called
+        if (TransactionInterceptor.aroundInvokeCalled)
+            msg += "TranscationInterceptor aroundInvoke called when a requiresnew" +
+            		"transaction interceptor should have been called";
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/README b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/README
new file mode 100644
index 0000000..05388f4
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/README
@@ -0,0 +1,5 @@
+Test
+- Use of business method interceptors 
+    - definition of interceptor binding, interceptor and enabling
+interceptor in beans.xml. check interceptor AroundInvoke invocation count
+    - injection of beans into Interceptors  
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/build.properties b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/build.properties
new file mode 100644
index 0000000..7fee82e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-business-method-interceptors"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/build.xml b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/build.xml
new file mode 100644
index 0000000..0b9b3a3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/build.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/client/test/client/WebTest.java
new file mode 100644
index 0000000..ed0bec0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/client/test/client/WebTest.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "interceptors-business-method-interceptors";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for interceptors");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/descriptor/beans.xml
new file mode 100644
index 0000000..f075638
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/descriptor/beans.xml
@@ -0,0 +1,28 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+   <interceptors>
+      <class>test.beans.TransactionInterceptor</class>
+   </interceptors>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/servlet/test/beans/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/servlet/test/beans/Preferred.java
new file mode 100644
index 0000000..fa8fdb7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/servlet/test/beans/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/servlet/test/beans/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/servlet/test/beans/TestBean.java
new file mode 100644
index 0000000..4792d26
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/servlet/test/beans/TestBean.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+
+@Transactional
+@RequestScoped
+@Preferred
+public class TestBean {
+
+    public void m1() {
+        System.out.println("TestBean::m1 called");
+    }
+
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/servlet/test/beans/TestDependentBean.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/servlet/test/beans/TestDependentBean.java
new file mode 100644
index 0000000..1c15313
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/servlet/test/beans/TestDependentBean.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public class TestDependentBean {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/servlet/test/beans/TransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/servlet/test/beans/TransactionInterceptor.java
new file mode 100644
index 0000000..f762992
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/servlet/test/beans/TransactionInterceptor.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+@Interceptor
+@Transactional
+public class TransactionInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestDependentBean tb;
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("TransactionInterceptor::AroundInvoke");
+        if (tb == null) errorMessage="Dependency Injection " +
+        		"into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/servlet/test/beans/Transactional.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/servlet/test/beans/Transactional.java
new file mode 100644
index 0000000..eef70c9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/servlet/test/beans/Transactional.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.interceptor.InterceptorBinding;
+
+
+@Target({TYPE, METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface Transactional {
+
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/servlet/test/servlet/BusinessMethodInterceptorTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/servlet/test/servlet/BusinessMethodInterceptorTestServlet.java
new file mode 100644
index 0000000..504d347
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-business-method-interception/servlet/test/servlet/BusinessMethodInterceptorTestServlet.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.Preferred;
+import test.beans.TestBean;
+import test.beans.TransactionInterceptor;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class BusinessMethodInterceptorTestServlet extends HttpServlet {
+    @Inject
+    @Preferred
+    TestBean tb;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        if (tb == null)
+            msg += "Injection of request scoped bean failed";
+
+        tb.m1();
+        if (!TransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke not called";
+        tb.m2();
+        if (TransactionInterceptor.aroundInvokeInvocationCount != 2)
+            msg += "Business method interceptor invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =2, actual="
+                    + TransactionInterceptor.aroundInvokeInvocationCount;
+        if (!TransactionInterceptor.errorMessage.trim().equals(""))
+            msg += TransactionInterceptor.errorMessage;
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/README b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/README
new file mode 100644
index 0000000..f430f60
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/README
@@ -0,0 +1,4 @@
+Test
+- Use of business method interceptors 
+    - invalid specification of interceptor class in beans.xml should result
+    in deployment failure of archive.  
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/build.properties b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/build.properties
new file mode 100644
index 0000000..baeb63b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-invalid-interceptor-in-beans-xml"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/build.xml b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/build.xml
new file mode 100644
index 0000000..0b9b3a3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/build.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/client/test/client/WebTest.java
new file mode 100644
index 0000000..351ad46
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/client/test/client/WebTest.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+    private static final String TEST_NAME = "interceptors-invalid-interceptor-specified-in-beans-xml";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for interceptors");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        // We expect the call to fail with a 404 as the archive should
+        // not have deployed
+        if (code != 404) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            stat.addStatus(TEST_NAME, stat.PASS);
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/descriptor/beans.xml
new file mode 100644
index 0000000..efe55d8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/descriptor/beans.xml
@@ -0,0 +1,28 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+   <interceptors>
+      <class>test.beans.INVALIDInterceptor</class>
+   </interceptors>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/servlet/test/beans/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/servlet/test/beans/Preferred.java
new file mode 100644
index 0000000..fa8fdb7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/servlet/test/beans/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/servlet/test/beans/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/servlet/test/beans/TestBean.java
new file mode 100644
index 0000000..4792d26
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/servlet/test/beans/TestBean.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+
+@Transactional
+@RequestScoped
+@Preferred
+public class TestBean {
+
+    public void m1() {
+        System.out.println("TestBean::m1 called");
+    }
+
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/servlet/test/beans/TestDependentBean.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/servlet/test/beans/TestDependentBean.java
new file mode 100644
index 0000000..1c15313
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/servlet/test/beans/TestDependentBean.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public class TestDependentBean {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/servlet/test/beans/TransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/servlet/test/beans/TransactionInterceptor.java
new file mode 100644
index 0000000..f762992
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/servlet/test/beans/TransactionInterceptor.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+@Interceptor
+@Transactional
+public class TransactionInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestDependentBean tb;
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("TransactionInterceptor::AroundInvoke");
+        if (tb == null) errorMessage="Dependency Injection " +
+        		"into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/servlet/test/beans/Transactional.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/servlet/test/beans/Transactional.java
new file mode 100644
index 0000000..42f2c58
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/servlet/test/beans/Transactional.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.interceptor.InterceptorBinding;
+
+@Target({TYPE, METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface Transactional {
+
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/servlet/test/servlet/InvalidInterceptorInBeansXMLTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/servlet/test/servlet/InvalidInterceptorInBeansXMLTestServlet.java
new file mode 100644
index 0000000..ccce0fb
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-invalid-interceptor-specified-at-beans-xml/servlet/test/servlet/InvalidInterceptorInBeansXMLTestServlet.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.Preferred;
+import test.beans.TestBean;
+import test.beans.TransactionInterceptor;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class InvalidInterceptorInBeansXMLTestServlet extends HttpServlet {
+    @Inject
+    @Preferred
+    TestBean tb;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        if (tb == null)
+            msg += "Injection of request scoped bean failed";
+
+        tb.m1();
+        if (!TransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke not called";
+        tb.m2();
+        if (TransactionInterceptor.aroundInvokeInvocationCount != 2)
+            msg += "Business method interceptor invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =2, actual="
+                    + TransactionInterceptor.aroundInvokeInvocationCount;
+        if (!TransactionInterceptor.errorMessage.trim().equals(""))
+            msg += TransactionInterceptor.errorMessage;
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/README b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/README
new file mode 100644
index 0000000..6278c1e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/README
@@ -0,0 +1,5 @@
+Test
+- Use of business method interceptors 
+    - Multiple interceptor binding annotations in an interceptor
+    - Interceptors bound to a method through the placement of @Transactional @Secure
+    at various places (Class level, method level)
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/build.properties b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/build.properties
new file mode 100644
index 0000000..a5b08a4
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-multiple-interceptor-binding-annotations"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/build.xml b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/build.xml
new file mode 100644
index 0000000..0b9b3a3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/build.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/client/test/client/WebTest.java
new file mode 100644
index 0000000..77abe96
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/client/test/client/WebTest.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = 
+        "interceptors-multiple-interceptor-binding-annotations";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for interceptors");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/descriptor/beans.xml
new file mode 100644
index 0000000..7b9b221
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/descriptor/beans.xml
@@ -0,0 +1,28 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+   <interceptors>
+      <class>test.beans.TransactionalSecureInterceptor</class>
+   </interceptors>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/Preferred.java
new file mode 100644
index 0000000..fa8fdb7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/SecondShoppingCart.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/SecondShoppingCart.java
new file mode 100644
index 0000000..00ef3e2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/SecondShoppingCart.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+@Transactional
+//Differs from the other shopping cart in placement of annotations
+@Preferred
+public class SecondShoppingCart {
+    @Secure
+    public void checkout(){
+        System.out.println("SecondShoppingCart::checkout");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/Secure.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/Secure.java
new file mode 100644
index 0000000..377cb2f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/Secure.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+import javax.interceptor.InterceptorBinding;
+
+@Qualifier
+@Target({ TYPE, METHOD })
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface Secure {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/ShoppingCart.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/ShoppingCart.java
new file mode 100644
index 0000000..b99ce6c
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/ShoppingCart.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public class ShoppingCart {
+    
+    @Transactional @Secure public void checkout(){
+        System.out.println("ShoppingCart::checkout");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/TestBean.java
new file mode 100644
index 0000000..4792d26
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/TestBean.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+
+@Transactional
+@RequestScoped
+@Preferred
+public class TestBean {
+
+    public void m1() {
+        System.out.println("TestBean::m1 called");
+    }
+
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/TestRequestScopedBean.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/TestRequestScopedBean.java
new file mode 100644
index 0000000..4317821
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/TestRequestScopedBean.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.enterprise.context.RequestScoped;
+
+@RequestScoped
+public class TestRequestScopedBean {
+    public static List<String> interceptorInvocationOrder = new ArrayList<String>();
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/ThirdShoppingCart.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/ThirdShoppingCart.java
new file mode 100644
index 0000000..7cd15c7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/ThirdShoppingCart.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+
+@Transactional @Secure
+//Differs from the other shopping cart in placement of annotations
+@Preferred
+public class ThirdShoppingCart {
+    public void checkout(){
+        System.out.println("SecondShoppingCart::checkout");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/Transactional.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/Transactional.java
new file mode 100644
index 0000000..42f2c58
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/Transactional.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.interceptor.InterceptorBinding;
+
+@Target({TYPE, METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface Transactional {
+
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/TransactionalSecureInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/TransactionalSecureInterceptor.java
new file mode 100644
index 0000000..d47052d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/beans/TransactionalSecureInterceptor.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+@Transactional @Secure @Interceptor
+public class TransactionalSecureInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestRequestScopedBean tb;
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        
+        System.out.println("TransactionInterceptor::AroundInvoke");
+        if (tb == null) errorMessage="Dependency Injection " +
+                "into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        tb.interceptorInvocationOrder.add(this.getClass().getCanonicalName());
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/servlet/MultipleInterceptorBindingAnnotationsTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/servlet/MultipleInterceptorBindingAnnotationsTestServlet.java
new file mode 100644
index 0000000..7e2d824
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptor-binding-annotations/servlet/test/servlet/MultipleInterceptorBindingAnnotationsTestServlet.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.Preferred;
+import test.beans.SecondShoppingCart;
+import test.beans.ShoppingCart;
+import test.beans.TestBean;
+import test.beans.TestRequestScopedBean;
+import test.beans.ThirdShoppingCart;
+import test.beans.TransactionalSecureInterceptor;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class MultipleInterceptorBindingAnnotationsTestServlet extends HttpServlet {
+    @Inject
+    @Preferred
+    TestBean tb;
+    
+    @Inject
+    ShoppingCart sc;
+    
+    @Inject
+    @Preferred
+    SecondShoppingCart sc2;
+
+    @Inject
+    @Preferred
+    ThirdShoppingCart sc3;
+    
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        if (tb == null)
+            msg += "Injection of bean (that is being intercepted) failed";
+
+        tb.m1();
+        if (TransactionalSecureInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke on " +
+            		"TransactionSecureInterceptor called when it shouldn't have";
+        tb.m2();
+        if (TransactionalSecureInterceptor.aroundInvokeInvocationCount != 0)
+            msg += "Business method interceptor invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =0, actual="
+                    + TransactionalSecureInterceptor.aroundInvokeInvocationCount;
+        if (!TransactionalSecureInterceptor.errorMessage.trim().equals(""))
+            msg += TransactionalSecureInterceptor.errorMessage;
+        
+        
+        //Now use the two shopping cart to test TransactionalSecureInterceptor
+        sc.checkout();
+        if (!TransactionalSecureInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke on " +
+                    "TransactionSecureInterceptor not called";
+        if (TransactionalSecureInterceptor.aroundInvokeInvocationCount != 1)
+            msg += "Business method interceptor invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =1, actual="
+                    + TransactionalSecureInterceptor.aroundInvokeInvocationCount;
+        if (!TransactionalSecureInterceptor.errorMessage.trim().equals(""))
+            msg += TransactionalSecureInterceptor.errorMessage;
+        
+        sc2.checkout();
+        if (TransactionalSecureInterceptor.aroundInvokeInvocationCount != 2)
+            msg += "Business method interceptor invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =2, actual="
+                    + TransactionalSecureInterceptor.aroundInvokeInvocationCount;
+
+        sc3.checkout();
+        if (TransactionalSecureInterceptor.aroundInvokeInvocationCount != 3)
+            msg += "Business method interceptor invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =3, actual="
+                    + TransactionalSecureInterceptor.aroundInvokeInvocationCount;
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/README b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/README
new file mode 100644
index 0000000..4ef22fe
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/README
@@ -0,0 +1,5 @@
+Test
+- Use of business method interceptors 
+    - Multiple interceptors implementations for a binding type
+    - Ordering of interceptors (via beans.xml)
+    - Disabling of interceptors (via beans.xml)   
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/build.properties b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/build.properties
new file mode 100644
index 0000000..647c53f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-multiple-interceptor-implementations"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/build.xml b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/build.xml
new file mode 100644
index 0000000..0b9b3a3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/build.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/client/test/client/WebTest.java
new file mode 100644
index 0000000..98bf8c6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/client/test/client/WebTest.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = 
+        "interceptors-multiple-interceptors-for-a-binding-type";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for interceptors");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/descriptor/beans.xml
new file mode 100644
index 0000000..999fa4a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/descriptor/beans.xml
@@ -0,0 +1,32 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+   <interceptors>
+      <class>test.beans.SecondTransactionInterceptor</class> <!--  first invoke second interceptor -->
+      <class>test.beans.TransactionInterceptor</class>
+      <!-- Third Transactional Interceptor is disabled
+      <class>test.beans.ThirdTransactionInterceptor</class>
+       -->
+   </interceptors>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/servlet/test/beans/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/servlet/test/beans/Preferred.java
new file mode 100644
index 0000000..fa8fdb7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/servlet/test/beans/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/servlet/test/beans/SecondTransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/servlet/test/beans/SecondTransactionInterceptor.java
new file mode 100644
index 0000000..d73fcae
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/servlet/test/beans/SecondTransactionInterceptor.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+@Transactional
+@Interceptor
+public class SecondTransactionInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    @Inject
+    TestRequestScopedBean tb;
+
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("SecondTransactionInterceptor::AroundInvoke");
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        tb.interceptorInvocationOrder.add(this.getClass().getCanonicalName());
+        return ctx.proceed();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/servlet/test/beans/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/servlet/test/beans/TestBean.java
new file mode 100644
index 0000000..4792d26
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/servlet/test/beans/TestBean.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+
+@Transactional
+@RequestScoped
+@Preferred
+public class TestBean {
+
+    public void m1() {
+        System.out.println("TestBean::m1 called");
+    }
+
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/servlet/test/beans/TestRequestScopedBean.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/servlet/test/beans/TestRequestScopedBean.java
new file mode 100644
index 0000000..4317821
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/servlet/test/beans/TestRequestScopedBean.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.enterprise.context.RequestScoped;
+
+@RequestScoped
+public class TestRequestScopedBean {
+    public static List<String> interceptorInvocationOrder = new ArrayList<String>();
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/servlet/test/beans/ThirdTransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/servlet/test/beans/ThirdTransactionInterceptor.java
new file mode 100644
index 0000000..8450653
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/servlet/test/beans/ThirdTransactionInterceptor.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+@Transactional
+@Interceptor
+public class ThirdTransactionInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    @Inject
+    TestRequestScopedBean tb;
+
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("ThirdTransactionInterceptor::AroundInvoke");
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        tb.interceptorInvocationOrder.add(this.getClass().getCanonicalName());
+        return ctx.proceed();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/servlet/test/beans/TransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/servlet/test/beans/TransactionInterceptor.java
new file mode 100644
index 0000000..a4fe338
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/servlet/test/beans/TransactionInterceptor.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+@Interceptor
+@Transactional
+public class TransactionInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestRequestScopedBean tb;
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        
+        System.out.println("TransactionInterceptor::AroundInvoke");
+        if (tb == null) errorMessage="Dependency Injection " +
+        		"into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        tb.interceptorInvocationOrder.add(this.getClass().getCanonicalName());
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/servlet/test/beans/Transactional.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/servlet/test/beans/Transactional.java
new file mode 100644
index 0000000..42f2c58
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/servlet/test/beans/Transactional.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.interceptor.InterceptorBinding;
+
+@Target({TYPE, METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface Transactional {
+
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/servlet/test/servlet/MultipleInterceptorImplementationsTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/servlet/test/servlet/MultipleInterceptorImplementationsTestServlet.java
new file mode 100644
index 0000000..bc328db
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-multiple-interceptors-for-a-binding-type/servlet/test/servlet/MultipleInterceptorImplementationsTestServlet.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.Preferred;
+import test.beans.SecondTransactionInterceptor;
+import test.beans.TestBean;
+import test.beans.TestRequestScopedBean;
+import test.beans.ThirdTransactionInterceptor;
+import test.beans.TransactionInterceptor;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class MultipleInterceptorImplementationsTestServlet extends HttpServlet {
+    @Inject
+    @Preferred
+    TestBean tb;
+
+    @Inject 
+    TestRequestScopedBean trsb;
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        if (tb == null)
+            msg += "Injection of bean (that is being intercepted) failed";
+
+        tb.m1();
+        if (!TransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke not called";
+        tb.m2();
+        if (TransactionInterceptor.aroundInvokeInvocationCount != 2)
+            msg += "Business method interceptor invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =2, actual="
+                    + TransactionInterceptor.aroundInvokeInvocationCount;
+        if (!TransactionInterceptor.errorMessage.trim().equals(""))
+            msg += TransactionInterceptor.errorMessage;
+
+        
+        if (!SecondTransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke in the second " +
+            		"transaction interceptor not called";
+        tb.m2(); //calling m2 again
+        if (SecondTransactionInterceptor.aroundInvokeInvocationCount != 3)
+            msg += "Business method second interceptor invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =3, actual="
+                    + SecondTransactionInterceptor.aroundInvokeInvocationCount;
+        
+        //test ordering of interceptors in the system
+        boolean expectedOrdering = 
+            ((trsb.interceptorInvocationOrder.get(0).
+                    equals(SecondTransactionInterceptor.class.getCanonicalName()))
+                && (trsb.interceptorInvocationOrder.get(1).
+                        equals(TransactionInterceptor.class.getCanonicalName())));
+        if (!expectedOrdering) 
+            msg += "Interceptor invocation order does not match with the expected order";
+        
+        //test disabling of interceptors via beans.xml 
+        if (ThirdTransactionInterceptor.aroundInvokeCalled) 
+            msg += "Disabled interceptor called";
+        
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/README b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/README
new file mode 100644
index 0000000..9df38aa
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/README
@@ -0,0 +1,3 @@
+Test
+- Use of business method interceptors 
+    - Use of the old-style Interceptors on a CDI bean
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/build.properties b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/build.properties
new file mode 100644
index 0000000..a646191
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-use-of-at-interceptors"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/build.xml b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/build.xml
new file mode 100644
index 0000000..0b9b3a3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/build.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/client/test/client/WebTest.java
new file mode 100644
index 0000000..cd812bd
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/client/test/client/WebTest.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = 
+        "interceptors-use-of-";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for interceptors");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/descriptor/beans.xml
new file mode 100644
index 0000000..b0ae3bd
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/descriptor/beans.xml
@@ -0,0 +1,29 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+   <interceptors>
+      <class>test.beans.TransactionInterceptor</class>
+      <class>test.beans.SecureInterceptor</class>
+   </interceptors>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/servlet/test/beans/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/servlet/test/beans/Preferred.java
new file mode 100644
index 0000000..fa8fdb7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/servlet/test/beans/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/servlet/test/beans/Secure.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/servlet/test/beans/Secure.java
new file mode 100644
index 0000000..377cb2f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/servlet/test/beans/Secure.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+import javax.interceptor.InterceptorBinding;
+
+@Qualifier
+@Target({ TYPE, METHOD })
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface Secure {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/servlet/test/beans/SecureInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/servlet/test/beans/SecureInterceptor.java
new file mode 100644
index 0000000..7085281
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/servlet/test/beans/SecureInterceptor.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+@Secure @Interceptor
+public class SecureInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestRequestScopedBean tb;
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        
+        System.out.println("SecureInterceptor::AroundInvoke");
+        if (tb == null) errorMessage="Dependency Injection " +
+                "into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        tb.interceptorInvocationOrder.add(this.getClass().getCanonicalName());
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/servlet/test/beans/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/servlet/test/beans/TestBean.java
new file mode 100644
index 0000000..a8d9b77
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/servlet/test/beans/TestBean.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+import javax.interceptor.Interceptors;
+
+
+@RequestScoped
+@Preferred
+@Interceptors({TransactionInterceptor.class, SecureInterceptor.class})
+public class TestBean {
+
+    public void m1() {
+        System.out.println("TestBean::m1 called");
+    }
+
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/servlet/test/beans/TestRequestScopedBean.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/servlet/test/beans/TestRequestScopedBean.java
new file mode 100644
index 0000000..4317821
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/servlet/test/beans/TestRequestScopedBean.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.enterprise.context.RequestScoped;
+
+@RequestScoped
+public class TestRequestScopedBean {
+    public static List<String> interceptorInvocationOrder = new ArrayList<String>();
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/servlet/test/beans/TransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/servlet/test/beans/TransactionInterceptor.java
new file mode 100644
index 0000000..5e47864
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/servlet/test/beans/TransactionInterceptor.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+@Transactional @Interceptor
+public class TransactionInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestRequestScopedBean tb;
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        
+        System.out.println("TransactionInterceptor::AroundInvoke");
+        if (tb == null) errorMessage="Dependency Injection " +
+                "into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        tb.interceptorInvocationOrder.add(this.getClass().getCanonicalName());
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/servlet/test/beans/Transactional.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/servlet/test/beans/Transactional.java
new file mode 100644
index 0000000..42f2c58
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/servlet/test/beans/Transactional.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.interceptor.InterceptorBinding;
+
+@Target({TYPE, METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface Transactional {
+
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/servlet/test/servlet/InterceptorsTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/servlet/test/servlet/InterceptorsTestServlet.java
new file mode 100644
index 0000000..e11f7cc
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-at-interceptors/servlet/test/servlet/InterceptorsTestServlet.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.Preferred;
+import test.beans.SecureInterceptor;
+import test.beans.TestBean;
+import test.beans.TransactionInterceptor;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class InterceptorsTestServlet extends HttpServlet {
+    @Inject
+    @Preferred
+    TestBean tb;
+    
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+        
+        tb.m1();
+        if (!TransactionInterceptor.aroundInvokeCalled)
+            msg +="TransactionInterceptor aroundInvoke method not called";
+        if (!SecureInterceptor.aroundInvokeCalled)
+            msg +="SecureInterceptor aroundInvoke method not called";
+        if ((TransactionInterceptor.aroundInvokeInvocationCount != 1))
+            msg +="TransactionInterceptor aroundInvoke invocation count is " +
+                    "not expected 1 but" + 
+                    TransactionInterceptor.aroundInvokeInvocationCount;
+        tb.m2();
+        if ((SecureInterceptor.aroundInvokeInvocationCount != 2))
+            msg +="SecureInterceptor aroundInvoke invocation count is " +
+                    "not expected 2 but" + 
+                    SecureInterceptor.aroundInvokeInvocationCount;
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/README b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/README
new file mode 100644
index 0000000..fd987b9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/README
@@ -0,0 +1,5 @@
+Test
+- Use of business method interceptors to EJBs that specify interceptors through
+traditional @Interceptors
+Related issue: GLASSFISH-14831 
+    
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/build.properties b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/build.properties
new file mode 100644
index 0000000..1ab3b40
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-use-of-interceptors-in-ejbs-through-at-interceptors"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/build.xml b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/build.xml
new file mode 100644
index 0000000..0b9b3a3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/build.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/client/test/client/WebTest.java
new file mode 100644
index 0000000..e7521b7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/client/test/client/WebTest.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = 
+        "interceptors-use-of-interceptors-in-ejbs-through-at-interceptors";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for interceptors");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/descriptor/beans.xml
new file mode 100644
index 0000000..ce56e12
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/descriptor/beans.xml
@@ -0,0 +1,28 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+   <interceptors>
+      <class>org.glassfish.cditest.security.interceptor.SecurityInterceptor</class>
+   </interceptors>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/security/api/Secure.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/security/api/Secure.java
new file mode 100644
index 0000000..a237123
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/security/api/Secure.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.cditest.security.api;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.interceptor.InterceptorBinding;
+
+/**
+ * EJBs annotated with Secure are intercepted by SecurityInterceptor, ensuring
+ * that the caller has the permissions to call an EJB method. May only be
+ * applied to EJBs.
+ * 
+ * @author ifischer
+ * 
+ * @see SecurityInterceptor
+ * 
+ * @since 0.3
+ */
+@Inherited
+@Target({ TYPE, METHOD })
+@Retention(RUNTIME)
+@InterceptorBinding
+public @interface Secure
+{
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/security/interceptor/SecurityInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/security/interceptor/SecurityInterceptor.java
new file mode 100644
index 0000000..8708abf
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/security/interceptor/SecurityInterceptor.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.cditest.security.interceptor;
+
+import java.lang.reflect.Method;
+import java.security.Principal;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.annotation.Resource;
+import javax.ejb.EJBContext;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+import java.io.Serializable;
+import org.glassfish.cditest.security.api.Secure;
+
+/**
+ * Realizes security for EJBs.
+ * 
+ * @author ifischer
+ * 
+ */
+@Secure
+@Interceptor
+public class SecurityInterceptor implements Serializable
+{
+    private static final Logger LOG = Logger.getLogger(SecurityInterceptor.class.getName());
+    
+    public static boolean aroundInvokeCalled = false;
+    
+    @Resource
+    private EJBContext ejbCtx;
+    
+    /**
+     * Perform lookup for permissions.
+     * Does the caller has the permission to call the method?
+     * TODO: implement lookup
+     * 
+     * @param InvocationContext of intercepted method
+     * @return
+     * @throws Exception
+     */
+    @AroundInvoke
+    protected Object invoke(final InvocationContext ctx) throws Exception
+    {
+        Principal p = ejbCtx.getCallerPrincipal();
+        Method interfaceMethod = ctx.getMethod();
+        
+        LOG.log(Level.INFO, "EJB Method called [Full]:\"{0}\" by Principal:{1}", new Object[]{getFullEJBClassName(interfaceMethod), p.toString()});
+        LOG.log(Level.INFO, "EJB Method called [Methodonly]:{0} by Principal:{1}", new Object[]{interfaceMethod.getName(), p.toString()});
+        
+        SecurityInterceptor.aroundInvokeCalled = true;
+        return ctx.proceed();
+    }
+    
+    /**
+     * The EJBContext interface doesn't provide convenient methods to get the name of the EJB class, 
+     * so the classname has to be extracted from the method.
+     * 
+     * @param the method whose classname is needed
+     * @return classname (fully qualified) of given method, e.g. "com.profitbricks.user.api.UserService"
+     */
+    private String getFullEJBClassName(Method method) {
+        // extract className from methodName
+        // methodName format example:"public void com.profitbricks.user.api.UserService.testMe()"
+        String methodName = method.toString();
+        
+        int start = methodName.lastIndexOf(' ') + 1;
+        int end = methodName.lastIndexOf('.');
+        
+        String className = methodName.substring(start, end);
+        
+        return className;
+    }
+    
+    public static void reset(){
+        //reset invocation status
+        SecurityInterceptor.aroundInvokeCalled = false;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/user/api/UserService.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/user/api/UserService.java
new file mode 100644
index 0000000..b727c50
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/user/api/UserService.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/*
+ * To change this template, choose Tools | Templates and open the template in
+ * the editor.
+ */
+
+package org.glassfish.cditest.user.api;
+
+import javax.ejb.EJBException;
+import org.glassfish.cditest.user.api.model.User;
+
+/**
+ * <p>
+ * Manage user-related data
+ * </p>
+ * 
+ * <p>
+ * A service that implements this interface is responsible for managing
+ * user-related master-data
+ * </p>
+ * 
+ * @author kane
+ * 
+ * @see User
+ */
+public interface UserService
+{
+    
+    /**
+     * <p>
+     * Get a {@link User} by the user id
+     * </p>
+     * 
+     * @param userid
+     *            The userid to search for
+     * @return A {@link User} object or <code>null</code> if no user was found
+     */
+    public User findById(long userId) throws EJBException;
+
+    /**
+     * <p>
+     * Add a new user
+     * </p>
+     * 
+     * <p>
+     * The implementation must ensure that the provided user object is persisted
+     * before returning the assigned persistent user ID.
+     * </p>
+     * 
+     * @param user
+     *            The user object to persist
+     * @return The newly created persistent ID of the user object
+     * 
+     * @see User
+     */
+    public Long addUser(User user) throws EJBException;
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/user/api/model/Gender.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/user/api/model/Gender.java
new file mode 100644
index 0000000..616ee49
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/user/api/model/Gender.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.glassfish.cditest.user.api.model;
+
+/**
+ * <p>All available genders</p>
+ *
+ * @author kane
+ */
+public enum Gender {
+
+    /**
+     * <p>Represents a woman</p>
+     */
+    FEMALE,
+
+    /**
+     * <p>Represents a man</p>
+     */
+    MALE,
+
+    /**
+     * <p>Represents a person that is biologically and/or socially suited for both sexes</p>
+     */
+    UNISEX,
+
+    /**
+     * <p>Represents a person that is biologically and/or socially suited for none of the sexes</p>
+     */
+    ASEXUAL;
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/user/api/model/User.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/user/api/model/User.java
new file mode 100644
index 0000000..59450f1
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/user/api/model/User.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/*
+ * To change this template, choose Tools | Templates and open the template in
+ * the editor.
+ */
+
+package org.glassfish.cditest.user.api.model;
+
+/**
+ * A user login account within our system.
+ * 
+ * @author kane
+ * 
+ * @since 0.1
+ */
+public interface User
+{
+
+    public Long getId();
+
+    /**
+     * Get the value of firstName
+     * 
+     * @return the value of firstName
+     */
+    public String getFirstName();
+
+    /**
+     * <p>
+     * Get the gender for the user
+     * </p>
+     * 
+     * <p>
+     * A gender is much better suited to our needs here as the pure biological
+     * sex is.
+     * </p>
+     * 
+     * @return the value of gender
+     */
+    public Gender getGender();
+
+    /**
+     * Get the value of lastName
+     * 
+     * @return the value of lastName
+     */
+    public String getLastName();
+
+    /**
+     * <p>
+     * Get the username used for login
+     * </p>
+     * 
+     * @return the value of username
+     */
+    public String getUsername();
+
+    /**
+     * <p>
+     * Get the email address of the user
+     * </p>
+     * 
+     * @return the value of the email
+     */
+    public String getEmailAddress();
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/user/api/model/package-info.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/user/api/model/package-info.java
new file mode 100644
index 0000000..2e32979
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/user/api/model/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/**
+ * The user service transfer object model interfaces
+ */
+package org.glassfish.cditest.user.api.model;
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/user/api/package-info.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/user/api/package-info.java
new file mode 100644
index 0000000..3f1435c
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/user/api/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/**
+ * The user service API interfaces
+ */
+package org.glassfish.cditest.user.api;
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/user/impl/UserServiceImpl.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/user/impl/UserServiceImpl.java
new file mode 100644
index 0000000..8284c73
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/user/impl/UserServiceImpl.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.cditest.user.impl;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.ejb.EJBException;
+import javax.ejb.Local;
+import javax.ejb.Stateless;
+
+import org.glassfish.cditest.security.api.Secure;
+import org.glassfish.cditest.user.api.UserService;
+import org.glassfish.cditest.user.api.model.Gender;
+import org.glassfish.cditest.user.api.model.User;
+import org.glassfish.cditest.user.model.UserImpl;
+/**
+ * <p>
+ * Implementation of the UserService.
+ * </p>
+ * 
+ * @author chaoslayer
+ */
+@Stateless
+@Local
+@javax.interceptor.Interceptors(org.glassfish.cditest.security.interceptor.SecurityInterceptor.class)
+public class UserServiceImpl implements UserService {
+    private static final Logger LOG = Logger.getLogger(UserService.class.getName());
+
+    /**
+     * <p>
+     * Add a new user
+     * </p>
+     * 
+     * <p>
+     * The implementation must ensure that the provided user object is persisted
+     * before returning the assigned persistent user ID.
+     * </p>
+     * 
+     * @param user
+     *            The user object to persist
+     * @return The newly created persistent ID of the user object
+     * 
+     * @see UserImpl
+     */
+    @Override
+    public Long addUser(final User user) throws EJBException
+    {
+        LOG.log(Level.INFO, "Storing user {0}", user);
+
+        return new Long(123);
+    }
+
+    /**
+     * <p>
+     * Get a {@link User} by the user id
+     * </p>
+     * 
+     * @param userid
+     *            The userid to search for
+     * @return A {@link User} object or <code>null</code> if no user was found
+     */
+    @Override
+    public User findById(long userId) throws EJBException
+    {
+        UserImpl u = new UserImpl();
+
+        u.setId(userId);
+        u.setEmailAddress("test@test.org");
+        u.setFirstName("John");
+        u.setLastName("Doe");
+        u.setGender(Gender.UNISEX);
+        u.setUsername("john-123");
+
+        LOG.log(Level.INFO, "Returning user {0}", u);
+
+        return u;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/user/model/UserImpl.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/user/model/UserImpl.java
new file mode 100644
index 0000000..07ae9b7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/org/glassfish/cditest/user/model/UserImpl.java
@@ -0,0 +1,193 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/*
+ * To change this template, choose Tools | Templates and open the template in
+ * the editor.
+ */
+
+package org.glassfish.cditest.user.model;
+
+import org.glassfish.cditest.user.api.model.Gender;
+import org.glassfish.cditest.user.api.model.User;
+
+/**
+ * <p>
+ * Client-side implementation of {@link User}.
+ * </p>
+ * 
+ * @author chaoslayer
+ */
+public class UserImpl implements User
+{
+
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+    private String lastName;
+    private String firstName;
+    private Gender gender;
+    private String username;
+    private String emailAddress;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**
+     * <p>
+     * Get the username used for login
+     * </p>
+     * 
+     * @return the value of username
+     */
+    public String getUsername()
+    {
+        return username;
+    }
+
+    /**
+     * <p>
+     * Set the username
+     * </p>
+     * 
+     * @param username
+     *            new value of username
+     */
+    public void setUsername(String username)
+    {
+        this.username = username;
+    }
+
+    /**
+     * <p>
+     * Get the gender for the user
+     * </p>
+     * 
+     * <p>
+     * A gender is much better suited to our needs here as the pure biological
+     * sex is.
+     * </p>
+     * 
+     * @return the value of gender
+     */
+    public Gender getGender()
+    {
+        return gender;
+    }
+
+    /**
+     * <p>
+     * Set the gender for the user
+     * </p>
+     * 
+     * <p>
+     * A gender is much better suited to our needs here as the pure biological
+     * sex is.
+     * </p>
+     * 
+     * @param gender
+     *            new value of gender
+     */
+    public void setGender(Gender gender)
+    {
+        this.gender = gender;
+    }
+
+    /**
+     * Get the value of firstName
+     * 
+     * @return the value of firstName
+     */
+    public String getFirstName()
+    {
+        return firstName;
+    }
+
+    /**
+     * Set the value of firstName
+     * 
+     * @param firstName
+     *            new value of firstName
+     */
+    public void setFirstName(String firstName)
+    {
+        this.firstName = firstName;
+    }
+
+    /**
+     * Get the value of lastName
+     * 
+     * @return the value of lastName
+     */
+    public String getLastName()
+    {
+        return lastName;
+    }
+
+    /**
+     * Set the value of lastName
+     * 
+     * @param lastName
+     *            new value of lastName
+     */
+    public void setLastName(String lastName)
+    {
+        this.lastName = lastName;
+    }
+
+    /**
+     * Get the value of emailAddress
+     * 
+     * @return the value of emailAddress
+     */
+    public String getEmailAddress()
+    {
+        return emailAddress;
+    }
+
+    /**
+     * Set the value of emailAddress
+     * 
+     * @param emailAddress
+     *            new value of emailAddress
+     */
+    public void setEmailAddress(String emailAddress)
+    {
+        this.emailAddress = emailAddress;
+    }
+
+    /**
+     * String representation of the object data
+     * 
+     * @return The object data as String
+     */
+    @Override
+    public String toString()
+    {
+        return "UserImpl [id=" + id +
+                ", emailAddress=" + emailAddress +
+                ", firstName=" + firstName +
+                ", gender=" + gender +
+                ", lastName=" + lastName +
+                ", username=" + username + "]";
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/test/servlet/InterceptorsTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/test/servlet/InterceptorsTestServlet.java
new file mode 100644
index 0000000..77edccf
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-at-interceptors/servlet/test/servlet/InterceptorsTestServlet.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.ejb.EJB;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.glassfish.cditest.security.interceptor.SecurityInterceptor;
+import org.glassfish.cditest.user.api.UserService;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class InterceptorsTestServlet extends HttpServlet {
+    @EJB UserService svc;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        svc.findById(0);
+        if (!SecurityInterceptor.aroundInvokeCalled)
+            msg += "SecurityInterceptor aroundInvoke method not called when using"
+                    + "@Interceptors to specify CDI interceptors";
+
+        SecurityInterceptor.reset();
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/README b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/README
new file mode 100644
index 0000000..6efea55
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/README
@@ -0,0 +1,5 @@
+Test
+- Use of business method interceptors to EJBs that specify interceptors through
+CDI interceptor bindings.
+Related issue: GLASSFISH-14831 
+    
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/build.properties b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/build.properties
new file mode 100644
index 0000000..82f0c3b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-use-of-interceptors-in-ejbs-through-interceptor-bindings"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/build.xml b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/build.xml
new file mode 100644
index 0000000..0b9b3a3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/build.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/client/test/client/WebTest.java
new file mode 100644
index 0000000..6fba929
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/client/test/client/WebTest.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = 
+        "interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for interceptors");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/descriptor/beans.xml
new file mode 100644
index 0000000..ce56e12
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/descriptor/beans.xml
@@ -0,0 +1,28 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+   <interceptors>
+      <class>org.glassfish.cditest.security.interceptor.SecurityInterceptor</class>
+   </interceptors>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/security/api/Secure.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/security/api/Secure.java
new file mode 100644
index 0000000..a237123
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/security/api/Secure.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.cditest.security.api;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.interceptor.InterceptorBinding;
+
+/**
+ * EJBs annotated with Secure are intercepted by SecurityInterceptor, ensuring
+ * that the caller has the permissions to call an EJB method. May only be
+ * applied to EJBs.
+ * 
+ * @author ifischer
+ * 
+ * @see SecurityInterceptor
+ * 
+ * @since 0.3
+ */
+@Inherited
+@Target({ TYPE, METHOD })
+@Retention(RUNTIME)
+@InterceptorBinding
+public @interface Secure
+{
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/security/interceptor/SecurityInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/security/interceptor/SecurityInterceptor.java
new file mode 100644
index 0000000..8708abf
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/security/interceptor/SecurityInterceptor.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.cditest.security.interceptor;
+
+import java.lang.reflect.Method;
+import java.security.Principal;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.annotation.Resource;
+import javax.ejb.EJBContext;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+import java.io.Serializable;
+import org.glassfish.cditest.security.api.Secure;
+
+/**
+ * Realizes security for EJBs.
+ * 
+ * @author ifischer
+ * 
+ */
+@Secure
+@Interceptor
+public class SecurityInterceptor implements Serializable
+{
+    private static final Logger LOG = Logger.getLogger(SecurityInterceptor.class.getName());
+    
+    public static boolean aroundInvokeCalled = false;
+    
+    @Resource
+    private EJBContext ejbCtx;
+    
+    /**
+     * Perform lookup for permissions.
+     * Does the caller has the permission to call the method?
+     * TODO: implement lookup
+     * 
+     * @param InvocationContext of intercepted method
+     * @return
+     * @throws Exception
+     */
+    @AroundInvoke
+    protected Object invoke(final InvocationContext ctx) throws Exception
+    {
+        Principal p = ejbCtx.getCallerPrincipal();
+        Method interfaceMethod = ctx.getMethod();
+        
+        LOG.log(Level.INFO, "EJB Method called [Full]:\"{0}\" by Principal:{1}", new Object[]{getFullEJBClassName(interfaceMethod), p.toString()});
+        LOG.log(Level.INFO, "EJB Method called [Methodonly]:{0} by Principal:{1}", new Object[]{interfaceMethod.getName(), p.toString()});
+        
+        SecurityInterceptor.aroundInvokeCalled = true;
+        return ctx.proceed();
+    }
+    
+    /**
+     * The EJBContext interface doesn't provide convenient methods to get the name of the EJB class, 
+     * so the classname has to be extracted from the method.
+     * 
+     * @param the method whose classname is needed
+     * @return classname (fully qualified) of given method, e.g. "com.profitbricks.user.api.UserService"
+     */
+    private String getFullEJBClassName(Method method) {
+        // extract className from methodName
+        // methodName format example:"public void com.profitbricks.user.api.UserService.testMe()"
+        String methodName = method.toString();
+        
+        int start = methodName.lastIndexOf(' ') + 1;
+        int end = methodName.lastIndexOf('.');
+        
+        String className = methodName.substring(start, end);
+        
+        return className;
+    }
+    
+    public static void reset(){
+        //reset invocation status
+        SecurityInterceptor.aroundInvokeCalled = false;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/user/api/UserService.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/user/api/UserService.java
new file mode 100644
index 0000000..b727c50
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/user/api/UserService.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/*
+ * To change this template, choose Tools | Templates and open the template in
+ * the editor.
+ */
+
+package org.glassfish.cditest.user.api;
+
+import javax.ejb.EJBException;
+import org.glassfish.cditest.user.api.model.User;
+
+/**
+ * <p>
+ * Manage user-related data
+ * </p>
+ * 
+ * <p>
+ * A service that implements this interface is responsible for managing
+ * user-related master-data
+ * </p>
+ * 
+ * @author kane
+ * 
+ * @see User
+ */
+public interface UserService
+{
+    
+    /**
+     * <p>
+     * Get a {@link User} by the user id
+     * </p>
+     * 
+     * @param userid
+     *            The userid to search for
+     * @return A {@link User} object or <code>null</code> if no user was found
+     */
+    public User findById(long userId) throws EJBException;
+
+    /**
+     * <p>
+     * Add a new user
+     * </p>
+     * 
+     * <p>
+     * The implementation must ensure that the provided user object is persisted
+     * before returning the assigned persistent user ID.
+     * </p>
+     * 
+     * @param user
+     *            The user object to persist
+     * @return The newly created persistent ID of the user object
+     * 
+     * @see User
+     */
+    public Long addUser(User user) throws EJBException;
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/user/api/model/Gender.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/user/api/model/Gender.java
new file mode 100644
index 0000000..616ee49
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/user/api/model/Gender.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.glassfish.cditest.user.api.model;
+
+/**
+ * <p>All available genders</p>
+ *
+ * @author kane
+ */
+public enum Gender {
+
+    /**
+     * <p>Represents a woman</p>
+     */
+    FEMALE,
+
+    /**
+     * <p>Represents a man</p>
+     */
+    MALE,
+
+    /**
+     * <p>Represents a person that is biologically and/or socially suited for both sexes</p>
+     */
+    UNISEX,
+
+    /**
+     * <p>Represents a person that is biologically and/or socially suited for none of the sexes</p>
+     */
+    ASEXUAL;
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/user/api/model/User.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/user/api/model/User.java
new file mode 100644
index 0000000..59450f1
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/user/api/model/User.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/*
+ * To change this template, choose Tools | Templates and open the template in
+ * the editor.
+ */
+
+package org.glassfish.cditest.user.api.model;
+
+/**
+ * A user login account within our system.
+ * 
+ * @author kane
+ * 
+ * @since 0.1
+ */
+public interface User
+{
+
+    public Long getId();
+
+    /**
+     * Get the value of firstName
+     * 
+     * @return the value of firstName
+     */
+    public String getFirstName();
+
+    /**
+     * <p>
+     * Get the gender for the user
+     * </p>
+     * 
+     * <p>
+     * A gender is much better suited to our needs here as the pure biological
+     * sex is.
+     * </p>
+     * 
+     * @return the value of gender
+     */
+    public Gender getGender();
+
+    /**
+     * Get the value of lastName
+     * 
+     * @return the value of lastName
+     */
+    public String getLastName();
+
+    /**
+     * <p>
+     * Get the username used for login
+     * </p>
+     * 
+     * @return the value of username
+     */
+    public String getUsername();
+
+    /**
+     * <p>
+     * Get the email address of the user
+     * </p>
+     * 
+     * @return the value of the email
+     */
+    public String getEmailAddress();
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/user/api/model/package-info.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/user/api/model/package-info.java
new file mode 100644
index 0000000..2e32979
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/user/api/model/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/**
+ * The user service transfer object model interfaces
+ */
+package org.glassfish.cditest.user.api.model;
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/user/api/package-info.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/user/api/package-info.java
new file mode 100644
index 0000000..3f1435c
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/user/api/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/**
+ * The user service API interfaces
+ */
+package org.glassfish.cditest.user.api;
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/user/impl/UserServiceImpl.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/user/impl/UserServiceImpl.java
new file mode 100644
index 0000000..d938b81
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/user/impl/UserServiceImpl.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.cditest.user.impl;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.ejb.EJBException;
+import javax.ejb.Local;
+import javax.ejb.Stateless;
+
+import org.glassfish.cditest.security.api.Secure;
+import org.glassfish.cditest.user.api.UserService;
+import org.glassfish.cditest.user.api.model.Gender;
+import org.glassfish.cditest.user.api.model.User;
+import org.glassfish.cditest.user.model.UserImpl;
+/**
+ * <p>
+ * Implementation of the UserService.
+ * </p>
+ * 
+ * @author chaoslayer
+ */
+@Stateless
+@Local
+@Secure
+public class UserServiceImpl implements UserService {
+    private static final Logger LOG = Logger.getLogger(UserService.class.getName());
+
+    /**
+     * <p>
+     * Add a new user
+     * </p>
+     * 
+     * <p>
+     * The implementation must ensure that the provided user object is persisted
+     * before returning the assigned persistent user ID.
+     * </p>
+     * 
+     * @param user
+     *            The user object to persist
+     * @return The newly created persistent ID of the user object
+     * 
+     * @see UserImpl
+     */
+    @Override
+    public Long addUser(final User user) throws EJBException
+    {
+        LOG.log(Level.INFO, "Storing user {0}", user);
+
+        return new Long(123);
+    }
+
+    /**
+     * <p>
+     * Get a {@link User} by the user id
+     * </p>
+     * 
+     * @param userid
+     *            The userid to search for
+     * @return A {@link User} object or <code>null</code> if no user was found
+     */
+    @Override
+    public User findById(long userId) throws EJBException
+    {
+        UserImpl u = new UserImpl();
+
+        u.setId(userId);
+        u.setEmailAddress("test@test.org");
+        u.setFirstName("John");
+        u.setLastName("Doe");
+        u.setGender(Gender.UNISEX);
+        u.setUsername("john-123");
+
+        LOG.log(Level.INFO, "Returning user {0}", u);
+
+        return u;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/user/model/UserImpl.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/user/model/UserImpl.java
new file mode 100644
index 0000000..07ae9b7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/org/glassfish/cditest/user/model/UserImpl.java
@@ -0,0 +1,193 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/*
+ * To change this template, choose Tools | Templates and open the template in
+ * the editor.
+ */
+
+package org.glassfish.cditest.user.model;
+
+import org.glassfish.cditest.user.api.model.Gender;
+import org.glassfish.cditest.user.api.model.User;
+
+/**
+ * <p>
+ * Client-side implementation of {@link User}.
+ * </p>
+ * 
+ * @author chaoslayer
+ */
+public class UserImpl implements User
+{
+
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+    private String lastName;
+    private String firstName;
+    private Gender gender;
+    private String username;
+    private String emailAddress;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**
+     * <p>
+     * Get the username used for login
+     * </p>
+     * 
+     * @return the value of username
+     */
+    public String getUsername()
+    {
+        return username;
+    }
+
+    /**
+     * <p>
+     * Set the username
+     * </p>
+     * 
+     * @param username
+     *            new value of username
+     */
+    public void setUsername(String username)
+    {
+        this.username = username;
+    }
+
+    /**
+     * <p>
+     * Get the gender for the user
+     * </p>
+     * 
+     * <p>
+     * A gender is much better suited to our needs here as the pure biological
+     * sex is.
+     * </p>
+     * 
+     * @return the value of gender
+     */
+    public Gender getGender()
+    {
+        return gender;
+    }
+
+    /**
+     * <p>
+     * Set the gender for the user
+     * </p>
+     * 
+     * <p>
+     * A gender is much better suited to our needs here as the pure biological
+     * sex is.
+     * </p>
+     * 
+     * @param gender
+     *            new value of gender
+     */
+    public void setGender(Gender gender)
+    {
+        this.gender = gender;
+    }
+
+    /**
+     * Get the value of firstName
+     * 
+     * @return the value of firstName
+     */
+    public String getFirstName()
+    {
+        return firstName;
+    }
+
+    /**
+     * Set the value of firstName
+     * 
+     * @param firstName
+     *            new value of firstName
+     */
+    public void setFirstName(String firstName)
+    {
+        this.firstName = firstName;
+    }
+
+    /**
+     * Get the value of lastName
+     * 
+     * @return the value of lastName
+     */
+    public String getLastName()
+    {
+        return lastName;
+    }
+
+    /**
+     * Set the value of lastName
+     * 
+     * @param lastName
+     *            new value of lastName
+     */
+    public void setLastName(String lastName)
+    {
+        this.lastName = lastName;
+    }
+
+    /**
+     * Get the value of emailAddress
+     * 
+     * @return the value of emailAddress
+     */
+    public String getEmailAddress()
+    {
+        return emailAddress;
+    }
+
+    /**
+     * Set the value of emailAddress
+     * 
+     * @param emailAddress
+     *            new value of emailAddress
+     */
+    public void setEmailAddress(String emailAddress)
+    {
+        this.emailAddress = emailAddress;
+    }
+
+    /**
+     * String representation of the object data
+     * 
+     * @return The object data as String
+     */
+    @Override
+    public String toString()
+    {
+        return "UserImpl [id=" + id +
+                ", emailAddress=" + emailAddress +
+                ", firstName=" + firstName +
+                ", gender=" + gender +
+                ", lastName=" + lastName +
+                ", username=" + username + "]";
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/test/servlet/InterceptorsTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/test/servlet/InterceptorsTestServlet.java
new file mode 100644
index 0000000..77edccf
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/interceptors/interceptors-use-of-interceptors-in-ejbs-through-interceptor-bindings/servlet/test/servlet/InterceptorsTestServlet.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.ejb.EJB;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.glassfish.cditest.security.interceptor.SecurityInterceptor;
+import org.glassfish.cditest.user.api.UserService;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class InterceptorsTestServlet extends HttpServlet {
+    @EJB UserService svc;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        svc.findById(0);
+        if (!SecurityInterceptor.aroundInvokeCalled)
+            msg += "SecurityInterceptor aroundInvoke method not called when using"
+                    + "@Interceptors to specify CDI interceptors";
+
+        SecurityInterceptor.reset();
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/build.xml
new file mode 100644
index 0000000..9b021d2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/build.xml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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="javaee-comp-test" default="usage" basedir=".">
+
+    <property name="javaee-comp-target" value="all"/>
+
+    <target name="run-test">
+        <antcall target="javaee-comp">
+        <param name="javaee-comp-target" value="run-test"/>
+        </antcall>
+    </target>
+
+    <target name="all">
+        <antcall target="javaee-comp">
+        <param name="javaee-comp-target" value="all"/>
+        </antcall>
+    </target>
+
+    <target name="clean">
+        <antcall target="javaee-comp">
+        <param name="javaee-comp-target" value="clean"/>
+        </antcall>
+    </target>
+
+    <target name="build">
+        <antcall target="javaee-comp">
+        <param name="javaee-comp-target" value="build"/>
+        </antcall>
+    </target>
+
+    <target name="setup">
+        <antcall target="javaee-comp">
+        <param name="javaee-comp-target" value="setup"/>
+        </antcall>
+    </target>
+
+    <target name="deploy">
+        <antcall target="javaee-comp">
+        <param name="javaee-comp-target" value="deploy"/>
+        </antcall>
+    </target>
+
+    <target name="undeploy">
+        <antcall target="javaee-comp">
+        <param name="javaee-comp-target" value="undeploy"/>
+        </antcall>
+    </target>
+
+    <target name="unsetup">
+        <antcall target="javaee-comp">
+        <param name="javaee-comp-target" value="unsetup"/>
+        </antcall>
+    </target>
+
+    <target name="run">
+        <antcall target="javaee-comp">
+        <param name="javaee-comp-target" value="run"/>
+        </antcall>
+    </target>
+
+    <target name="javaee-comp">
+        <record name="javaee-comp.output" action="start" />
+            <ant dir="javaee-component-resource-typesafe-injection" target="${javaee-comp-target}"/>
+            <ant dir="jpa-resource-injection" target="${javaee-comp-target}"/>
+            <ant dir="jpa-resource-injection-non-serializable" target="${javaee-comp-target}"/>
+            <ant dir="jpa-resource-injection-passivating-scope" target="${javaee-comp-target}"/>
+            <ant dir="jpa-resource-injection-with-singleton-ejb-producer" target="${javaee-comp-target}"/>
+            <ant dir="no-interface-ejb" target="${javaee-comp-target}"/>
+            <ant dir="jms-resource-producer-field" target="${javaee-comp-target}"/>
+<!-- TODO: Investigate 
+            <ant dir="jms-resource-producer-field-in-library-jar" target="${javaee-comp-target}"/>
+-->
+            <ant dir="em-resource-injection" target="${javaee-comp-target}"/>
+            <ant dir="em-injection-no-interface-ejb" target="${javaee-comp-target}"/>
+            <ant dir="em-resource-injection-with-resource-declaration-in-another-jar" target="${javaee-comp-target}"/>
+            <ant dir="slsb-injection-into-sessionscoped" target="${javaee-comp-target}"/>
+        <record name="javaee-comp.output" action="stop" />
+    </target>
+
+    <target name="usage">
+	<echo> Usage:
+		ant all (Executes all the javaee-comp tests)
+		ant clean (cleans all the javaee-comp tests)
+		ant build (builds all the javaee-comp tests)
+		ant setup (sets up all resources for javaee-comp tests)
+		ant deploy (deploys all the javaee-comp apps)
+		ant run (Executes all the javaee-comp tests)
+		ant undeploy (undeploys all the  javaee-comp apps)
+		ant unsetup (unsets all resources for javaee-comp tests)
+	</echo>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/README
new file mode 100644
index 0000000..098e4ae
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/README
@@ -0,0 +1,5 @@
+Test
+- Injection of a no-interface bean in a request-scoped model via @Inject 
+and @EJB and invocation of methods defined in the EJB class and 
+in a super-class of the EJB
+- glassfish issue 13040
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/build.properties
new file mode 100644
index 0000000..2696b45
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/build.properties
@@ -0,0 +1,26 @@
+<!--
+
+    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}-eminjection-into-no-interface-ejb"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
+<property name="persistence.xml" value="descriptor/persistence.xml"/>
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/build.xml
new file mode 100644
index 0000000..a0e6a9d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/build.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy" />
+
+	<target name="clean" depends="init-common">
+		<antcall target="clean-common" />
+		<delete>
+			<fileset dir="." includes="*.class" />
+			<fileset dir="client/test/client" includes="*.class" />
+		</delete>
+	</target>
+
+	<target name="compile" depends="clean">
+		<antcall target="compile-common">
+			<param name="src" value="servlet" />
+		</antcall>
+	</target>
+
+	<target name="build" depends="compile">
+		<property name="hasWebclient" value="yes" />
+		<antcall target="webclient-war-common">
+			<param name="hasWebclient" value="yes" />
+			<param name="webclient.war.classes" value="**/*.class" />
+		</antcall>
+
+		<javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar" includes="test/client/WebTest.java" />
+
+	</target>
+
+	<target name="build-publish-war" depends="build, publish-war-common" />
+
+	<target name="deploy" depends="init-common">
+		<antcall target="deploy-war-common" />
+	</target>
+
+	<target name="run" depends="init-common">
+		<java classname="test.client.WebTest">
+			<arg value="${http.host}" />
+			<arg value="${http.port}" />
+			<arg value="${contextroot}" />
+			<classpath>
+				<pathelement location="${env.APS_HOME}/lib/reportbuilder.jar" />
+				<pathelement location="client" />
+			</classpath>
+		</java>
+	</target>
+
+	<target name="undeploy" depends="init-common">
+		<antcall target="undeploy-war-common" />
+	</target>
+
+	<target name="usage">
+		<antcall target="usage-common" />
+	</target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/client/test/client/WebTest.java
new file mode 100644
index 0000000..24e3ebb
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/client/test/client/WebTest.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+    private static final String TEST_NAME = "em-injection-of-no-interface-EJB";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for Java EE resource injection");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: "
+                        + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/descriptor/beans.xml
new file mode 100644
index 0000000..1d355f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/descriptor/beans.xml
@@ -0,0 +1,25 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/descriptor/persistence.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/descriptor/persistence.xml
new file mode 100644
index 0000000..82f2d7b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/descriptor/persistence.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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
+
+-->
+
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
+  <persistence-unit name="pu1" transaction-type="JTA">
+    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+    <jta-data-source>jdbc/__default</jta-data-source>
+    <non-jta-data-source>jdbc/__default</non-jta-data-source>
+    <class>myapp.Department</class>
+    <class>myapp.Employee</class>
+    <properties>
+       <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
+       <property name="eclipselink.logging.level" value="INFO"/>
+    </properties>
+  </persistence-unit>
+</persistence>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/beans/TestBeanInterface.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/beans/TestBeanInterface.java
new file mode 100644
index 0000000..8615fd5
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/beans/TestBeanInterface.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public interface TestBeanInterface {
+    public boolean m1();
+    public boolean m2();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/beans/artifacts/InjectViaAtEJB.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/beans/artifacts/InjectViaAtEJB.java
new file mode 100644
index 0000000..594448d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/beans/artifacts/InjectViaAtEJB.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface InjectViaAtEJB {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/beans/artifacts/InjectViaAtInject.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/beans/artifacts/InjectViaAtInject.java
new file mode 100644
index 0000000..8e11c88
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/beans/artifacts/InjectViaAtInject.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface InjectViaAtInject {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/beans/nonmock/TestBeanSuper.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/beans/nonmock/TestBeanSuper.java
new file mode 100644
index 0000000..3480165
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/beans/nonmock/TestBeanSuper.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+import javax.inject.Inject;
+
+import test.beans.TestBeanInterface;
+import test.ejb.TestNoInterfaceEJB;
+
+abstract class TestBeanSuper implements TestBeanInterface {
+    
+    abstract TestNoInterfaceEJB getTestEJB();
+
+    @Override
+    public boolean m1() {
+        System.out.println("TestBean::m1 called");
+        return getTestEJB().m1().equals("Hello:m1");
+    }
+
+    @Override
+    public boolean m2() {
+        System.out.println("TestBean::m2 called");
+        System.out.println("Calling TestNoInterfaceEJB from TestBean");
+        return getTestEJB().m2().equals("Hello:m2");
+    }
+
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/beans/nonmock/TestEJBInjectionViaAtEJB.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/beans/nonmock/TestEJBInjectionViaAtEJB.java
new file mode 100644
index 0000000..9948f7c
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/beans/nonmock/TestEJBInjectionViaAtEJB.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+import javax.ejb.EJB;
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Named;
+
+import test.beans.artifacts.InjectViaAtEJB;
+import test.ejb.TestNoInterfaceEJB;
+
+
+@RequestScoped
+@InjectViaAtEJB
+@Named
+public class TestEJBInjectionViaAtEJB extends TestBeanSuper{
+    @EJB TestNoInterfaceEJB tnie;
+
+    @Override
+    TestNoInterfaceEJB getTestEJB() {
+        return tnie;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/beans/nonmock/TestEJBInjectionViaInject.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/beans/nonmock/TestEJBInjectionViaInject.java
new file mode 100644
index 0000000..83f9383
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/beans/nonmock/TestEJBInjectionViaInject.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import test.beans.artifacts.InjectViaAtInject;
+import test.ejb.TestNoInterfaceEJB;
+
+
+@RequestScoped
+@InjectViaAtInject
+@Named
+public class TestEJBInjectionViaInject extends TestBeanSuper {
+    @Inject TestNoInterfaceEJB tnie;
+
+    @Override
+    TestNoInterfaceEJB getTestEJB() {
+        return tnie;
+    }
+
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/ejb/TestNoInterfaceEJB.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/ejb/TestNoInterfaceEJB.java
new file mode 100644
index 0000000..64e874e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/ejb/TestNoInterfaceEJB.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.inject.Inject;
+
+@Stateless
+public class TestNoInterfaceEJB extends TestSuperClass {
+    @Inject 
+    EntityManager em;
+
+    public String m2() {
+        System.out.println("TestNoInterfaceEJB::m2");
+        if (em == null ) return "EntityManager injection failed";
+        return "Hello:m2";
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/ejb/TestSuperClass.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/ejb/TestSuperClass.java
new file mode 100644
index 0000000..65af297
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/ejb/TestSuperClass.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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;
+
+public class TestSuperClass {
+    public String m1(){
+        System.out.println("***************TestSuperClass::m1");
+        return "Hello:m1";
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/entity/Department.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/entity/Department.java
new file mode 100644
index 0000000..14191ec
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/entity/Department.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.entity;
+
+import java.util.Set;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "DEPARTMENT")
+public class Department implements java.io.Serializable {
+
+    // Instance variables
+    private int id;
+    private String name;
+    private Set<Employee> employees;
+
+    public Department() {
+    }
+
+    public Department(int id, String name) {
+        this.id = id;
+        this.name = name;
+    }
+
+    // ===========================================================
+    // getters and setters for the state fields
+
+    @Id
+    @Column(name = "ID")
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    @Column(name = "NAME")
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    // ===========================================================
+    // getters and setters for the association fields
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "department")
+    public Set<Employee> getEmployees() {
+        return employees;
+    }
+
+    public void setEmployees(Set<Employee> employees) {
+        this.employees = employees;
+    }
+
+    public String toString() {
+        return "Department id=" + getId() + ", Department Name=" + getName();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/entity/Employee.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/entity/Employee.java
new file mode 100644
index 0000000..a1820e8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/entity/Employee.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.entity;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+@Entity
+@Table(name = "EMPLOYEE")
+public class Employee implements java.io.Serializable {
+
+    private int id;
+    private String firstName;
+    private String lastName;
+    private Department department;
+
+    public Employee() {
+    }
+
+    public Employee(int id, String firstName, String lastName) {
+        this.id = id;
+        this.firstName = firstName;
+        this.lastName = lastName;
+    }
+
+    public Employee(int id, String firstName, String lastName,
+            Department department) {
+        this.id = id;
+        this.firstName = firstName;
+        this.lastName = lastName;
+        this.department = department;
+    }
+
+    // ===========================================================
+    // getters and setters for the state fields
+    @Id
+    @Column(name = "ID")
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    @Column(name = "FIRSTNAME")
+    public String getFirstName() {
+        return firstName;
+    }
+
+    public void setFirstName(String firstName) {
+        this.firstName = firstName;
+    }
+
+    @Column(name = "LASTNAME")
+    public String getLastName() {
+        return lastName;
+    }
+
+    public void setLastName(String lastName) {
+        this.lastName = lastName;
+    }
+
+    // ===========================================================
+    // getters and setters for the association fields
+    // @ManyToOne
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "DEPARTMENT_ID")
+    public Department getDepartment() {
+        return department;
+    }
+
+    @Transient
+    public Department getDepartmentNoWeaving() {
+        try {
+            java.lang.reflect.Field f = Employee.class
+                    .getDeclaredField("department");
+            return (Department) f.get(this);
+        } catch (NoSuchFieldException e) {
+            throw new RuntimeException(
+                    "Please change argument to getDeclaredField", e);
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public void setDepartment(Department department) {
+        this.department = department;
+    }
+
+    public String toString() {
+        return "Employee id=" + getId() + ", firstName=" + getFirstName()
+                + ", lastName=" + getLastName() + ", department="
+                + getDepartment();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/servlet/NoInterfaceEJBTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/servlet/NoInterfaceEJBTestServlet.java
new file mode 100644
index 0000000..246b541
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/servlet/NoInterfaceEJBTestServlet.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.annotation.Resource;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceUnit;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.transaction.UserTransaction;
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.InjectViaAtEJB;
+import test.beans.artifacts.InjectViaAtInject;
+import test.util.JpaTest;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class NoInterfaceEJBTestServlet extends HttpServlet {
+
+    @Inject
+    @InjectViaAtInject
+    TestBeanInterface testBeanInject;
+
+    @Inject
+    @InjectViaAtEJB
+    TestBeanInterface testBeanEJB;
+
+    @Inject
+    private EntityManager em;
+
+    private @Resource
+    UserTransaction utx;
+
+
+    protected void doGet(HttpServletRequest request,
+            HttpServletResponse response) throws ServletException,
+            IOException {
+        PrintWriter writer = response.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+        //test EJB injection via @EJB
+        if (!testBeanEJB.m2())
+            msg += "Invocation on no-interface EJB -- obtained through @EJB -- (method defined in EJB) failed";
+        if (!testBeanEJB.m1())
+            msg += "Invocation on no-interface EJB -- obtained through @EJB -- (method defined in super class) failed";
+
+        //test EJB injection via @Inject
+        if (!testBeanInject.m2())
+            msg += "Invocation on no-interface EJB -- obtained through @Inject -- (method defined in EJB)  failed";
+
+        //TODO: This fails currently
+        if (!testBeanInject.m1())
+            msg += "Invocation on no-interface EJB -- obtained through @Inject -- (method defined in super class) failed";
+
+        JpaTest jt = new JpaTest(em, utx);
+        boolean status = jt.lazyLoadingInit();
+        if (!status) msg += "Injection and use of EntityMaanger failed";
+        status = jt.lazyLoadingByFind(1);
+        if (!status) msg += "Injection and use of EntityMaanger lazy loading test failed";
+        
+        writer.write(msg + "\n");
+
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/util/JPAResourceProducer.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/util/JPAResourceProducer.java
new file mode 100644
index 0000000..b029006
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/util/JPAResourceProducer.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.util;
+
+import javax.enterprise.inject.Produces;
+import javax.inject.Singleton;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+
+@Singleton
+public class JPAResourceProducer {
+    @Produces @PersistenceContext(unitName="pu1")
+    EntityManager customerDatabasePersistenceUnit;
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/util/JpaTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/util/JpaTest.java
new file mode 100644
index 0000000..3d47448
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-injection-no-interface-ejb/servlet/test/util/JpaTest.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.util;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Query;
+import javax.transaction.UserTransaction;
+
+import test.entity.Department;
+import test.entity.Employee;
+
+public class JpaTest {
+
+    private EntityManager em;
+    private UserTransaction utx;
+
+    private static Department deptRef[] = new Department[2];
+    private static Employee empRef[] = new Employee[5];
+
+    public JpaTest() {
+    }
+
+    public JpaTest(EntityManager em, UserTransaction utx) {
+        this.em = em;
+        this.utx = utx;
+    }
+
+    public boolean lazyLoadingInit() {
+        boolean status = false;
+        System.out.println("-----lazeLoadingInit()---------");
+        try {
+            deptRef[0] = new Department(1, "Engineering");
+            deptRef[1] = new Department(2, "Marketing");
+            utx.begin();
+            em.joinTransaction();
+            for (int i = 0; i < 2; i++) {
+                em.persist(deptRef[i]);
+            }
+            utx.commit();
+
+            empRef[0] = new Employee(1, "Alan", "Frechette", deptRef[0]);
+            empRef[1] = new Employee(2, "Arthur", "Wesley", deptRef[0]);
+            empRef[2] = new Employee(3, "Abe", "White", deptRef[0]);
+            empRef[3] = new Employee(4, "Paul", "Hinz", deptRef[1]);
+            empRef[4] = new Employee(5, "Carla", "Calrson", deptRef[1]);
+            utx.begin();
+            em.joinTransaction();
+            for (int i = 0; i < 5; i++) {
+                em.persist(empRef[i]);
+            }
+            utx.commit();
+            status = true;
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+    public boolean lazyLoadingByFind(int employeeID) {
+
+        boolean status = true;
+        System.out.println("------------lazyLoadingAfterFind -----------");
+        System.out.println("employeeID = " + employeeID);
+        Employee emp = em.find(Employee.class, employeeID);
+
+        System.out.println("found: emp.id=" + emp.getId());
+
+        try {
+            // 1. get Department before loading
+            Department deptBL = emp.getDepartmentNoWeaving();
+            System.out.println("1. before loading: deptBL=" + deptBL);
+            String deptNameBL = null;
+            if (deptBL != null) {
+                deptNameBL = deptBL.getName();
+                System.out.println("deptNameBL=" + deptNameBL);
+            }
+            // assert deptBL == null;
+            if (deptBL != null) {
+                status = false;
+            }
+
+            // 2. loading
+            String deptName = emp.getDepartment().getName();
+            System.out.println("2. loading, deptName = " + deptName);
+
+            // 3. get Department after loading
+            Department deptAL = emp.getDepartmentNoWeaving();
+            System.out.println("3. after loading: deptAL=" + deptAL);
+            String deptNameAL = deptAL.getName();
+            System.out.println("deptNameAL=" + deptNameAL);
+            // assert deptAL != null
+            // assert deptAL.getName == deptName;
+            if (deptAL == null || deptNameAL != deptName) {
+                status = false;
+            }
+        } catch (Exception ex) {
+            status = false;
+            ex.printStackTrace();
+        }
+
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+    public boolean lazyLoadingByQuery(String fName) {
+
+        boolean status = true;
+        System.out.println("------------lazyLoadingByQuery -----------");
+        System.out.println("fName = " + fName);
+        Query query = em.createQuery(
+                "SELECT e FROM Employee e WHERE e.firstName like :firstName")
+                .setParameter("firstName", fName);
+        ;
+        Employee emp = (Employee) query.getSingleResult();
+
+        System.out.println("queried: emp.firstName=" + emp.getFirstName());
+
+        try {
+            // 1. get Department before loading
+            Department deptBL = emp.getDepartmentNoWeaving();
+            System.out.println("1. before loading: deptBL=" + deptBL);
+            String deptNameBL = null;
+            if (deptBL != null) {
+                deptNameBL = deptBL.getName();
+                System.out.println("deptNameBL=" + deptNameBL);
+            }
+            // assert deptBL == null;
+            if (deptBL != null) {
+                status = false;
+            }
+
+            // 2. loading
+            String deptName = emp.getDepartment().getName();
+            System.out.println("2. loading, deptName = " + deptName);
+
+            // 3. get Department after loading
+            Department deptAL = emp.getDepartmentNoWeaving();
+            System.out.println("3. after loading: deptAL=" + deptAL);
+            String deptNameAL = deptAL.getName();
+            System.out.println("deptNameAL=" + deptNameAL);
+            // assert deptAL != null
+            // assert deptAL.getName == deptName;
+            if (deptAL == null || deptNameAL != deptName) {
+                status = false;
+            }
+        } catch (Exception ex) {
+            status = false;
+            ex.printStackTrace();
+        }
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/README
new file mode 100644
index 0000000..91f9387
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/README
@@ -0,0 +1,2 @@
+Test
+- EM producer method scenario with extended transaction context (issue 11805)
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/build.properties
new file mode 100644
index 0000000..b2a8756
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/build.properties
@@ -0,0 +1,25 @@
+<!--
+
+    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}-em-resource-injection-extended-transactional-context"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
+<property name="persistence.xml" value="descriptor/persistence.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/build.xml
new file mode 100644
index 0000000..295d086
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/build.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,create-resources,deploy,run,undeploy,delete-resources" />
+
+	<target name="clean" depends="init-common">
+		<antcall target="clean-common" />
+		<delete>
+			<fileset dir="." includes="*.class" />
+			<fileset dir="client/test/client" includes="*.class" />
+		</delete>
+	</target>
+
+	<target name="compile" depends="clean">
+		<antcall target="compile-common">
+			<param name="src" value="servlet" />
+		</antcall>
+	</target>
+
+	<target name="build" depends="compile">
+		<property name="hasWebclient" value="yes" />
+		<antcall target="webclient-war-common">
+			<param name="hasWebclient" value="yes" />
+			<param name="webclient.war.classes" value="**/*.class" />
+		</antcall>
+
+		<javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar" includes="test/client/WebTest.java" />
+
+	</target>
+
+	<target name="build-publish-war" depends="build, publish-war-common" />
+
+	<target name="deploy" depends="init-common">
+		<antcall target="deploy-war-common" />
+	</target>
+
+	<target name="create-resources" depends="init-common">
+		<antcall target="create-jdbc-connpool-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+		</antcall>
+		<antcall target="create-jdbc-resource-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+			<param name="jdbc.resource.name" value="jdbc/jdbc-dev-test-resource" />
+		</antcall>
+	</target>
+
+
+	<target name="run" depends="init-common">
+		<java classname="test.client.WebTest">
+			<arg value="${http.host}" />
+			<arg value="${http.port}" />
+			<arg value="${contextroot}" />
+			<classpath>
+				<pathelement location="${env.APS_HOME}/lib/reportbuilder.jar" />
+				<pathelement location="client" />
+			</classpath>
+		</java>
+	</target>
+
+	<target name="undeploy" depends="init-common">
+		<antcall target="undeploy-war-common" />
+	</target>
+
+	<target name="delete-resources" depends="init-common">
+		<antcall target="delete-jdbc-resource-common">
+			<param name="jdbc.resource.name" value="jdbc/jdbc-dev-test-resource" />
+		</antcall>
+
+		<antcall target="delete-jdbc-connpool-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+		</antcall>
+	</target>
+
+	<target name="usage">
+		<antcall target="usage-common" />
+	</target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/client/test/client/WebTest.java
new file mode 100644
index 0000000..7dc1c83
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/client/test/client/WebTest.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+    private static final String TEST_NAME = "em-resource-injection-extended-transaction-context";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for Java EE resource injection");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            invoke("llinit");
+            invoke("llquery");
+            invoke("llfind");
+            invoke("llinj");
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke(String testCase) throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl"
+                + "?testcase=" + testCase;
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME + testCase, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME + testCase, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: "
+                        + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME + testCase, stat.FAIL);
+            }
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/descriptor/beans.xml
new file mode 100644
index 0000000..1d355f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/descriptor/beans.xml
@@ -0,0 +1,25 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/descriptor/persistence.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/descriptor/persistence.xml
new file mode 100644
index 0000000..82f2d7b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/descriptor/persistence.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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
+
+-->
+
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
+  <persistence-unit name="pu1" transaction-type="JTA">
+    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+    <jta-data-source>jdbc/__default</jta-data-source>
+    <non-jta-data-source>jdbc/__default</non-jta-data-source>
+    <class>myapp.Department</class>
+    <class>myapp.Employee</class>
+    <properties>
+       <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
+       <property name="eclipselink.logging.level" value="INFO"/>
+    </properties>
+  </persistence-unit>
+</persistence>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/beans/TestBeanInterface.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/beans/TestBeanInterface.java
new file mode 100644
index 0000000..29e137a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/beans/TestBeanInterface.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public interface TestBeanInterface {
+    public void m1();
+    public void m2();
+    
+    public String testDatasourceInjection();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/beans/artifacts/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/beans/artifacts/Preferred.java
new file mode 100644
index 0000000..b7584c8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/beans/artifacts/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/beans/artifacts/TestDatabase.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/beans/artifacts/TestDatabase.java
new file mode 100644
index 0000000..b69ab8e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/beans/artifacts/TestDatabase.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface TestDatabase {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/beans/nonmock/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/beans/nonmock/TestBean.java
new file mode 100644
index 0000000..2363d68
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/beans/nonmock/TestBean.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.TestDatabase;
+
+
+@RequestScoped
+@Preferred
+public class TestBean implements TestBeanInterface{
+    public static boolean testBeanInvoked = false;
+    
+    @Inject //@TestDatabase 
+    EntityManager emf;
+
+    @Override
+    public void m1() {
+        testBeanInvoked = true;
+        System.out.println("TestBean::m1 called");
+    }
+
+    @Override
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+    @Override
+    public String testDatasourceInjection() {
+        return (emf==null ? "typesafe injection into testbean failed" : "");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/entity/Department.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/entity/Department.java
new file mode 100644
index 0000000..14191ec
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/entity/Department.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.entity;
+
+import java.util.Set;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "DEPARTMENT")
+public class Department implements java.io.Serializable {
+
+    // Instance variables
+    private int id;
+    private String name;
+    private Set<Employee> employees;
+
+    public Department() {
+    }
+
+    public Department(int id, String name) {
+        this.id = id;
+        this.name = name;
+    }
+
+    // ===========================================================
+    // getters and setters for the state fields
+
+    @Id
+    @Column(name = "ID")
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    @Column(name = "NAME")
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    // ===========================================================
+    // getters and setters for the association fields
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "department")
+    public Set<Employee> getEmployees() {
+        return employees;
+    }
+
+    public void setEmployees(Set<Employee> employees) {
+        this.employees = employees;
+    }
+
+    public String toString() {
+        return "Department id=" + getId() + ", Department Name=" + getName();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/entity/Employee.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/entity/Employee.java
new file mode 100644
index 0000000..a1820e8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/entity/Employee.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.entity;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+@Entity
+@Table(name = "EMPLOYEE")
+public class Employee implements java.io.Serializable {
+
+    private int id;
+    private String firstName;
+    private String lastName;
+    private Department department;
+
+    public Employee() {
+    }
+
+    public Employee(int id, String firstName, String lastName) {
+        this.id = id;
+        this.firstName = firstName;
+        this.lastName = lastName;
+    }
+
+    public Employee(int id, String firstName, String lastName,
+            Department department) {
+        this.id = id;
+        this.firstName = firstName;
+        this.lastName = lastName;
+        this.department = department;
+    }
+
+    // ===========================================================
+    // getters and setters for the state fields
+    @Id
+    @Column(name = "ID")
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    @Column(name = "FIRSTNAME")
+    public String getFirstName() {
+        return firstName;
+    }
+
+    public void setFirstName(String firstName) {
+        this.firstName = firstName;
+    }
+
+    @Column(name = "LASTNAME")
+    public String getLastName() {
+        return lastName;
+    }
+
+    public void setLastName(String lastName) {
+        this.lastName = lastName;
+    }
+
+    // ===========================================================
+    // getters and setters for the association fields
+    // @ManyToOne
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "DEPARTMENT_ID")
+    public Department getDepartment() {
+        return department;
+    }
+
+    @Transient
+    public Department getDepartmentNoWeaving() {
+        try {
+            java.lang.reflect.Field f = Employee.class
+                    .getDeclaredField("department");
+            return (Department) f.get(this);
+        } catch (NoSuchFieldException e) {
+            throw new RuntimeException(
+                    "Please change argument to getDeclaredField", e);
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public void setDepartment(Department department) {
+        this.department = department;
+    }
+
+    public String toString() {
+        return "Employee id=" + getId() + ", firstName=" + getFirstName()
+                + ", lastName=" + getLastName() + ", department="
+                + getDepartment();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/servlet/JPAResourceInjectionServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/servlet/JPAResourceInjectionServlet.java
new file mode 100644
index 0000000..4472160
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/servlet/JPAResourceInjectionServlet.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.annotation.Resource;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceUnit;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.transaction.UserTransaction;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.TestDatabase;
+import test.util.JpaTest;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class JPAResourceInjectionServlet extends HttpServlet {
+
+    @PersistenceUnit(unitName = "pu1")
+    private EntityManagerFactory emf;
+
+    @Inject
+    //@TestDatabase
+    private EntityManager emf1;
+
+    private @Resource
+    UserTransaction utx;
+    
+    @Inject
+    @Preferred
+    TestBeanInterface tbi;
+
+    protected void doGet(HttpServletRequest request,
+            HttpServletResponse response) throws ServletException,
+            IOException {
+        PrintWriter writer = response.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+        System.out.println("JPAResourceInjectionServlet::@PersistenceUnit " +
+        		"CDI EntityManagerFactory=" + emf1);
+
+        EntityManager em = emf1;
+        System.out.println("JPAResourceInjectionServlet::createEM" +
+        		"EntityManager=" + em);
+        String testcase = request.getParameter("testcase");
+        System.out.println("testcase=" + testcase);
+
+        if (testcase != null) {
+            JpaTest jt = new JpaTest(em, utx);
+            boolean status = false;
+            if ("llinit".equals(testcase)) {
+                status = jt.lazyLoadingInit();
+            } else if ("llfind".equals(testcase)) {
+                status = jt.lazyLoadingByFind(1);
+            } else if ("llquery".equals(testcase)) {
+                status = jt.lazyLoadingByQuery("Carla");
+            } else if ("llinj".equals(testcase)){
+                status = ((tbi != null) && 
+                        (tbi.testDatasourceInjection().trim().length()==0));
+            }
+            if (status) {
+                msg += "";// pass
+            } else {
+                msg += (testcase + ":fail");
+            }
+        }
+
+        writer.write(msg + "\n");
+
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/util/JPAResourceProducer.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/util/JPAResourceProducer.java
new file mode 100644
index 0000000..1d6fd04
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/util/JPAResourceProducer.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.util;
+
+import javax.enterprise.inject.Produces;
+import javax.inject.Singleton;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.PersistenceContextType;
+
+@Singleton
+public class JPAResourceProducer {
+    @Produces @PersistenceContext(unitName="pu1", type=PersistenceContextType.EXTENDED)
+    //@TestDatabase 
+    EntityManager customerDatabasePersistenceUnit;
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/util/JpaTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/util/JpaTest.java
new file mode 100644
index 0000000..3d47448
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-extended-transaction-context/servlet/test/util/JpaTest.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.util;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Query;
+import javax.transaction.UserTransaction;
+
+import test.entity.Department;
+import test.entity.Employee;
+
+public class JpaTest {
+
+    private EntityManager em;
+    private UserTransaction utx;
+
+    private static Department deptRef[] = new Department[2];
+    private static Employee empRef[] = new Employee[5];
+
+    public JpaTest() {
+    }
+
+    public JpaTest(EntityManager em, UserTransaction utx) {
+        this.em = em;
+        this.utx = utx;
+    }
+
+    public boolean lazyLoadingInit() {
+        boolean status = false;
+        System.out.println("-----lazeLoadingInit()---------");
+        try {
+            deptRef[0] = new Department(1, "Engineering");
+            deptRef[1] = new Department(2, "Marketing");
+            utx.begin();
+            em.joinTransaction();
+            for (int i = 0; i < 2; i++) {
+                em.persist(deptRef[i]);
+            }
+            utx.commit();
+
+            empRef[0] = new Employee(1, "Alan", "Frechette", deptRef[0]);
+            empRef[1] = new Employee(2, "Arthur", "Wesley", deptRef[0]);
+            empRef[2] = new Employee(3, "Abe", "White", deptRef[0]);
+            empRef[3] = new Employee(4, "Paul", "Hinz", deptRef[1]);
+            empRef[4] = new Employee(5, "Carla", "Calrson", deptRef[1]);
+            utx.begin();
+            em.joinTransaction();
+            for (int i = 0; i < 5; i++) {
+                em.persist(empRef[i]);
+            }
+            utx.commit();
+            status = true;
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+    public boolean lazyLoadingByFind(int employeeID) {
+
+        boolean status = true;
+        System.out.println("------------lazyLoadingAfterFind -----------");
+        System.out.println("employeeID = " + employeeID);
+        Employee emp = em.find(Employee.class, employeeID);
+
+        System.out.println("found: emp.id=" + emp.getId());
+
+        try {
+            // 1. get Department before loading
+            Department deptBL = emp.getDepartmentNoWeaving();
+            System.out.println("1. before loading: deptBL=" + deptBL);
+            String deptNameBL = null;
+            if (deptBL != null) {
+                deptNameBL = deptBL.getName();
+                System.out.println("deptNameBL=" + deptNameBL);
+            }
+            // assert deptBL == null;
+            if (deptBL != null) {
+                status = false;
+            }
+
+            // 2. loading
+            String deptName = emp.getDepartment().getName();
+            System.out.println("2. loading, deptName = " + deptName);
+
+            // 3. get Department after loading
+            Department deptAL = emp.getDepartmentNoWeaving();
+            System.out.println("3. after loading: deptAL=" + deptAL);
+            String deptNameAL = deptAL.getName();
+            System.out.println("deptNameAL=" + deptNameAL);
+            // assert deptAL != null
+            // assert deptAL.getName == deptName;
+            if (deptAL == null || deptNameAL != deptName) {
+                status = false;
+            }
+        } catch (Exception ex) {
+            status = false;
+            ex.printStackTrace();
+        }
+
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+    public boolean lazyLoadingByQuery(String fName) {
+
+        boolean status = true;
+        System.out.println("------------lazyLoadingByQuery -----------");
+        System.out.println("fName = " + fName);
+        Query query = em.createQuery(
+                "SELECT e FROM Employee e WHERE e.firstName like :firstName")
+                .setParameter("firstName", fName);
+        ;
+        Employee emp = (Employee) query.getSingleResult();
+
+        System.out.println("queried: emp.firstName=" + emp.getFirstName());
+
+        try {
+            // 1. get Department before loading
+            Department deptBL = emp.getDepartmentNoWeaving();
+            System.out.println("1. before loading: deptBL=" + deptBL);
+            String deptNameBL = null;
+            if (deptBL != null) {
+                deptNameBL = deptBL.getName();
+                System.out.println("deptNameBL=" + deptNameBL);
+            }
+            // assert deptBL == null;
+            if (deptBL != null) {
+                status = false;
+            }
+
+            // 2. loading
+            String deptName = emp.getDepartment().getName();
+            System.out.println("2. loading, deptName = " + deptName);
+
+            // 3. get Department after loading
+            Department deptAL = emp.getDepartmentNoWeaving();
+            System.out.println("3. after loading: deptAL=" + deptAL);
+            String deptNameAL = deptAL.getName();
+            System.out.println("deptNameAL=" + deptNameAL);
+            // assert deptAL != null
+            // assert deptAL.getName == deptName;
+            if (deptAL == null || deptNameAL != deptName) {
+                status = false;
+            }
+        } catch (Exception ex) {
+            status = false;
+            ex.printStackTrace();
+        }
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/README
new file mode 100644
index 0000000..dc88f85
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/README
@@ -0,0 +1,2 @@
+A test to check if resources produced by a class in a library jar is available in servlets and EJBs.
+[issues 11653 and 11640]
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/build.properties
new file mode 100644
index 0000000..1bc0c2e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/build.properties
@@ -0,0 +1,29 @@
+<!--
+
+    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-full-ear"/>
+<property name="appname" value="${module}"/>         
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="se.client" value="com.acme.Client"/>
+<property name="app.type" value="application"/>
+<property name="sun-application.xml" value="descriptor/sun-application.xml"/>
+<property name="application.xml" value="descriptor/application.xml"/>
+<property name="persistence.xml" value="descriptor/persistence.xml"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
+<property name="contextroot" value="${module}"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/build.xml
new file mode 100644
index 0000000..8539621
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/build.xml
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="cdi-full-ear-App" default="usage" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+
+    <target name="all" depends="clean,build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+      <antcall  target="clean-common"/>
+    </target>
+ 
+    <target name="compile" depends="clean">
+         <antcall target="compile-common">
+            <param name="src" value="lib"/>
+        </antcall>
+
+       
+        <antcall target="compile-common">
+            <param name="src" value="ejb"/>
+        </antcall>
+
+        <antcall target="compile-common">
+            <param name="src" value="war"/>
+        </antcall>
+
+	    <javac classpath="${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/lib/gf-client.jar:${build.classes.dir}:${env.APS_HOME}/lib/reporter.jar" srcdir="client" destdir="${build.classes.dir}" debug="on" failonerror="true">
+          <compilerarg line="-endorseddirs ${env.S1AS_HOME}/modules/endorsed"/>
+        </javac>
+    </target>
+
+    <target name="build" depends="compile">
+        <mkdir dir="${assemble.dir}"/>
+
+        <antcall target="ejb-jar-common">
+          <param name="ejbjar.classes" value="com/acme/ejb/**/*.class"/>
+        </antcall>
+
+        <!-- build library jar -->
+        <mkdir dir="${build.classes.dir}/META-INF"/>
+        <copy file="${persistence.xml}"
+              tofile="${build.classes.dir}/META-INF/persistence.xml"
+              failonerror="false"/>
+        <copy file="${beans.xml}"
+              tofile="${build.classes.dir}/META-INF/beans.xml"
+              failonerror="false"/>
+
+        <mkdir dir="${build.classes.dir}/lib-dir"/>
+
+        <jar jarfile="${build.classes.dir}/lib-dir/lib.jar" basedir="${build.classes.dir}" includes="com/acme/util/*.class">
+          <metainf dir="${build.classes.dir}/META-INF">
+            <include name="persistence.xml"/>
+            <include name="beans.xml"/>
+          </metainf>
+        </jar>
+
+        <!-- build war -->
+        <!-- must remove ejb classes and lib classes first -->
+        <delete file="${build.classes.dir}/META-INF/beans.xml"/>
+        <delete dir="${build.classes.dir}/com/acme/ejb"/>
+        <delete dir="${build.classes.dir}/com/acme/util"/>
+        <antcall target="webclient-war-common">
+          <param name="hasWebclient" value="true"/>
+        </antcall>
+
+        <copy file="${env.APS_HOME}/lib/reporter.jar" todir="${build.classes.dir}/lib-dir"/>
+
+        <delete file="${assemble.dir}/${appname}.ear"/>
+        <mkdir dir="${assemble.dir}"/>
+        <mkdir dir="${build.classes.dir}/META-INF"/>
+        <copy file="${sun-application.xml}" tofile="${build.classes.dir}/META-INF/sun-application.xml"  	failonerror="false"/>
+        <copy file="${glassfish-resources-ear.xml}" tofile="${build.classes.dir}/META-INF/glassfish-resources.xml" failonerror="false"  filtering="true"/>
+        <ear earfile="${assemble.dir}/${appname}App.ear"
+             appxml="${application.xml}" >
+          <fileset dir="${assemble.dir}">
+            <include name="*.jar"/>
+            <include name="*.war"/>
+          </fileset>
+          <fileset dir="${build.classes.dir}">
+	        <include name="META-INF/sun-application.xml"/>
+            <include name="META-INF/glassfish-resources.xml"/>
+          </fileset>
+<!--
+    <fileset dir="${env.APS_HOME}" includes="lib/reporter.jar"/>
+-->
+    <fileset dir="${build.classes.dir}" includes="lib-dir/*"/>
+  </ear>  
+
+    </target> 
+    
+    <target name="deploy" 
+            depends="init-common">
+        <antcall target="deploy-common"/>
+    </target>
+
+    <target name="run" depends="init-common">
+       <java  fork="on" 
+              failonerror="true"
+              classpath="${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/lib/gf-client.jar:${build.classes.dir}:${env.APS_HOME}/lib/reporter.jar"
+              classname="${se.client}">
+           <arg line="${contextroot}"/>
+           <arg line="${http.host}"/>
+           <arg line="${http.port}"/>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/client/com/acme/Client.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/client/com/acme/Client.java
new file mode 100644
index 0000000..c5ca393
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/client/com/acme/Client.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import javax.annotation.Resource;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+public class Client {
+
+    private static final String TEST_NAME = "em-resource-injection-with-resource-declaration-in-another-jar";
+
+    private static SimpleReporterAdapter stat = 
+                            new SimpleReporterAdapter("appserv-tests");
+
+    private static String appName;
+    private String host;
+    private String port;
+
+    @Resource(lookup = "java:app/env/value1")
+    private static Integer appLevelViaLookup;
+
+    public static void main(String args[]) {
+        appName = args[0];
+        stat.addDescription(appName);
+        Client client = new Client(args);
+        client.doTest();
+        stat.printSummary(appName + "ID");
+        System.out.println("appLevelViaLookup = '" + appLevelViaLookup + "'");
+    }
+
+    public Client(String[] args) {
+        host = args[1];
+        port = args[2];
+    }
+
+    public void doTest() {
+        try {
+            String url = "http://" + host + ":" + port + "/" + appName
+                    + "/HelloServlet";
+            System.out.println("invoking webclient servlet at " + 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.out.println("<response>:" + line);
+                if (line.trim().length() > 0) {
+                    stat.addStatus(TEST_NAME, stat.FAIL);
+                    return;
+                }
+            }
+            if (code != 200) {
+                stat.addStatus(TEST_NAME, stat.FAIL);
+                return;
+            }
+            stat.addStatus(TEST_NAME, stat.PASS);
+
+        } catch (Exception e) {
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            e.printStackTrace();
+        }
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/descriptor/application.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/descriptor/application.xml
new file mode 100644
index 0000000..1188e6a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/descriptor/application.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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">
+  <display-name>ejb-ejb30-hello-session3App</display-name>
+  <module>
+    <ejb>cdi-full-ear-ejb.jar</ejb>
+  </module>
+  <module>
+    <web>
+      <web-uri>cdi-full-ear-web.war</web-uri>
+      <context-root>cdi-full-ear</context-root>
+    </web>
+  </module>
+  <library-directory>lib-dir</library-directory>
+  <env-entry>
+     <env-entry-name>java:app/env/value1</env-entry-name>
+     <env-entry-type>java.lang.Integer</env-entry-type>
+     <env-entry-value>18338</env-entry-value>
+  </env-entry>
+  <env-entry>
+    <env-entry-name>java:app/env/myString</env-entry-name>
+    <env-entry-type>java.lang.String</env-entry-type>
+    <env-entry-value>myString</env-entry-value>
+  </env-entry>
+</application>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/descriptor/persistence.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/descriptor/persistence.xml
new file mode 100644
index 0000000..82f2d7b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/descriptor/persistence.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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
+
+-->
+
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
+  <persistence-unit name="pu1" transaction-type="JTA">
+    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+    <jta-data-source>jdbc/__default</jta-data-source>
+    <non-jta-data-source>jdbc/__default</non-jta-data-source>
+    <class>myapp.Department</class>
+    <class>myapp.Employee</class>
+    <properties>
+       <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
+       <property name="eclipselink.logging.level" value="INFO"/>
+    </properties>
+  </persistence-unit>
+</persistence>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/ejb/com/acme/ejb/api/Hello.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/ejb/com/acme/ejb/api/Hello.java
new file mode 100644
index 0000000..739e1ec
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/ejb/com/acme/ejb/api/Hello.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme.ejb.api;
+
+public interface Hello {
+
+    public String hello();
+    public static final String HELLO_TEST_STRING = "hello, world!\n";
+
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/ejb/com/acme/ejb/api/HelloRemote.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/ejb/com/acme/ejb/api/HelloRemote.java
new file mode 100644
index 0000000..0993e59
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/ejb/com/acme/ejb/api/HelloRemote.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme.ejb.api;
+
+import javax.ejb.Remote;
+
+@Remote
+public interface HelloRemote {
+
+    public String hello();
+
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/ejb/com/acme/ejb/impl/HelloSingleton.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/ejb/com/acme/ejb/impl/HelloSingleton.java
new file mode 100644
index 0000000..083e62f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/ejb/com/acme/ejb/impl/HelloSingleton.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme.ejb.impl;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.annotation.Resource;
+import javax.ejb.DependsOn;
+import javax.ejb.SessionContext;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceUnit;
+
+import com.acme.ejb.api.Hello;
+import com.acme.util.TestDatabase;
+
+@Singleton
+@Startup
+@DependsOn("Singleton4")
+public class HelloSingleton implements Hello {
+
+    @Resource
+    SessionContext sessionCtx;
+
+    @PersistenceUnit(unitName = "pu1")
+    @TestDatabase
+    private EntityManagerFactory emf;
+    
+
+    @PostConstruct
+    private void init() {
+        System.out.println("HelloSingleton::init()");
+
+        String appName;
+        String moduleName;
+        appName = (String) sessionCtx.lookup("java:app/AppName");
+        moduleName = (String) sessionCtx.lookup("java:module/ModuleName");
+        System.out.println("AppName = " + appName);
+        System.out.println("ModuleName = " + moduleName);
+    }
+
+    public String hello() {
+        System.out.println("HelloSingleton::hello()");
+        return testEMF(emf);
+    }
+
+    private String testEMF(EntityManagerFactory emf2) {
+        if (emf == null) return "EMF injection failed, is null in Singleton EJB";
+        if (emf.createEntityManager() == null) return "Usage of EMF failed in Singleton EJB";
+        return Hello.HELLO_TEST_STRING;
+    }
+
+    @PreDestroy
+    private void destroy() {
+        System.out.println("HelloSingleton::destroy()");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/ejb/com/acme/ejb/impl/Singleton4.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/ejb/com/acme/ejb/impl/Singleton4.java
new file mode 100644
index 0000000..b3fd249
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/ejb/com/acme/ejb/impl/Singleton4.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme.ejb.impl;
+
+import javax.ejb.*;
+import javax.annotation.*;
+
+
+@Singleton
+public class Singleton4 {
+
+    @PostConstruct
+    public void init() {
+        System.out.println("In SingletonBean4::init()");
+    }
+    
+    @PreDestroy
+    public void destroy() {
+        System.out.println("In SingletonBean4::destroy()");
+    }
+
+
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/lib/com/acme/util/ResourcesProducer.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/lib/com/acme/util/ResourcesProducer.java
new file mode 100644
index 0000000..fdc079b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/lib/com/acme/util/ResourcesProducer.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme.util;
+
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+@Singleton
+public class ResourcesProducer {
+    @Produces
+    @PersistenceContext(unitName = "pu1")
+    @TestDatabase
+    EntityManager customerDatabasePersistenceUnit;
+    
+    @Inject
+    TestDependentBeanInLib foo;
+    
+    public boolean isInjectionSuccessful(){
+        return (foo != null);
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/lib/com/acme/util/TestDatabase.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/lib/com/acme/util/TestDatabase.java
new file mode 100644
index 0000000..db9e318
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/lib/com/acme/util/TestDatabase.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme.util;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target( { TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface TestDatabase {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/lib/com/acme/util/TestDependentBeanInLib.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/lib/com/acme/util/TestDependentBeanInLib.java
new file mode 100644
index 0000000..9596b22
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/lib/com/acme/util/TestDependentBeanInLib.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme.util;
+
+
+public class TestDependentBeanInLib {
+    public TestDependentBeanInLib() {
+        super();
+    }
+    
+    public String foo(){
+        return "foo!";
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/lib/com/acme/util/TestManagedBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/lib/com/acme/util/TestManagedBean.java
new file mode 100644
index 0000000..c7763cc
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/lib/com/acme/util/TestManagedBean.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme.util;
+
+import javax.annotation.ManagedBean;
+import javax.inject.Inject;
+
+@ManagedBean
+public class TestManagedBean {
+    @Inject
+    private TestDependentBeanInLib tdbl;
+    
+    public boolean isInjectionSuccessful(){
+        return tdbl != null;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/manifest.mf b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/manifest.mf
new file mode 100644
index 0000000..328e8e5
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/manifest.mf
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+X-COMMENT: Main-Class will be added automatically by build
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/war/com/acme/servlet/HelloServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/war/com/acme/servlet/HelloServlet.java
new file mode 100644
index 0000000..221e1e4
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection-with-resource-declaration-in-another-jar/war/com/acme/servlet/HelloServlet.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme.servlet;
+
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.ejb.EJB;
+import javax.inject.Inject;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceUnit;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import com.acme.ejb.api.Hello;
+import com.acme.util.TestDependentBeanInLib;
+import com.acme.util.ResourcesProducer;
+import com.acme.util.TestDatabase;
+import com.acme.util.TestManagedBean;
+
+@WebServlet(urlPatterns = "/HelloServlet", loadOnStartup = 1)
+
+@SuppressWarnings("serial")
+public class HelloServlet extends HttpServlet {
+    String msg = "";
+    
+    @EJB(name = "java:module/m1", beanName = "HelloSingleton", beanInterface = Hello.class)
+    Hello h;
+    
+    @PersistenceUnit(unitName = "pu1")
+    @TestDatabase
+    private EntityManagerFactory emf;
+
+    @Inject
+    private ResourcesProducer rp;
+    
+    @Inject
+    private TestDependentBeanInLib fb;
+    
+    @Inject
+    private TestManagedBean tmb;
+    
+    @Override
+    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+            throws ServletException, IOException {
+        System.out.println("In HelloServlet::doGet");
+        resp.setContentType("text/html");
+        PrintWriter out = resp.getWriter();
+        
+        checkForNull(emf, "Injection of EMF failed in Servlet");
+        //ensure EMF works!
+        emf.createEntityManager();
+        
+        //call Singleton EJB
+        String response = h.hello();
+        if(!response.equals(Hello.HELLO_TEST_STRING))
+            msg += "Invocation of Hello Singeton EJB failed:msg=" + response;
+        
+        if (!rp.isInjectionSuccessful())
+            msg += "Injection of a bean in lib directory into another " +
+            		"Bean in lib directory failed";
+        checkForNull(fb, "Injection of a bean that is placed in lib directory " +
+        		"into a Servlet that is placed in a WAR failed");
+        checkForNull(tmb, "Injection of a Managed bean that is placed in lib directory " +
+        "into a Servlet that is placed in a WAR failed");
+        
+        if (!rp.isInjectionSuccessful())
+            msg += "Injection of a bean in lib directory into another Bean " +
+            		"in lib directory failed";
+        
+        if (!tmb.isInjectionSuccessful())
+            msg += "Injection of a Bean placed in lib dir into a " +
+            		"ManagedBean placed in lib dir failed";
+        
+        
+        out.println(msg);
+    }
+
+    protected void checkForNull(Object o, String errorMessage){
+        System.out.println("o=" + o);
+        if (o == null) msg += " " + errorMessage;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/README
new file mode 100644
index 0000000..d620428
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/README
@@ -0,0 +1,5 @@
+Test
+- Use of Java EE component environment resources 
+    - type safe injection of JPA resources (EntityManagerFactory, EntityManager) 
+    by declaring a resource by annotating a producer field wuth a 
+    component environment injection annotation
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/build.properties
new file mode 100644
index 0000000..0411ec9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/build.properties
@@ -0,0 +1,25 @@
+<!--
+
+    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}-em-resource-injection"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
+<property name="persistence.xml" value="descriptor/persistence.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/build.xml
new file mode 100644
index 0000000..295d086
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/build.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,create-resources,deploy,run,undeploy,delete-resources" />
+
+	<target name="clean" depends="init-common">
+		<antcall target="clean-common" />
+		<delete>
+			<fileset dir="." includes="*.class" />
+			<fileset dir="client/test/client" includes="*.class" />
+		</delete>
+	</target>
+
+	<target name="compile" depends="clean">
+		<antcall target="compile-common">
+			<param name="src" value="servlet" />
+		</antcall>
+	</target>
+
+	<target name="build" depends="compile">
+		<property name="hasWebclient" value="yes" />
+		<antcall target="webclient-war-common">
+			<param name="hasWebclient" value="yes" />
+			<param name="webclient.war.classes" value="**/*.class" />
+		</antcall>
+
+		<javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar" includes="test/client/WebTest.java" />
+
+	</target>
+
+	<target name="build-publish-war" depends="build, publish-war-common" />
+
+	<target name="deploy" depends="init-common">
+		<antcall target="deploy-war-common" />
+	</target>
+
+	<target name="create-resources" depends="init-common">
+		<antcall target="create-jdbc-connpool-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+		</antcall>
+		<antcall target="create-jdbc-resource-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+			<param name="jdbc.resource.name" value="jdbc/jdbc-dev-test-resource" />
+		</antcall>
+	</target>
+
+
+	<target name="run" depends="init-common">
+		<java classname="test.client.WebTest">
+			<arg value="${http.host}" />
+			<arg value="${http.port}" />
+			<arg value="${contextroot}" />
+			<classpath>
+				<pathelement location="${env.APS_HOME}/lib/reportbuilder.jar" />
+				<pathelement location="client" />
+			</classpath>
+		</java>
+	</target>
+
+	<target name="undeploy" depends="init-common">
+		<antcall target="undeploy-war-common" />
+	</target>
+
+	<target name="delete-resources" depends="init-common">
+		<antcall target="delete-jdbc-resource-common">
+			<param name="jdbc.resource.name" value="jdbc/jdbc-dev-test-resource" />
+		</antcall>
+
+		<antcall target="delete-jdbc-connpool-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+		</antcall>
+	</target>
+
+	<target name="usage">
+		<antcall target="usage-common" />
+	</target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/client/test/client/WebTest.java
new file mode 100644
index 0000000..2b9abe8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/client/test/client/WebTest.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+    private static final String TEST_NAME = "em-resource-injection";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for Java EE resource injection");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            invoke("llinit");
+            invoke("llquery");
+            invoke("llfind");
+            invoke("llinj");
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke(String testCase) throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl"
+                + "?testcase=" + testCase;
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME + testCase, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME + testCase, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: "
+                        + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME + testCase, stat.FAIL);
+            }
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/descriptor/beans.xml
new file mode 100644
index 0000000..1d355f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/descriptor/beans.xml
@@ -0,0 +1,25 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/descriptor/persistence.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/descriptor/persistence.xml
new file mode 100644
index 0000000..82f2d7b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/descriptor/persistence.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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
+
+-->
+
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
+  <persistence-unit name="pu1" transaction-type="JTA">
+    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+    <jta-data-source>jdbc/__default</jta-data-source>
+    <non-jta-data-source>jdbc/__default</non-jta-data-source>
+    <class>myapp.Department</class>
+    <class>myapp.Employee</class>
+    <properties>
+       <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
+       <property name="eclipselink.logging.level" value="INFO"/>
+    </properties>
+  </persistence-unit>
+</persistence>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/beans/TestBeanInterface.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/beans/TestBeanInterface.java
new file mode 100644
index 0000000..29e137a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/beans/TestBeanInterface.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public interface TestBeanInterface {
+    public void m1();
+    public void m2();
+    
+    public String testDatasourceInjection();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/beans/artifacts/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/beans/artifacts/Preferred.java
new file mode 100644
index 0000000..b7584c8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/beans/artifacts/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/beans/artifacts/TestDatabase.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/beans/artifacts/TestDatabase.java
new file mode 100644
index 0000000..b69ab8e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/beans/artifacts/TestDatabase.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface TestDatabase {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/beans/nonmock/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/beans/nonmock/TestBean.java
new file mode 100644
index 0000000..2363d68
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/beans/nonmock/TestBean.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.TestDatabase;
+
+
+@RequestScoped
+@Preferred
+public class TestBean implements TestBeanInterface{
+    public static boolean testBeanInvoked = false;
+    
+    @Inject //@TestDatabase 
+    EntityManager emf;
+
+    @Override
+    public void m1() {
+        testBeanInvoked = true;
+        System.out.println("TestBean::m1 called");
+    }
+
+    @Override
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+    @Override
+    public String testDatasourceInjection() {
+        return (emf==null ? "typesafe injection into testbean failed" : "");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/entity/Department.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/entity/Department.java
new file mode 100644
index 0000000..14191ec
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/entity/Department.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.entity;
+
+import java.util.Set;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "DEPARTMENT")
+public class Department implements java.io.Serializable {
+
+    // Instance variables
+    private int id;
+    private String name;
+    private Set<Employee> employees;
+
+    public Department() {
+    }
+
+    public Department(int id, String name) {
+        this.id = id;
+        this.name = name;
+    }
+
+    // ===========================================================
+    // getters and setters for the state fields
+
+    @Id
+    @Column(name = "ID")
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    @Column(name = "NAME")
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    // ===========================================================
+    // getters and setters for the association fields
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "department")
+    public Set<Employee> getEmployees() {
+        return employees;
+    }
+
+    public void setEmployees(Set<Employee> employees) {
+        this.employees = employees;
+    }
+
+    public String toString() {
+        return "Department id=" + getId() + ", Department Name=" + getName();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/entity/Employee.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/entity/Employee.java
new file mode 100644
index 0000000..a1820e8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/entity/Employee.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.entity;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+@Entity
+@Table(name = "EMPLOYEE")
+public class Employee implements java.io.Serializable {
+
+    private int id;
+    private String firstName;
+    private String lastName;
+    private Department department;
+
+    public Employee() {
+    }
+
+    public Employee(int id, String firstName, String lastName) {
+        this.id = id;
+        this.firstName = firstName;
+        this.lastName = lastName;
+    }
+
+    public Employee(int id, String firstName, String lastName,
+            Department department) {
+        this.id = id;
+        this.firstName = firstName;
+        this.lastName = lastName;
+        this.department = department;
+    }
+
+    // ===========================================================
+    // getters and setters for the state fields
+    @Id
+    @Column(name = "ID")
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    @Column(name = "FIRSTNAME")
+    public String getFirstName() {
+        return firstName;
+    }
+
+    public void setFirstName(String firstName) {
+        this.firstName = firstName;
+    }
+
+    @Column(name = "LASTNAME")
+    public String getLastName() {
+        return lastName;
+    }
+
+    public void setLastName(String lastName) {
+        this.lastName = lastName;
+    }
+
+    // ===========================================================
+    // getters and setters for the association fields
+    // @ManyToOne
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "DEPARTMENT_ID")
+    public Department getDepartment() {
+        return department;
+    }
+
+    @Transient
+    public Department getDepartmentNoWeaving() {
+        try {
+            java.lang.reflect.Field f = Employee.class
+                    .getDeclaredField("department");
+            return (Department) f.get(this);
+        } catch (NoSuchFieldException e) {
+            throw new RuntimeException(
+                    "Please change argument to getDeclaredField", e);
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public void setDepartment(Department department) {
+        this.department = department;
+    }
+
+    public String toString() {
+        return "Employee id=" + getId() + ", firstName=" + getFirstName()
+                + ", lastName=" + getLastName() + ", department="
+                + getDepartment();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/servlet/JPAResourceInjectionServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/servlet/JPAResourceInjectionServlet.java
new file mode 100644
index 0000000..de25da1
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/servlet/JPAResourceInjectionServlet.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.annotation.Resource;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceUnit;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.transaction.UserTransaction;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+import test.util.JpaTest;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class JPAResourceInjectionServlet extends HttpServlet {
+
+    @PersistenceUnit(unitName = "pu1")
+    private EntityManagerFactory emf_at_pu;
+
+    @Inject
+    //@TestDatabase
+    private EntityManager emf_at_inj;
+
+    private @Resource
+    UserTransaction utx;
+    
+    @Inject
+    @Preferred
+    TestBeanInterface tbi;
+
+    protected void doGet(HttpServletRequest request,
+            HttpServletResponse response) throws ServletException,
+            IOException {
+        PrintWriter writer = response.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+        System.out.println("JPAResourceInjectionServlet::@PersistenceUnit " +
+        		"CDI EntityManagerFactory=" + emf_at_inj);
+
+        EntityManager em = emf_at_inj;
+        System.out.println("JPAResourceInjectionServlet::createEM" +
+        		"EntityManager=" + em);
+        String testcase = request.getParameter("testcase");
+        System.out.println("testcase=" + testcase);
+
+        if (testcase != null) {
+            JpaTest jt = new JpaTest(em, utx);
+            boolean status = false;
+            if ("llinit".equals(testcase)) {
+                status = jt.lazyLoadingInit();
+            } else if ("llfind".equals(testcase)) {
+                status = jt.lazyLoadingByFind(1);
+            } else if ("llquery".equals(testcase)) {
+                status = jt.lazyLoadingByQuery("Carla");
+            } else if ("llinj".equals(testcase)){
+                status = ((tbi != null) && 
+                        (tbi.testDatasourceInjection().trim().length()==0));
+            }
+            if (status) {
+                msg += "";// pass
+            } else {
+                msg += (testcase + ":fail");
+            }
+        }
+
+        writer.write(msg + "\n");
+
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/util/JPAResourceProducer.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/util/JPAResourceProducer.java
new file mode 100644
index 0000000..dc70909
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/util/JPAResourceProducer.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.util;
+
+import javax.enterprise.inject.Produces;
+import javax.inject.Singleton;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import test.beans.artifacts.TestDatabase;
+
+@Singleton
+public class JPAResourceProducer {
+    @Produces @PersistenceContext(unitName="pu1")
+    //@TestDatabase 
+    EntityManager customerDatabasePersistenceUnit;
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/util/JpaTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/util/JpaTest.java
new file mode 100644
index 0000000..3d47448
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/em-resource-injection/servlet/test/util/JpaTest.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.util;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Query;
+import javax.transaction.UserTransaction;
+
+import test.entity.Department;
+import test.entity.Employee;
+
+public class JpaTest {
+
+    private EntityManager em;
+    private UserTransaction utx;
+
+    private static Department deptRef[] = new Department[2];
+    private static Employee empRef[] = new Employee[5];
+
+    public JpaTest() {
+    }
+
+    public JpaTest(EntityManager em, UserTransaction utx) {
+        this.em = em;
+        this.utx = utx;
+    }
+
+    public boolean lazyLoadingInit() {
+        boolean status = false;
+        System.out.println("-----lazeLoadingInit()---------");
+        try {
+            deptRef[0] = new Department(1, "Engineering");
+            deptRef[1] = new Department(2, "Marketing");
+            utx.begin();
+            em.joinTransaction();
+            for (int i = 0; i < 2; i++) {
+                em.persist(deptRef[i]);
+            }
+            utx.commit();
+
+            empRef[0] = new Employee(1, "Alan", "Frechette", deptRef[0]);
+            empRef[1] = new Employee(2, "Arthur", "Wesley", deptRef[0]);
+            empRef[2] = new Employee(3, "Abe", "White", deptRef[0]);
+            empRef[3] = new Employee(4, "Paul", "Hinz", deptRef[1]);
+            empRef[4] = new Employee(5, "Carla", "Calrson", deptRef[1]);
+            utx.begin();
+            em.joinTransaction();
+            for (int i = 0; i < 5; i++) {
+                em.persist(empRef[i]);
+            }
+            utx.commit();
+            status = true;
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+    public boolean lazyLoadingByFind(int employeeID) {
+
+        boolean status = true;
+        System.out.println("------------lazyLoadingAfterFind -----------");
+        System.out.println("employeeID = " + employeeID);
+        Employee emp = em.find(Employee.class, employeeID);
+
+        System.out.println("found: emp.id=" + emp.getId());
+
+        try {
+            // 1. get Department before loading
+            Department deptBL = emp.getDepartmentNoWeaving();
+            System.out.println("1. before loading: deptBL=" + deptBL);
+            String deptNameBL = null;
+            if (deptBL != null) {
+                deptNameBL = deptBL.getName();
+                System.out.println("deptNameBL=" + deptNameBL);
+            }
+            // assert deptBL == null;
+            if (deptBL != null) {
+                status = false;
+            }
+
+            // 2. loading
+            String deptName = emp.getDepartment().getName();
+            System.out.println("2. loading, deptName = " + deptName);
+
+            // 3. get Department after loading
+            Department deptAL = emp.getDepartmentNoWeaving();
+            System.out.println("3. after loading: deptAL=" + deptAL);
+            String deptNameAL = deptAL.getName();
+            System.out.println("deptNameAL=" + deptNameAL);
+            // assert deptAL != null
+            // assert deptAL.getName == deptName;
+            if (deptAL == null || deptNameAL != deptName) {
+                status = false;
+            }
+        } catch (Exception ex) {
+            status = false;
+            ex.printStackTrace();
+        }
+
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+    public boolean lazyLoadingByQuery(String fName) {
+
+        boolean status = true;
+        System.out.println("------------lazyLoadingByQuery -----------");
+        System.out.println("fName = " + fName);
+        Query query = em.createQuery(
+                "SELECT e FROM Employee e WHERE e.firstName like :firstName")
+                .setParameter("firstName", fName);
+        ;
+        Employee emp = (Employee) query.getSingleResult();
+
+        System.out.println("queried: emp.firstName=" + emp.getFirstName());
+
+        try {
+            // 1. get Department before loading
+            Department deptBL = emp.getDepartmentNoWeaving();
+            System.out.println("1. before loading: deptBL=" + deptBL);
+            String deptNameBL = null;
+            if (deptBL != null) {
+                deptNameBL = deptBL.getName();
+                System.out.println("deptNameBL=" + deptNameBL);
+            }
+            // assert deptBL == null;
+            if (deptBL != null) {
+                status = false;
+            }
+
+            // 2. loading
+            String deptName = emp.getDepartment().getName();
+            System.out.println("2. loading, deptName = " + deptName);
+
+            // 3. get Department after loading
+            Department deptAL = emp.getDepartmentNoWeaving();
+            System.out.println("3. after loading: deptAL=" + deptAL);
+            String deptNameAL = deptAL.getName();
+            System.out.println("deptNameAL=" + deptNameAL);
+            // assert deptAL != null
+            // assert deptAL.getName == deptName;
+            if (deptAL == null || deptNameAL != deptName) {
+                status = false;
+            }
+        } catch (Exception ex) {
+            status = false;
+            ex.printStackTrace();
+        }
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/README
new file mode 100644
index 0000000..b3115ec
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/README
@@ -0,0 +1,5 @@
+Test
+- Use of Java EE component environment resources 
+    - type safe injection of Java EE component resources by declaring a 
+    resource by annotating a producer field wuth a component environment injection
+    annotation
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/build.properties
new file mode 100644
index 0000000..3543e4c
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-typesafe-javaee-resource-injection"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/build.xml
new file mode 100644
index 0000000..295d086
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/build.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,create-resources,deploy,run,undeploy,delete-resources" />
+
+	<target name="clean" depends="init-common">
+		<antcall target="clean-common" />
+		<delete>
+			<fileset dir="." includes="*.class" />
+			<fileset dir="client/test/client" includes="*.class" />
+		</delete>
+	</target>
+
+	<target name="compile" depends="clean">
+		<antcall target="compile-common">
+			<param name="src" value="servlet" />
+		</antcall>
+	</target>
+
+	<target name="build" depends="compile">
+		<property name="hasWebclient" value="yes" />
+		<antcall target="webclient-war-common">
+			<param name="hasWebclient" value="yes" />
+			<param name="webclient.war.classes" value="**/*.class" />
+		</antcall>
+
+		<javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar" includes="test/client/WebTest.java" />
+
+	</target>
+
+	<target name="build-publish-war" depends="build, publish-war-common" />
+
+	<target name="deploy" depends="init-common">
+		<antcall target="deploy-war-common" />
+	</target>
+
+	<target name="create-resources" depends="init-common">
+		<antcall target="create-jdbc-connpool-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+		</antcall>
+		<antcall target="create-jdbc-resource-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+			<param name="jdbc.resource.name" value="jdbc/jdbc-dev-test-resource" />
+		</antcall>
+	</target>
+
+
+	<target name="run" depends="init-common">
+		<java classname="test.client.WebTest">
+			<arg value="${http.host}" />
+			<arg value="${http.port}" />
+			<arg value="${contextroot}" />
+			<classpath>
+				<pathelement location="${env.APS_HOME}/lib/reportbuilder.jar" />
+				<pathelement location="client" />
+			</classpath>
+		</java>
+	</target>
+
+	<target name="undeploy" depends="init-common">
+		<antcall target="undeploy-war-common" />
+	</target>
+
+	<target name="delete-resources" depends="init-common">
+		<antcall target="delete-jdbc-resource-common">
+			<param name="jdbc.resource.name" value="jdbc/jdbc-dev-test-resource" />
+		</antcall>
+
+		<antcall target="delete-jdbc-connpool-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+		</antcall>
+	</target>
+
+	<target name="usage">
+		<antcall target="usage-common" />
+	</target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/client/test/client/WebTest.java
new file mode 100644
index 0000000..fb8c7f3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/client/test/client/WebTest.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+    private static final String TEST_NAME = "typesafe-javaee-resource-injection";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for stereotypes");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: "
+                        + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/descriptor/beans.xml
new file mode 100644
index 0000000..1d355f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/descriptor/beans.xml
@@ -0,0 +1,25 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/servlet/test/beans/TestBeanInterface.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/servlet/test/beans/TestBeanInterface.java
new file mode 100644
index 0000000..29e137a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/servlet/test/beans/TestBeanInterface.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public interface TestBeanInterface {
+    public void m1();
+    public void m2();
+    
+    public String testDatasourceInjection();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/servlet/test/beans/artifacts/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/servlet/test/beans/artifacts/Preferred.java
new file mode 100644
index 0000000..b7584c8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/servlet/test/beans/artifacts/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/servlet/test/beans/artifacts/TestDatabase.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/servlet/test/beans/artifacts/TestDatabase.java
new file mode 100644
index 0000000..b69ab8e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/servlet/test/beans/artifacts/TestDatabase.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface TestDatabase {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/servlet/test/beans/nonmock/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/servlet/test/beans/nonmock/TestBean.java
new file mode 100644
index 0000000..1947fac
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/servlet/test/beans/nonmock/TestBean.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+import javax.sql.DataSource;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.TestDatabase;
+
+
+@RequestScoped
+@Preferred
+public class TestBean implements TestBeanInterface{
+    public static boolean testBeanInvoked = false;
+    
+    @Inject @TestDatabase 
+    DataSource ds;
+
+    @Override
+    public void m1() {
+        testBeanInvoked = true;
+        System.out.println("TestBean::m1 called");
+    }
+
+    @Override
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+    @Override
+    public String testDatasourceInjection() {
+        return (ds==null ? "typesafe injection into testbean failed" : "");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/servlet/test/servlet/DatabaseManager.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/servlet/test/servlet/DatabaseManager.java
new file mode 100644
index 0000000..0b4d0b3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/servlet/test/servlet/DatabaseManager.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import javax.annotation.Resource;
+import javax.enterprise.inject.Produces;
+import javax.sql.DataSource;
+
+import test.beans.artifacts.TestDatabase;
+
+public class DatabaseManager {
+    @Produces 
+    @TestDatabase
+    @Resource(name = "jdbc/jdbc-dev-test-resource", 
+            mappedName = "jdbc/jdbc-dev-test-resource")
+    DataSource ds;
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/servlet/test/servlet/TypesafeJavaEEResourceInjectionTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/servlet/test/servlet/TypesafeJavaEEResourceInjectionTestServlet.java
new file mode 100644
index 0000000..f1d5970
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/javaee-component-resource-typesafe-injection/servlet/test/servlet/TypesafeJavaEEResourceInjectionTestServlet.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.sql.DataSource;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.TestDatabase;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class TypesafeJavaEEResourceInjectionTestServlet extends HttpServlet {
+    @Inject
+    @Preferred
+    TestBeanInterface tb;
+    
+    @Inject @TestDatabase
+    DataSource ds;
+        
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+        
+        if (ds == null)
+            msg += "typesafe Injection of datasource into a servlet failed";
+
+        if (tb == null)
+            msg += "Injection of request scoped bean failed";
+        
+        if (tb.testDatasourceInjection().trim().length() != 0)
+            msg += tb.testDatasourceInjection();
+
+        
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/README
new file mode 100644
index 0000000..e613bc1
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/README
@@ -0,0 +1,5 @@
+Test
+- Use of Java EE component environment resources 
+    - type safe injection of Java EE component resources by declaring a 
+    resource by annotating a producer field wuth a component environment injection
+    annotation in a library jar
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/build.properties
new file mode 100644
index 0000000..4806149
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-jms-resource-injection-in-library-bean-archive"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/build.xml
new file mode 100644
index 0000000..8df2c24
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/build.xml
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,create-resources,deploy,run,undeploy,delete-resources" />
+
+	<target name="clean" depends="init-common">
+		<antcall target="clean-common" />
+		<delete>
+			<fileset dir="." includes="*.class" />
+			<fileset dir="client/test/client" includes="*.class" />
+		</delete>
+	</target>
+
+	<target name="compile" depends="clean">
+        <!-- compile and create library jar -->
+        <mkdir dir="tmp"/>
+        <mkdir dir="tmp/META-INF"/>
+        <javac srcdir="producer-library-jar" destdir="tmp" classpath="${s1astest.classpath}" debug="on" failonerror="true"/>
+        <copy file="descriptor/beans.xml" todir="tmp/META-INF"/>
+
+        <mkdir dir="lib"/>
+        <jar jarfile="lib/producer-library.jar" update="true">
+            <fileset dir="tmp" casesensitive="yes">
+              <include name="**/*class*"/>
+              <include name="META-INF/beans.xml"/> <!-- include a beans.xml in the library jar for it to be considered as a bean archive -->
+            </fileset>
+        </jar>
+        <echo message="created library jar at lib/producer-library.jar"/>
+
+		<antcall target="compile-common">
+			<param name="src" value="servlet" />
+		</antcall>
+	</target>
+
+	<target name="build" depends="compile">
+		<property name="hasWebclient" value="yes" />
+		<antcall target="webclient-war-common">
+			<param name="hasWebclient" value="yes" />
+			<param name="webclient.war.classes" value="**/*.class" />
+		</antcall>
+
+		<javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar" includes="test/client/WebTest.java" />
+
+	</target>
+
+	<target name="build-publish-war" depends="build, publish-war-common" />
+
+	<target name="deploy" depends="init-common">
+		<antcall target="deploy-war-common" />
+	</target>
+
+    <target name="create-resources" depends="init-common">
+        <antcall target="asadmin-batch-common">
+          <param name="asadmin.file" value="create_resources.asadmin"/>
+        </antcall>
+    </target>
+    
+    <target name="delete-resources" depends="init-common">
+        <antcall target="asadmin-batch-common">
+          <param name="asadmin.file" value="delete_resources.asadmin"/>
+        </antcall>
+    </target>
+
+
+	<target name="run" depends="init-common">
+		<java classname="test.client.WebTest">
+			<arg value="${http.host}" />
+			<arg value="${http.port}" />
+			<arg value="${contextroot}" />
+			<classpath>
+				<pathelement location="${env.APS_HOME}/lib/reportbuilder.jar" />
+				<pathelement location="client" />
+			</classpath>
+		</java>
+	</target>
+
+	<target name="undeploy" depends="init-common">
+		<antcall target="undeploy-war-common" />
+        <delete file="lib/producer-library.jar"/>
+	</target>
+
+	<target name="usage">
+		<antcall target="usage-common" />
+	</target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/client/test/client/WebTest.java
new file mode 100644
index 0000000..70744e7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/client/test/client/WebTest.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+    private static final String TEST_NAME = "jms-resource-lookup-producer-field-in-library-bean-archive";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for stereotypes");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: "
+                        + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/create_resources.asadmin b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/create_resources.asadmin
new file mode 100644
index 0000000..940c1b9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/create_resources.asadmin
@@ -0,0 +1,3 @@
+create-jms-resource --restype javax.jms.ConnectionFactory jms/ConnectionFactory
+create-jmsdest --desttype queue Q1 
+create-jms-resource --restype javax.jms.Queue --property imqDestinationName=Q1 jms/Queue
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/delete_resources.asadmin b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/delete_resources.asadmin
new file mode 100644
index 0000000..29acf02
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/delete_resources.asadmin
@@ -0,0 +1,3 @@
+delete-jms-resource jms/ConnectionFactory
+delete-jms-resource jms/Queue
+delete-jmsdest --desttype queue Q1
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/descriptor/beans.xml
new file mode 100644
index 0000000..1d355f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/descriptor/beans.xml
@@ -0,0 +1,25 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/producer-library-jar/test/servlet/JMSResourcesProducer.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/producer-library-jar/test/servlet/JMSResourcesProducer.java
new file mode 100644
index 0000000..31f4a60
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/producer-library-jar/test/servlet/JMSResourcesProducer.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import javax.annotation.Resource;
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+import javax.jms.ConnectionFactory;
+import javax.jms.JMSException;
+import javax.jms.Queue;
+import javax.jms.Session;
+
+
+@ApplicationScoped
+public class JMSResourcesProducer {
+
+    @Resource(mappedName = "jms/ConnectionFactory")
+    private ConnectionFactory connectionFactory;
+
+    @SuppressWarnings("unused")
+    @Produces
+    @Resource(mappedName = "jms/Queue")
+    private Queue queue;
+
+    @Produces
+    public Session produceSession() throws JMSException {
+        /*try {
+            connectionFactory = (ConnectionFactory) new javax.naming.InitialContext().lookup("jms/ConnectionFactory");
+        } catch (javax.naming.NamingException exc) {
+            throw new RuntimeException("couldn't lookup JMS Session", exc);
+        }*/
+        // as per EJB 3.1 specs $13.3.5
+        return connectionFactory.createConnection().createSession(true, 0);
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/servlet/test/beans/TestBeanInterface.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/servlet/test/beans/TestBeanInterface.java
new file mode 100644
index 0000000..29e137a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/servlet/test/beans/TestBeanInterface.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public interface TestBeanInterface {
+    public void m1();
+    public void m2();
+    
+    public String testDatasourceInjection();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/servlet/test/beans/artifacts/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/servlet/test/beans/artifacts/Preferred.java
new file mode 100644
index 0000000..b7584c8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/servlet/test/beans/artifacts/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/servlet/test/beans/nonmock/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/servlet/test/beans/nonmock/TestBean.java
new file mode 100644
index 0000000..db83a56
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/servlet/test/beans/nonmock/TestBean.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+import javax.jms.Queue;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+
+
+@RequestScoped
+@Preferred
+public class TestBean implements TestBeanInterface{
+    public static boolean testBeanInvoked = false;
+    
+    @Inject 
+    Queue ds;
+
+    @Override
+    public void m1() {
+        testBeanInvoked = true;
+        System.out.println("TestBean::m1 called");
+    }
+
+    @Override
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+    @Override
+    public String testDatasourceInjection() {
+        return (ds==null ? "typesafe injection into testbean failed" : "");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/servlet/test/servlet/JMSResourceInjectionInLibraryBeanArchiveTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/servlet/test/servlet/JMSResourceInjectionInLibraryBeanArchiveTestServlet.java
new file mode 100644
index 0000000..5075703
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/servlet/test/servlet/JMSResourceInjectionInLibraryBeanArchiveTestServlet.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.jms.Queue;
+import javax.jms.Session;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class JMSResourceInjectionInLibraryBeanArchiveTestServlet extends HttpServlet {
+    @Inject
+    @Preferred
+    TestBeanInterface tb;
+    
+    @Inject
+    private Queue queue;
+
+    @Inject
+    private Session session;
+    
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+        
+        if (queue == null)
+            msg += "typesafe Injection of queue into a servlet failed";
+
+        if (session == null)
+            msg += "typesafe Injection of Session into a servlet failed";
+        
+        if (tb == null)
+            msg += "Injection of request scoped bean failed";
+        
+        if (tb.testDatasourceInjection().trim().length() != 0)
+            msg += tb.testDatasourceInjection();
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/tmp/META-INF/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/tmp/META-INF/beans.xml
new file mode 100644
index 0000000..1d355f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field-in-library-jar/tmp/META-INF/beans.xml
@@ -0,0 +1,25 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/README
new file mode 100644
index 0000000..e613bc1
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/README
@@ -0,0 +1,5 @@
+Test
+- Use of Java EE component environment resources 
+    - type safe injection of Java EE component resources by declaring a 
+    resource by annotating a producer field wuth a component environment injection
+    annotation in a library jar
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/build.properties
new file mode 100644
index 0000000..65a6203
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-jms-resource-injection"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/build.xml
new file mode 100644
index 0000000..1380e6b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/build.xml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,create-resources,deploy,run,undeploy,delete-resources" />
+
+	<target name="clean" depends="init-common">
+		<antcall target="clean-common" />
+		<delete>
+			<fileset dir="." includes="*.class" />
+			<fileset dir="client/test/client" includes="*.class" />
+		</delete>
+	</target>
+
+	<target name="compile" depends="clean">
+		<antcall target="compile-common">
+			<param name="src" value="servlet" />
+		</antcall>
+	</target>
+
+	<target name="build" depends="compile">
+		<property name="hasWebclient" value="yes" />
+		<antcall target="webclient-war-common">
+			<param name="hasWebclient" value="yes" />
+			<param name="webclient.war.classes" value="**/*.class" />
+		</antcall>
+
+		<javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar" includes="test/client/WebTest.java" />
+
+	</target>
+
+	<target name="build-publish-war" depends="build, publish-war-common" />
+
+	<target name="deploy" depends="init-common">
+		<antcall target="deploy-war-common" />
+	</target>
+
+    <target name="create-resources" depends="init-common">
+        <antcall target="asadmin-batch-common">
+          <param name="asadmin.file" value="create_resources.asadmin"/>
+        </antcall>
+    </target>
+    
+    <target name="delete-resources" depends="init-common">
+        <antcall target="asadmin-batch-common">
+          <param name="asadmin.file" value="delete_resources.asadmin"/>
+        </antcall>
+    </target>
+
+
+	<target name="run" depends="init-common">
+		<java classname="test.client.WebTest">
+			<arg value="${http.host}" />
+			<arg value="${http.port}" />
+			<arg value="${contextroot}" />
+			<classpath>
+				<pathelement location="${env.APS_HOME}/lib/reportbuilder.jar" />
+				<pathelement location="client" />
+			</classpath>
+		</java>
+	</target>
+
+	<target name="undeploy" depends="init-common">
+		<antcall target="undeploy-war-common" />
+	</target>
+
+	<target name="usage">
+		<antcall target="usage-common" />
+	</target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/client/test/client/WebTest.java
new file mode 100644
index 0000000..c3720d7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/client/test/client/WebTest.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+    private static final String TEST_NAME = "jms-resource-injection";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for stereotypes");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: "
+                        + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/create_resources.asadmin b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/create_resources.asadmin
new file mode 100644
index 0000000..940c1b9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/create_resources.asadmin
@@ -0,0 +1,3 @@
+create-jms-resource --restype javax.jms.ConnectionFactory jms/ConnectionFactory
+create-jmsdest --desttype queue Q1 
+create-jms-resource --restype javax.jms.Queue --property imqDestinationName=Q1 jms/Queue
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/delete_resources.asadmin b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/delete_resources.asadmin
new file mode 100644
index 0000000..29acf02
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/delete_resources.asadmin
@@ -0,0 +1,3 @@
+delete-jms-resource jms/ConnectionFactory
+delete-jms-resource jms/Queue
+delete-jmsdest --desttype queue Q1
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/descriptor/beans.xml
new file mode 100644
index 0000000..1d355f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/descriptor/beans.xml
@@ -0,0 +1,25 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/servlet/test/beans/TestBeanInterface.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/servlet/test/beans/TestBeanInterface.java
new file mode 100644
index 0000000..29e137a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/servlet/test/beans/TestBeanInterface.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public interface TestBeanInterface {
+    public void m1();
+    public void m2();
+    
+    public String testDatasourceInjection();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/servlet/test/beans/artifacts/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/servlet/test/beans/artifacts/Preferred.java
new file mode 100644
index 0000000..b7584c8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/servlet/test/beans/artifacts/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/servlet/test/beans/nonmock/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/servlet/test/beans/nonmock/TestBean.java
new file mode 100644
index 0000000..db83a56
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/servlet/test/beans/nonmock/TestBean.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+import javax.jms.Queue;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+
+
+@RequestScoped
+@Preferred
+public class TestBean implements TestBeanInterface{
+    public static boolean testBeanInvoked = false;
+    
+    @Inject 
+    Queue ds;
+
+    @Override
+    public void m1() {
+        testBeanInvoked = true;
+        System.out.println("TestBean::m1 called");
+    }
+
+    @Override
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+    @Override
+    public String testDatasourceInjection() {
+        return (ds==null ? "typesafe injection into testbean failed" : "");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/servlet/test/servlet/JMSResourceInjectionInLibraryBeanArchiveTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/servlet/test/servlet/JMSResourceInjectionInLibraryBeanArchiveTestServlet.java
new file mode 100644
index 0000000..5075703
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/servlet/test/servlet/JMSResourceInjectionInLibraryBeanArchiveTestServlet.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.jms.Queue;
+import javax.jms.Session;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class JMSResourceInjectionInLibraryBeanArchiveTestServlet extends HttpServlet {
+    @Inject
+    @Preferred
+    TestBeanInterface tb;
+    
+    @Inject
+    private Queue queue;
+
+    @Inject
+    private Session session;
+    
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+        
+        if (queue == null)
+            msg += "typesafe Injection of queue into a servlet failed";
+
+        if (session == null)
+            msg += "typesafe Injection of Session into a servlet failed";
+        
+        if (tb == null)
+            msg += "Injection of request scoped bean failed";
+        
+        if (tb.testDatasourceInjection().trim().length() != 0)
+            msg += tb.testDatasourceInjection();
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/servlet/test/servlet/JMSResourcesProducer.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/servlet/test/servlet/JMSResourcesProducer.java
new file mode 100644
index 0000000..31f4a60
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jms-resource-producer-field/servlet/test/servlet/JMSResourcesProducer.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import javax.annotation.Resource;
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+import javax.jms.ConnectionFactory;
+import javax.jms.JMSException;
+import javax.jms.Queue;
+import javax.jms.Session;
+
+
+@ApplicationScoped
+public class JMSResourcesProducer {
+
+    @Resource(mappedName = "jms/ConnectionFactory")
+    private ConnectionFactory connectionFactory;
+
+    @SuppressWarnings("unused")
+    @Produces
+    @Resource(mappedName = "jms/Queue")
+    private Queue queue;
+
+    @Produces
+    public Session produceSession() throws JMSException {
+        /*try {
+            connectionFactory = (ConnectionFactory) new javax.naming.InitialContext().lookup("jms/ConnectionFactory");
+        } catch (javax.naming.NamingException exc) {
+            throw new RuntimeException("couldn't lookup JMS Session", exc);
+        }*/
+        // as per EJB 3.1 specs $13.3.5
+        return connectionFactory.createConnection().createSession(true, 0);
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/README
new file mode 100644
index 0000000..c5e296b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/README
@@ -0,0 +1,6 @@
+Test
+- Use of Java EE component environment resources 
+    - type safe injection of JPA resources (EntityManagerFactory, EntityManager) 
+    by declaring a resource by annotating a producer field wuth a 
+    component environment injection annotation
+    - test if injection of non-serializable resource like EntityManager is supported. This should not result in a deployment failure
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/build.properties
new file mode 100644
index 0000000..fa73b33
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/build.properties
@@ -0,0 +1,25 @@
+<!--
+
+    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}-jpa-resource-injection-non-serializable"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
+<property name="persistence.xml" value="descriptor/persistence.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/build.xml
new file mode 100644
index 0000000..295d086
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/build.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,create-resources,deploy,run,undeploy,delete-resources" />
+
+	<target name="clean" depends="init-common">
+		<antcall target="clean-common" />
+		<delete>
+			<fileset dir="." includes="*.class" />
+			<fileset dir="client/test/client" includes="*.class" />
+		</delete>
+	</target>
+
+	<target name="compile" depends="clean">
+		<antcall target="compile-common">
+			<param name="src" value="servlet" />
+		</antcall>
+	</target>
+
+	<target name="build" depends="compile">
+		<property name="hasWebclient" value="yes" />
+		<antcall target="webclient-war-common">
+			<param name="hasWebclient" value="yes" />
+			<param name="webclient.war.classes" value="**/*.class" />
+		</antcall>
+
+		<javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar" includes="test/client/WebTest.java" />
+
+	</target>
+
+	<target name="build-publish-war" depends="build, publish-war-common" />
+
+	<target name="deploy" depends="init-common">
+		<antcall target="deploy-war-common" />
+	</target>
+
+	<target name="create-resources" depends="init-common">
+		<antcall target="create-jdbc-connpool-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+		</antcall>
+		<antcall target="create-jdbc-resource-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+			<param name="jdbc.resource.name" value="jdbc/jdbc-dev-test-resource" />
+		</antcall>
+	</target>
+
+
+	<target name="run" depends="init-common">
+		<java classname="test.client.WebTest">
+			<arg value="${http.host}" />
+			<arg value="${http.port}" />
+			<arg value="${contextroot}" />
+			<classpath>
+				<pathelement location="${env.APS_HOME}/lib/reportbuilder.jar" />
+				<pathelement location="client" />
+			</classpath>
+		</java>
+	</target>
+
+	<target name="undeploy" depends="init-common">
+		<antcall target="undeploy-war-common" />
+	</target>
+
+	<target name="delete-resources" depends="init-common">
+		<antcall target="delete-jdbc-resource-common">
+			<param name="jdbc.resource.name" value="jdbc/jdbc-dev-test-resource" />
+		</antcall>
+
+		<antcall target="delete-jdbc-connpool-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+		</antcall>
+	</target>
+
+	<target name="usage">
+		<antcall target="usage-common" />
+	</target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/client/test/client/WebTest.java
new file mode 100644
index 0000000..19e1eb6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/client/test/client/WebTest.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+    private static final String TEST_NAME = "jpa-resource-injection-non-serializable";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for Java EE resource injection");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            invoke("llinit");
+            invoke("llquery");
+            invoke("llfind");
+            invoke("llinj");
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed. Unexpected error obtained:" + ex);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            //ex.printStackTrace();
+        }
+    }
+
+    private void invoke(String testCase) throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl"
+                + "?testcase=" + testCase;
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME + testCase, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME + testCase, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: "
+                        + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME + testCase, stat.FAIL);
+            }
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/descriptor/beans.xml
new file mode 100644
index 0000000..1d355f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/descriptor/beans.xml
@@ -0,0 +1,25 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/descriptor/persistence.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/descriptor/persistence.xml
new file mode 100644
index 0000000..713e047
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/descriptor/persistence.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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
+
+-->
+
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
+  <persistence-unit name="pu2" transaction-type="JTA">
+    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+    <jta-data-source>jdbc/__default</jta-data-source>
+    <non-jta-data-source>jdbc/__default</non-jta-data-source>
+    <class>myapp.Department</class>
+    <class>myapp.Employee</class>
+    <properties>
+       <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
+       <property name="eclipselink.logging.level" value="INFO"/>
+    </properties>
+  </persistence-unit>
+</persistence>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/beans/TestBeanInterface.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/beans/TestBeanInterface.java
new file mode 100644
index 0000000..29e137a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/beans/TestBeanInterface.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public interface TestBeanInterface {
+    public void m1();
+    public void m2();
+    
+    public String testDatasourceInjection();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/beans/artifacts/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/beans/artifacts/Preferred.java
new file mode 100644
index 0000000..b7584c8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/beans/artifacts/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/beans/artifacts/TestDatabase.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/beans/artifacts/TestDatabase.java
new file mode 100644
index 0000000..b69ab8e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/beans/artifacts/TestDatabase.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface TestDatabase {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/beans/nonmock/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/beans/nonmock/TestBean.java
new file mode 100644
index 0000000..e2d6110
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/beans/nonmock/TestBean.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+import java.io.Serializable;
+
+import javax.enterprise.context.SessionScoped;
+import javax.inject.Inject;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.EntityManager;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.TestDatabase;
+
+
+@SessionScoped //a passivating scope
+@Preferred
+public class TestBean implements TestBeanInterface, Serializable{
+    public static boolean testBeanInvoked = false;
+    
+    @Inject @TestDatabase 
+    EntityManagerFactory emf;
+
+	//Inject a non-serializable resource
+    @Inject @TestDatabase
+    EntityManager em;
+
+    @Override
+    public void m1() {
+        testBeanInvoked = true;
+        System.out.println("TestBean::m1 called");
+    }
+
+    @Override
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+    @Override
+    public String testDatasourceInjection() {
+        String s = (emf==null ? "typesafe injection into testbean of EntityManagerFactory failed" : "");
+        s += (em == null ? "typesafe injection of EntityManager into testbean failed":"");
+        return s;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/entity/Department.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/entity/Department.java
new file mode 100644
index 0000000..14191ec
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/entity/Department.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.entity;
+
+import java.util.Set;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "DEPARTMENT")
+public class Department implements java.io.Serializable {
+
+    // Instance variables
+    private int id;
+    private String name;
+    private Set<Employee> employees;
+
+    public Department() {
+    }
+
+    public Department(int id, String name) {
+        this.id = id;
+        this.name = name;
+    }
+
+    // ===========================================================
+    // getters and setters for the state fields
+
+    @Id
+    @Column(name = "ID")
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    @Column(name = "NAME")
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    // ===========================================================
+    // getters and setters for the association fields
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "department")
+    public Set<Employee> getEmployees() {
+        return employees;
+    }
+
+    public void setEmployees(Set<Employee> employees) {
+        this.employees = employees;
+    }
+
+    public String toString() {
+        return "Department id=" + getId() + ", Department Name=" + getName();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/entity/Employee.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/entity/Employee.java
new file mode 100644
index 0000000..a1820e8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/entity/Employee.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.entity;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+@Entity
+@Table(name = "EMPLOYEE")
+public class Employee implements java.io.Serializable {
+
+    private int id;
+    private String firstName;
+    private String lastName;
+    private Department department;
+
+    public Employee() {
+    }
+
+    public Employee(int id, String firstName, String lastName) {
+        this.id = id;
+        this.firstName = firstName;
+        this.lastName = lastName;
+    }
+
+    public Employee(int id, String firstName, String lastName,
+            Department department) {
+        this.id = id;
+        this.firstName = firstName;
+        this.lastName = lastName;
+        this.department = department;
+    }
+
+    // ===========================================================
+    // getters and setters for the state fields
+    @Id
+    @Column(name = "ID")
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    @Column(name = "FIRSTNAME")
+    public String getFirstName() {
+        return firstName;
+    }
+
+    public void setFirstName(String firstName) {
+        this.firstName = firstName;
+    }
+
+    @Column(name = "LASTNAME")
+    public String getLastName() {
+        return lastName;
+    }
+
+    public void setLastName(String lastName) {
+        this.lastName = lastName;
+    }
+
+    // ===========================================================
+    // getters and setters for the association fields
+    // @ManyToOne
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "DEPARTMENT_ID")
+    public Department getDepartment() {
+        return department;
+    }
+
+    @Transient
+    public Department getDepartmentNoWeaving() {
+        try {
+            java.lang.reflect.Field f = Employee.class
+                    .getDeclaredField("department");
+            return (Department) f.get(this);
+        } catch (NoSuchFieldException e) {
+            throw new RuntimeException(
+                    "Please change argument to getDeclaredField", e);
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public void setDepartment(Department department) {
+        this.department = department;
+    }
+
+    public String toString() {
+        return "Employee id=" + getId() + ", firstName=" + getFirstName()
+                + ", lastName=" + getLastName() + ", department="
+                + getDepartment();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/servlet/JPAResourceInjectionServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/servlet/JPAResourceInjectionServlet.java
new file mode 100644
index 0000000..086729b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/servlet/JPAResourceInjectionServlet.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.annotation.Resource;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceUnit;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.transaction.UserTransaction;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.TestDatabase;
+import test.util.JpaTest;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class JPAResourceInjectionServlet extends HttpServlet {
+
+    @PersistenceUnit(unitName = "pu2")
+    private EntityManagerFactory emf;
+
+    @Inject
+    @TestDatabase
+    private EntityManagerFactory emf1;
+
+    private @Resource
+    UserTransaction utx;
+    
+    @Inject
+    @Preferred
+    TestBeanInterface tbi;
+
+    protected void doGet(HttpServletRequest request,
+            HttpServletResponse response) throws ServletException,
+            IOException {
+        PrintWriter writer = response.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+        System.out.println("JPAResourceInjectionServlet::@PersistenceUnit " +
+        		"CDI EntityManagerFactory=" + emf1);
+
+        EntityManager em = emf1.createEntityManager();
+        System.out.println("JPAResourceInjectionServlet::createEM" +
+        		"EntityManager=" + em);
+        String testcase = request.getParameter("testcase");
+        System.out.println("testcase=" + testcase);
+
+        if (testcase != null) {
+            JpaTest jt = new JpaTest(em, utx);
+            boolean status = false;
+            if ("llinit".equals(testcase)) {
+                status = jt.lazyLoadingInit();
+            } else if ("llfind".equals(testcase)) {
+                status = jt.lazyLoadingByFind(1);
+            } else if ("llquery".equals(testcase)) {
+                status = jt.lazyLoadingByQuery("Carla");
+            } else if ("llinj".equals(testcase)){
+                status = ((tbi != null) && 
+                        (tbi.testDatasourceInjection().trim().length()==0));
+            }
+            if (status) {
+                msg += "";// pass
+            } else {
+                msg += (testcase + ":fail");
+            }
+        }
+
+        writer.write(msg + "\n");
+
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/util/JPAResourceProducer.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/util/JPAResourceProducer.java
new file mode 100644
index 0000000..3623e19
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/util/JPAResourceProducer.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.util;
+
+import javax.enterprise.inject.Produces;
+import javax.inject.Singleton;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceContext;
+import javax.persistence.PersistenceUnit;
+
+import test.beans.artifacts.TestDatabase;
+
+@Singleton
+public class JPAResourceProducer {
+    @Produces @PersistenceUnit(unitName="pu2")
+    @TestDatabase 
+    EntityManagerFactory customerDatabasePersistenceUnit;
+
+    @Produces @PersistenceContext(unitName="pu2")
+    @TestDatabase 
+    EntityManager customerDatabasePersistenceContext;
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/util/JpaTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/util/JpaTest.java
new file mode 100644
index 0000000..3d47448
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-non-serializable/servlet/test/util/JpaTest.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.util;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Query;
+import javax.transaction.UserTransaction;
+
+import test.entity.Department;
+import test.entity.Employee;
+
+public class JpaTest {
+
+    private EntityManager em;
+    private UserTransaction utx;
+
+    private static Department deptRef[] = new Department[2];
+    private static Employee empRef[] = new Employee[5];
+
+    public JpaTest() {
+    }
+
+    public JpaTest(EntityManager em, UserTransaction utx) {
+        this.em = em;
+        this.utx = utx;
+    }
+
+    public boolean lazyLoadingInit() {
+        boolean status = false;
+        System.out.println("-----lazeLoadingInit()---------");
+        try {
+            deptRef[0] = new Department(1, "Engineering");
+            deptRef[1] = new Department(2, "Marketing");
+            utx.begin();
+            em.joinTransaction();
+            for (int i = 0; i < 2; i++) {
+                em.persist(deptRef[i]);
+            }
+            utx.commit();
+
+            empRef[0] = new Employee(1, "Alan", "Frechette", deptRef[0]);
+            empRef[1] = new Employee(2, "Arthur", "Wesley", deptRef[0]);
+            empRef[2] = new Employee(3, "Abe", "White", deptRef[0]);
+            empRef[3] = new Employee(4, "Paul", "Hinz", deptRef[1]);
+            empRef[4] = new Employee(5, "Carla", "Calrson", deptRef[1]);
+            utx.begin();
+            em.joinTransaction();
+            for (int i = 0; i < 5; i++) {
+                em.persist(empRef[i]);
+            }
+            utx.commit();
+            status = true;
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+    public boolean lazyLoadingByFind(int employeeID) {
+
+        boolean status = true;
+        System.out.println("------------lazyLoadingAfterFind -----------");
+        System.out.println("employeeID = " + employeeID);
+        Employee emp = em.find(Employee.class, employeeID);
+
+        System.out.println("found: emp.id=" + emp.getId());
+
+        try {
+            // 1. get Department before loading
+            Department deptBL = emp.getDepartmentNoWeaving();
+            System.out.println("1. before loading: deptBL=" + deptBL);
+            String deptNameBL = null;
+            if (deptBL != null) {
+                deptNameBL = deptBL.getName();
+                System.out.println("deptNameBL=" + deptNameBL);
+            }
+            // assert deptBL == null;
+            if (deptBL != null) {
+                status = false;
+            }
+
+            // 2. loading
+            String deptName = emp.getDepartment().getName();
+            System.out.println("2. loading, deptName = " + deptName);
+
+            // 3. get Department after loading
+            Department deptAL = emp.getDepartmentNoWeaving();
+            System.out.println("3. after loading: deptAL=" + deptAL);
+            String deptNameAL = deptAL.getName();
+            System.out.println("deptNameAL=" + deptNameAL);
+            // assert deptAL != null
+            // assert deptAL.getName == deptName;
+            if (deptAL == null || deptNameAL != deptName) {
+                status = false;
+            }
+        } catch (Exception ex) {
+            status = false;
+            ex.printStackTrace();
+        }
+
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+    public boolean lazyLoadingByQuery(String fName) {
+
+        boolean status = true;
+        System.out.println("------------lazyLoadingByQuery -----------");
+        System.out.println("fName = " + fName);
+        Query query = em.createQuery(
+                "SELECT e FROM Employee e WHERE e.firstName like :firstName")
+                .setParameter("firstName", fName);
+        ;
+        Employee emp = (Employee) query.getSingleResult();
+
+        System.out.println("queried: emp.firstName=" + emp.getFirstName());
+
+        try {
+            // 1. get Department before loading
+            Department deptBL = emp.getDepartmentNoWeaving();
+            System.out.println("1. before loading: deptBL=" + deptBL);
+            String deptNameBL = null;
+            if (deptBL != null) {
+                deptNameBL = deptBL.getName();
+                System.out.println("deptNameBL=" + deptNameBL);
+            }
+            // assert deptBL == null;
+            if (deptBL != null) {
+                status = false;
+            }
+
+            // 2. loading
+            String deptName = emp.getDepartment().getName();
+            System.out.println("2. loading, deptName = " + deptName);
+
+            // 3. get Department after loading
+            Department deptAL = emp.getDepartmentNoWeaving();
+            System.out.println("3. after loading: deptAL=" + deptAL);
+            String deptNameAL = deptAL.getName();
+            System.out.println("deptNameAL=" + deptNameAL);
+            // assert deptAL != null
+            // assert deptAL.getName == deptName;
+            if (deptAL == null || deptNameAL != deptName) {
+                status = false;
+            }
+        } catch (Exception ex) {
+            status = false;
+            ex.printStackTrace();
+        }
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/README
new file mode 100644
index 0000000..e90237d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/README
@@ -0,0 +1,7 @@
+Test
+- Use of Java EE component environment resources 
+Passivating Scopes and passivation capable dependencies
+    - test if a producer method can return a non-serializable resource [EntityManager]. 
+    - test if a Stateful session bean can have non-transient injected field that is a resource  
+
+This test is similar to jpa-resource-injection-non-serializable except that the injection happens into a SFSB [a passivating bean]
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/build.properties
new file mode 100644
index 0000000..87af1eb
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/build.properties
@@ -0,0 +1,25 @@
+<!--
+
+    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}-jpa-resource-injection-passivating-scope"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
+<property name="persistence.xml" value="descriptor/persistence.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/build.xml
new file mode 100644
index 0000000..295d086
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/build.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,create-resources,deploy,run,undeploy,delete-resources" />
+
+	<target name="clean" depends="init-common">
+		<antcall target="clean-common" />
+		<delete>
+			<fileset dir="." includes="*.class" />
+			<fileset dir="client/test/client" includes="*.class" />
+		</delete>
+	</target>
+
+	<target name="compile" depends="clean">
+		<antcall target="compile-common">
+			<param name="src" value="servlet" />
+		</antcall>
+	</target>
+
+	<target name="build" depends="compile">
+		<property name="hasWebclient" value="yes" />
+		<antcall target="webclient-war-common">
+			<param name="hasWebclient" value="yes" />
+			<param name="webclient.war.classes" value="**/*.class" />
+		</antcall>
+
+		<javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar" includes="test/client/WebTest.java" />
+
+	</target>
+
+	<target name="build-publish-war" depends="build, publish-war-common" />
+
+	<target name="deploy" depends="init-common">
+		<antcall target="deploy-war-common" />
+	</target>
+
+	<target name="create-resources" depends="init-common">
+		<antcall target="create-jdbc-connpool-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+		</antcall>
+		<antcall target="create-jdbc-resource-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+			<param name="jdbc.resource.name" value="jdbc/jdbc-dev-test-resource" />
+		</antcall>
+	</target>
+
+
+	<target name="run" depends="init-common">
+		<java classname="test.client.WebTest">
+			<arg value="${http.host}" />
+			<arg value="${http.port}" />
+			<arg value="${contextroot}" />
+			<classpath>
+				<pathelement location="${env.APS_HOME}/lib/reportbuilder.jar" />
+				<pathelement location="client" />
+			</classpath>
+		</java>
+	</target>
+
+	<target name="undeploy" depends="init-common">
+		<antcall target="undeploy-war-common" />
+	</target>
+
+	<target name="delete-resources" depends="init-common">
+		<antcall target="delete-jdbc-resource-common">
+			<param name="jdbc.resource.name" value="jdbc/jdbc-dev-test-resource" />
+		</antcall>
+
+		<antcall target="delete-jdbc-connpool-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+		</antcall>
+	</target>
+
+	<target name="usage">
+		<antcall target="usage-common" />
+	</target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/client/test/client/WebTest.java
new file mode 100644
index 0000000..5b5f610
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/client/test/client/WebTest.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+    private static final String TEST_NAME = "jpa-resource-injection-passivating-scope";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for Java EE resource injection");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            invoke("llinit");
+            invoke("llquery");
+            invoke("llfind");
+            invoke("llinj");
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed. Expected error obtained:" + ex);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            //ex.printStackTrace();
+        }
+    }
+
+    private void invoke(String testCase) throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl"
+                + "?testcase=" + testCase;
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME + testCase, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME + testCase, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: "
+                        + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME + testCase, stat.FAIL);
+            }
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/descriptor/beans.xml
new file mode 100644
index 0000000..1d355f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/descriptor/beans.xml
@@ -0,0 +1,25 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/descriptor/persistence.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/descriptor/persistence.xml
new file mode 100644
index 0000000..2a7b5a0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/descriptor/persistence.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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
+
+-->
+
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
+  <persistence-unit name="pu3" transaction-type="JTA">
+    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+    <jta-data-source>jdbc/__default</jta-data-source>
+    <non-jta-data-source>jdbc/__default</non-jta-data-source>
+    <class>myapp.Department</class>
+    <class>myapp.Employee</class>
+    <properties>
+       <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
+       <property name="eclipselink.logging.level" value="INFO"/>
+    </properties>
+  </persistence-unit>
+</persistence>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/beans/TestBeanInterface.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/beans/TestBeanInterface.java
new file mode 100644
index 0000000..29e137a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/beans/TestBeanInterface.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public interface TestBeanInterface {
+    public void m1();
+    public void m2();
+    
+    public String testDatasourceInjection();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/beans/artifacts/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/beans/artifacts/Preferred.java
new file mode 100644
index 0000000..b7584c8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/beans/artifacts/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/beans/artifacts/TestDatabase.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/beans/artifacts/TestDatabase.java
new file mode 100644
index 0000000..b69ab8e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/beans/artifacts/TestDatabase.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface TestDatabase {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/ejb/TestEJB.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/ejb/TestEJB.java
new file mode 100644
index 0000000..4065801
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/ejb/TestEJB.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 javax.ejb.Stateful;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+
+import test.beans.artifacts.TestDatabase;
+
+@Stateful
+public class TestEJB{
+
+    @Inject
+    @TestDatabase
+    transient EntityManager em;
+
+    public String test() {
+        String s = "";
+        em.isOpen();//use the EM
+        if(em == null) s += "EntityManager injection into TestEJB failed";
+        return s;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/entity/Department.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/entity/Department.java
new file mode 100644
index 0000000..14191ec
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/entity/Department.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.entity;
+
+import java.util.Set;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "DEPARTMENT")
+public class Department implements java.io.Serializable {
+
+    // Instance variables
+    private int id;
+    private String name;
+    private Set<Employee> employees;
+
+    public Department() {
+    }
+
+    public Department(int id, String name) {
+        this.id = id;
+        this.name = name;
+    }
+
+    // ===========================================================
+    // getters and setters for the state fields
+
+    @Id
+    @Column(name = "ID")
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    @Column(name = "NAME")
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    // ===========================================================
+    // getters and setters for the association fields
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "department")
+    public Set<Employee> getEmployees() {
+        return employees;
+    }
+
+    public void setEmployees(Set<Employee> employees) {
+        this.employees = employees;
+    }
+
+    public String toString() {
+        return "Department id=" + getId() + ", Department Name=" + getName();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/entity/Employee.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/entity/Employee.java
new file mode 100644
index 0000000..a1820e8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/entity/Employee.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.entity;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+@Entity
+@Table(name = "EMPLOYEE")
+public class Employee implements java.io.Serializable {
+
+    private int id;
+    private String firstName;
+    private String lastName;
+    private Department department;
+
+    public Employee() {
+    }
+
+    public Employee(int id, String firstName, String lastName) {
+        this.id = id;
+        this.firstName = firstName;
+        this.lastName = lastName;
+    }
+
+    public Employee(int id, String firstName, String lastName,
+            Department department) {
+        this.id = id;
+        this.firstName = firstName;
+        this.lastName = lastName;
+        this.department = department;
+    }
+
+    // ===========================================================
+    // getters and setters for the state fields
+    @Id
+    @Column(name = "ID")
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    @Column(name = "FIRSTNAME")
+    public String getFirstName() {
+        return firstName;
+    }
+
+    public void setFirstName(String firstName) {
+        this.firstName = firstName;
+    }
+
+    @Column(name = "LASTNAME")
+    public String getLastName() {
+        return lastName;
+    }
+
+    public void setLastName(String lastName) {
+        this.lastName = lastName;
+    }
+
+    // ===========================================================
+    // getters and setters for the association fields
+    // @ManyToOne
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "DEPARTMENT_ID")
+    public Department getDepartment() {
+        return department;
+    }
+
+    @Transient
+    public Department getDepartmentNoWeaving() {
+        try {
+            java.lang.reflect.Field f = Employee.class
+                    .getDeclaredField("department");
+            return (Department) f.get(this);
+        } catch (NoSuchFieldException e) {
+            throw new RuntimeException(
+                    "Please change argument to getDeclaredField", e);
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public void setDepartment(Department department) {
+        this.department = department;
+    }
+
+    public String toString() {
+        return "Employee id=" + getId() + ", firstName=" + getFirstName()
+                + ", lastName=" + getLastName() + ", department="
+                + getDepartment();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/servlet/JPAResourceInjectionServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/servlet/JPAResourceInjectionServlet.java
new file mode 100644
index 0000000..afb7a69
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/servlet/JPAResourceInjectionServlet.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.annotation.Resource;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceUnit;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.transaction.UserTransaction;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.TestDatabase;
+import test.ejb.TestEJB;
+import test.util.JpaTest;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class JPAResourceInjectionServlet extends HttpServlet {
+
+    @PersistenceUnit(unitName = "pu3")
+    private EntityManagerFactory emf;
+
+    @Inject
+    @TestDatabase
+    private EntityManagerFactory emf1;
+
+    private @Resource
+    UserTransaction utx;
+    
+    @Inject
+    TestEJB tbi;
+
+    protected void doGet(HttpServletRequest request,
+            HttpServletResponse response) throws ServletException,
+            IOException {
+        PrintWriter writer = response.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+        System.out.println("JPAResourceInjectionServlet::@PersistenceUnit " +
+        		"CDI EntityManagerFactory=" + emf1);
+
+        EntityManager em = emf1.createEntityManager();
+        System.out.println("JPAResourceInjectionServlet::createEM" +
+        		"EntityManager=" + em);
+        String testcase = request.getParameter("testcase");
+        System.out.println("testcase=" + testcase);
+
+        if (testcase != null) {
+            JpaTest jt = new JpaTest(em, utx);
+            boolean status = false;
+            if ("llinit".equals(testcase)) {
+                status = jt.lazyLoadingInit();
+            } else if ("llfind".equals(testcase)) {
+                status = jt.lazyLoadingByFind(1);
+            } else if ("llquery".equals(testcase)) {
+                status = jt.lazyLoadingByQuery("Carla");
+            } else if ("llinj".equals(testcase)){
+                status = ((tbi != null) && 
+                        (tbi.test().length() == 0));
+            }
+            if (status) {
+                msg += "";// pass
+            } else {
+                msg += (testcase + ":fail");
+            }
+        }
+
+        writer.write(msg + "\n");
+
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/util/JPAResourceProducer.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/util/JPAResourceProducer.java
new file mode 100644
index 0000000..4714b5d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/util/JPAResourceProducer.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.util;
+
+import javax.enterprise.context.ConversationScoped;
+import javax.enterprise.inject.Produces;
+import javax.inject.Singleton;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceContext;
+import javax.persistence.PersistenceUnit;
+
+import test.beans.artifacts.TestDatabase;
+
+@Singleton
+public class JPAResourceProducer {
+    @Produces @PersistenceUnit(unitName="pu3")
+    @TestDatabase 
+    EntityManagerFactory customerDatabasePersistenceUnit;
+
+    @Produces @PersistenceContext(unitName="pu3")
+    @TestDatabase 
+    EntityManager customerDatabasePersistenceContext;
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/util/JpaTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/util/JpaTest.java
new file mode 100644
index 0000000..3d47448
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-passivating-scope/servlet/test/util/JpaTest.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.util;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Query;
+import javax.transaction.UserTransaction;
+
+import test.entity.Department;
+import test.entity.Employee;
+
+public class JpaTest {
+
+    private EntityManager em;
+    private UserTransaction utx;
+
+    private static Department deptRef[] = new Department[2];
+    private static Employee empRef[] = new Employee[5];
+
+    public JpaTest() {
+    }
+
+    public JpaTest(EntityManager em, UserTransaction utx) {
+        this.em = em;
+        this.utx = utx;
+    }
+
+    public boolean lazyLoadingInit() {
+        boolean status = false;
+        System.out.println("-----lazeLoadingInit()---------");
+        try {
+            deptRef[0] = new Department(1, "Engineering");
+            deptRef[1] = new Department(2, "Marketing");
+            utx.begin();
+            em.joinTransaction();
+            for (int i = 0; i < 2; i++) {
+                em.persist(deptRef[i]);
+            }
+            utx.commit();
+
+            empRef[0] = new Employee(1, "Alan", "Frechette", deptRef[0]);
+            empRef[1] = new Employee(2, "Arthur", "Wesley", deptRef[0]);
+            empRef[2] = new Employee(3, "Abe", "White", deptRef[0]);
+            empRef[3] = new Employee(4, "Paul", "Hinz", deptRef[1]);
+            empRef[4] = new Employee(5, "Carla", "Calrson", deptRef[1]);
+            utx.begin();
+            em.joinTransaction();
+            for (int i = 0; i < 5; i++) {
+                em.persist(empRef[i]);
+            }
+            utx.commit();
+            status = true;
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+    public boolean lazyLoadingByFind(int employeeID) {
+
+        boolean status = true;
+        System.out.println("------------lazyLoadingAfterFind -----------");
+        System.out.println("employeeID = " + employeeID);
+        Employee emp = em.find(Employee.class, employeeID);
+
+        System.out.println("found: emp.id=" + emp.getId());
+
+        try {
+            // 1. get Department before loading
+            Department deptBL = emp.getDepartmentNoWeaving();
+            System.out.println("1. before loading: deptBL=" + deptBL);
+            String deptNameBL = null;
+            if (deptBL != null) {
+                deptNameBL = deptBL.getName();
+                System.out.println("deptNameBL=" + deptNameBL);
+            }
+            // assert deptBL == null;
+            if (deptBL != null) {
+                status = false;
+            }
+
+            // 2. loading
+            String deptName = emp.getDepartment().getName();
+            System.out.println("2. loading, deptName = " + deptName);
+
+            // 3. get Department after loading
+            Department deptAL = emp.getDepartmentNoWeaving();
+            System.out.println("3. after loading: deptAL=" + deptAL);
+            String deptNameAL = deptAL.getName();
+            System.out.println("deptNameAL=" + deptNameAL);
+            // assert deptAL != null
+            // assert deptAL.getName == deptName;
+            if (deptAL == null || deptNameAL != deptName) {
+                status = false;
+            }
+        } catch (Exception ex) {
+            status = false;
+            ex.printStackTrace();
+        }
+
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+    public boolean lazyLoadingByQuery(String fName) {
+
+        boolean status = true;
+        System.out.println("------------lazyLoadingByQuery -----------");
+        System.out.println("fName = " + fName);
+        Query query = em.createQuery(
+                "SELECT e FROM Employee e WHERE e.firstName like :firstName")
+                .setParameter("firstName", fName);
+        ;
+        Employee emp = (Employee) query.getSingleResult();
+
+        System.out.println("queried: emp.firstName=" + emp.getFirstName());
+
+        try {
+            // 1. get Department before loading
+            Department deptBL = emp.getDepartmentNoWeaving();
+            System.out.println("1. before loading: deptBL=" + deptBL);
+            String deptNameBL = null;
+            if (deptBL != null) {
+                deptNameBL = deptBL.getName();
+                System.out.println("deptNameBL=" + deptNameBL);
+            }
+            // assert deptBL == null;
+            if (deptBL != null) {
+                status = false;
+            }
+
+            // 2. loading
+            String deptName = emp.getDepartment().getName();
+            System.out.println("2. loading, deptName = " + deptName);
+
+            // 3. get Department after loading
+            Department deptAL = emp.getDepartmentNoWeaving();
+            System.out.println("3. after loading: deptAL=" + deptAL);
+            String deptNameAL = deptAL.getName();
+            System.out.println("deptNameAL=" + deptNameAL);
+            // assert deptAL != null
+            // assert deptAL.getName == deptName;
+            if (deptAL == null || deptNameAL != deptName) {
+                status = false;
+            }
+        } catch (Exception ex) {
+            status = false;
+            ex.printStackTrace();
+        }
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/README
new file mode 100644
index 0000000..0a06178
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/README
@@ -0,0 +1,6 @@
+Test
+- Use of Java EE component environment resources 
+    - type safe injection of JPA resources (EntityManagerFactory, EntityManager) 
+    by declaring a resource through
+        - a static field of a singleton EJB acting as a producer field
+        - a business method in a singleton EJB acting as a producer method 
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/build.properties
new file mode 100644
index 0000000..e2f195c
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/build.properties
@@ -0,0 +1,25 @@
+<!--
+
+    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}-jpa-resource-injection-in-singleton-ejb"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
+<property name="persistence.xml" value="descriptor/persistence.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/build.xml
new file mode 100644
index 0000000..295d086
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/build.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,create-resources,deploy,run,undeploy,delete-resources" />
+
+	<target name="clean" depends="init-common">
+		<antcall target="clean-common" />
+		<delete>
+			<fileset dir="." includes="*.class" />
+			<fileset dir="client/test/client" includes="*.class" />
+		</delete>
+	</target>
+
+	<target name="compile" depends="clean">
+		<antcall target="compile-common">
+			<param name="src" value="servlet" />
+		</antcall>
+	</target>
+
+	<target name="build" depends="compile">
+		<property name="hasWebclient" value="yes" />
+		<antcall target="webclient-war-common">
+			<param name="hasWebclient" value="yes" />
+			<param name="webclient.war.classes" value="**/*.class" />
+		</antcall>
+
+		<javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar" includes="test/client/WebTest.java" />
+
+	</target>
+
+	<target name="build-publish-war" depends="build, publish-war-common" />
+
+	<target name="deploy" depends="init-common">
+		<antcall target="deploy-war-common" />
+	</target>
+
+	<target name="create-resources" depends="init-common">
+		<antcall target="create-jdbc-connpool-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+		</antcall>
+		<antcall target="create-jdbc-resource-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+			<param name="jdbc.resource.name" value="jdbc/jdbc-dev-test-resource" />
+		</antcall>
+	</target>
+
+
+	<target name="run" depends="init-common">
+		<java classname="test.client.WebTest">
+			<arg value="${http.host}" />
+			<arg value="${http.port}" />
+			<arg value="${contextroot}" />
+			<classpath>
+				<pathelement location="${env.APS_HOME}/lib/reportbuilder.jar" />
+				<pathelement location="client" />
+			</classpath>
+		</java>
+	</target>
+
+	<target name="undeploy" depends="init-common">
+		<antcall target="undeploy-war-common" />
+	</target>
+
+	<target name="delete-resources" depends="init-common">
+		<antcall target="delete-jdbc-resource-common">
+			<param name="jdbc.resource.name" value="jdbc/jdbc-dev-test-resource" />
+		</antcall>
+
+		<antcall target="delete-jdbc-connpool-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+		</antcall>
+	</target>
+
+	<target name="usage">
+		<antcall target="usage-common" />
+	</target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/client/test/client/WebTest.java
new file mode 100644
index 0000000..b474733
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/client/test/client/WebTest.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+    private static final String TEST_NAME = "jpa-resource-injection-from-singleton-EJB";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for Java EE resource injection");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            runOneCycle("producer");
+            //TODO: This test fails currently
+            //runOneCycle("static");
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+    
+    private void runOneCycle(String whichEMF) throws Exception {
+        invoke(whichEMF, "llinit");
+        invoke(whichEMF, "llquery");
+        invoke(whichEMF,"llfind");
+        invoke(whichEMF,"llinj");
+    }
+
+    private void invoke(String whichEMF, String testCase) throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl"
+                + "?testcase=" + testCase + "&whichemf=" + whichEMF;
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(getTestName(whichEMF, testCase), stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(getTestName(whichEMF, testCase), stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: "
+                        + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(getTestName(whichEMF, testCase), stat.FAIL);
+            }
+        }
+    }
+    
+    private String getTestName(String whichEMF, String testCase){
+        return TEST_NAME + "_" + whichEMF + "_" +testCase;        
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/descriptor/beans.xml
new file mode 100644
index 0000000..1d355f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/descriptor/beans.xml
@@ -0,0 +1,25 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/descriptor/persistence.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/descriptor/persistence.xml
new file mode 100644
index 0000000..82f2d7b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/descriptor/persistence.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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
+
+-->
+
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
+  <persistence-unit name="pu1" transaction-type="JTA">
+    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+    <jta-data-source>jdbc/__default</jta-data-source>
+    <non-jta-data-source>jdbc/__default</non-jta-data-source>
+    <class>myapp.Department</class>
+    <class>myapp.Employee</class>
+    <properties>
+       <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
+       <property name="eclipselink.logging.level" value="INFO"/>
+    </properties>
+  </persistence-unit>
+</persistence>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/beans/TestBeanInterface.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/beans/TestBeanInterface.java
new file mode 100644
index 0000000..29e137a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/beans/TestBeanInterface.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public interface TestBeanInterface {
+    public void m1();
+    public void m2();
+    
+    public String testDatasourceInjection();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/beans/artifacts/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/beans/artifacts/Preferred.java
new file mode 100644
index 0000000..b7584c8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/beans/artifacts/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/beans/artifacts/ProducedViaProducerMethod.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/beans/artifacts/ProducedViaProducerMethod.java
new file mode 100644
index 0000000..5c60345
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/beans/artifacts/ProducedViaProducerMethod.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ProducedViaProducerMethod {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/beans/artifacts/ProducedViaStaticField.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/beans/artifacts/ProducedViaStaticField.java
new file mode 100644
index 0000000..e988e7e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/beans/artifacts/ProducedViaStaticField.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ProducedViaStaticField {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/beans/artifacts/TestDatabase.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/beans/artifacts/TestDatabase.java
new file mode 100644
index 0000000..b69ab8e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/beans/artifacts/TestDatabase.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface TestDatabase {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/beans/nonmock/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/beans/nonmock/TestBean.java
new file mode 100644
index 0000000..f61ec1b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/beans/nonmock/TestBean.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+import javax.persistence.EntityManagerFactory;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.ProducedViaProducerMethod;
+import test.beans.artifacts.ProducedViaStaticField;
+import test.beans.artifacts.TestDatabase;
+
+
+@RequestScoped
+@Preferred
+public class TestBean implements TestBeanInterface{
+    public static boolean testBeanInvoked = false;
+    
+    @Inject @ProducedViaProducerMethod 
+    EntityManagerFactory emf;
+
+    @Override
+    public void m1() {
+        testBeanInvoked = true;
+        System.out.println("TestBean::m1 called");
+    }
+
+    @Override
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+    @Override
+    public String testDatasourceInjection() {
+        return (emf==null ? "typesafe injection into testbean failed" : "");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/ejb/JPAResourceProducerSingletonEJB_BusinessMethodProducer.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/ejb/JPAResourceProducerSingletonEJB_BusinessMethodProducer.java
new file mode 100644
index 0000000..b20fae4
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/ejb/JPAResourceProducerSingletonEJB_BusinessMethodProducer.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 javax.enterprise.inject.Produces;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceUnit;
+
+import test.beans.artifacts.ProducedViaProducerMethod;
+import test.beans.artifacts.ProducedViaStaticField;
+
+@javax.ejb.Singleton
+public class JPAResourceProducerSingletonEJB_BusinessMethodProducer {
+    @PersistenceUnit(unitName="pu1")
+    EntityManagerFactory customerDatabasePersistenceUnit;
+    
+    @Produces @ProducedViaProducerMethod
+    public EntityManagerFactory createEMF(){
+        return customerDatabasePersistenceUnit;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/ejb/JPAResourceProducerSingletonEJB_StaticField.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/ejb/JPAResourceProducerSingletonEJB_StaticField.java
new file mode 100644
index 0000000..adbca7b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/ejb/JPAResourceProducerSingletonEJB_StaticField.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 javax.enterprise.inject.Produces;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceUnit;
+
+import test.beans.artifacts.ProducedViaStaticField;
+
+@javax.ejb.Singleton
+public class JPAResourceProducerSingletonEJB_StaticField {
+    @Produces @PersistenceUnit(unitName="pu1") @ProducedViaStaticField 
+    public static EntityManagerFactory customerDatabasePersistenceUnit1;
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/entity/Department.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/entity/Department.java
new file mode 100644
index 0000000..14191ec
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/entity/Department.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.entity;
+
+import java.util.Set;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "DEPARTMENT")
+public class Department implements java.io.Serializable {
+
+    // Instance variables
+    private int id;
+    private String name;
+    private Set<Employee> employees;
+
+    public Department() {
+    }
+
+    public Department(int id, String name) {
+        this.id = id;
+        this.name = name;
+    }
+
+    // ===========================================================
+    // getters and setters for the state fields
+
+    @Id
+    @Column(name = "ID")
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    @Column(name = "NAME")
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    // ===========================================================
+    // getters and setters for the association fields
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "department")
+    public Set<Employee> getEmployees() {
+        return employees;
+    }
+
+    public void setEmployees(Set<Employee> employees) {
+        this.employees = employees;
+    }
+
+    public String toString() {
+        return "Department id=" + getId() + ", Department Name=" + getName();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/entity/Employee.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/entity/Employee.java
new file mode 100644
index 0000000..a1820e8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/entity/Employee.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.entity;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+@Entity
+@Table(name = "EMPLOYEE")
+public class Employee implements java.io.Serializable {
+
+    private int id;
+    private String firstName;
+    private String lastName;
+    private Department department;
+
+    public Employee() {
+    }
+
+    public Employee(int id, String firstName, String lastName) {
+        this.id = id;
+        this.firstName = firstName;
+        this.lastName = lastName;
+    }
+
+    public Employee(int id, String firstName, String lastName,
+            Department department) {
+        this.id = id;
+        this.firstName = firstName;
+        this.lastName = lastName;
+        this.department = department;
+    }
+
+    // ===========================================================
+    // getters and setters for the state fields
+    @Id
+    @Column(name = "ID")
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    @Column(name = "FIRSTNAME")
+    public String getFirstName() {
+        return firstName;
+    }
+
+    public void setFirstName(String firstName) {
+        this.firstName = firstName;
+    }
+
+    @Column(name = "LASTNAME")
+    public String getLastName() {
+        return lastName;
+    }
+
+    public void setLastName(String lastName) {
+        this.lastName = lastName;
+    }
+
+    // ===========================================================
+    // getters and setters for the association fields
+    // @ManyToOne
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "DEPARTMENT_ID")
+    public Department getDepartment() {
+        return department;
+    }
+
+    @Transient
+    public Department getDepartmentNoWeaving() {
+        try {
+            java.lang.reflect.Field f = Employee.class
+                    .getDeclaredField("department");
+            return (Department) f.get(this);
+        } catch (NoSuchFieldException e) {
+            throw new RuntimeException(
+                    "Please change argument to getDeclaredField", e);
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public void setDepartment(Department department) {
+        this.department = department;
+    }
+
+    public String toString() {
+        return "Employee id=" + getId() + ", firstName=" + getFirstName()
+                + ", lastName=" + getLastName() + ", department="
+                + getDepartment();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/servlet/JPAResourceInjectionServletFromSingletonEJB.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/servlet/JPAResourceInjectionServletFromSingletonEJB.java
new file mode 100644
index 0000000..96167f7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/servlet/JPAResourceInjectionServletFromSingletonEJB.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.annotation.Resource;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceUnit;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.transaction.UserTransaction;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.ProducedViaProducerMethod;
+import test.beans.artifacts.ProducedViaStaticField;
+import test.util.JpaTest;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class JPAResourceInjectionServletFromSingletonEJB extends HttpServlet {
+
+    @PersistenceUnit(unitName = "pu1")
+    private EntityManagerFactory emf;
+
+    @Inject
+    @ProducedViaProducerMethod
+    private EntityManagerFactory emf_producer;
+    
+    @Inject
+    @ProducedViaStaticField
+    private EntityManagerFactory emf_static;
+    
+
+    private @Resource
+    UserTransaction utx;
+    
+    @Inject
+    @Preferred
+    TestBeanInterface tbi;
+
+    protected void doGet(HttpServletRequest request,
+            HttpServletResponse response) throws ServletException,
+            IOException {
+        PrintWriter writer = response.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+        
+        if (emf == null)
+            msg += "Simple injection of EntityManagerFactory through " +
+            		"@PersistenceUnit failed";
+        String testcase = request.getParameter("testcase");
+        System.out.println("testcase=" + testcase);
+        
+        String whichEMF = request.getParameter("whichemf");
+        System.out.println("whichEMF=" + whichEMF);
+
+        EntityManager em = null;
+        if (whichEMF != null){
+            EntityManagerFactory emf = null;
+            if (whichEMF.equals("producer")){
+                emf = emf_producer;
+            } else if (whichEMF.equals("static")) {
+                emf = emf_static;
+            }
+            //System.out.println("JPAResourceInjectionServlet::@PersistenceUnit " +
+            //        "CDI EntityManagerFactory to run against=" + emf);
+            em = emf.createEntityManager();
+            System.out.println("JPAResourceInjectionServlet::createEM" +
+                    "EntityManager=" + em);
+        }
+        
+        if (testcase != null) {
+            
+            JpaTest jt = new JpaTest(em, utx);
+            boolean status = false;
+            if ("llinit".equals(testcase)) {
+                status = jt.lazyLoadingInit();
+            } else if ("llfind".equals(testcase)) {
+                status = jt.lazyLoadingByFind(1);
+            } else if ("llquery".equals(testcase)) {
+                status = jt.lazyLoadingByQuery("Carla");
+            } else if ("llinj".equals(testcase)){
+                status = ((tbi != null) && 
+                        (tbi.testDatasourceInjection().trim().length()==0));
+            }
+            
+            if (status) {
+                msg += "";// pass
+            } else {
+                msg += (testcase + ":fail");
+            }
+        }
+
+        writer.write(msg + "\n");
+
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/util/JpaTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/util/JpaTest.java
new file mode 100644
index 0000000..3d47448
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection-with-singleton-ejb-producer/servlet/test/util/JpaTest.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.util;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Query;
+import javax.transaction.UserTransaction;
+
+import test.entity.Department;
+import test.entity.Employee;
+
+public class JpaTest {
+
+    private EntityManager em;
+    private UserTransaction utx;
+
+    private static Department deptRef[] = new Department[2];
+    private static Employee empRef[] = new Employee[5];
+
+    public JpaTest() {
+    }
+
+    public JpaTest(EntityManager em, UserTransaction utx) {
+        this.em = em;
+        this.utx = utx;
+    }
+
+    public boolean lazyLoadingInit() {
+        boolean status = false;
+        System.out.println("-----lazeLoadingInit()---------");
+        try {
+            deptRef[0] = new Department(1, "Engineering");
+            deptRef[1] = new Department(2, "Marketing");
+            utx.begin();
+            em.joinTransaction();
+            for (int i = 0; i < 2; i++) {
+                em.persist(deptRef[i]);
+            }
+            utx.commit();
+
+            empRef[0] = new Employee(1, "Alan", "Frechette", deptRef[0]);
+            empRef[1] = new Employee(2, "Arthur", "Wesley", deptRef[0]);
+            empRef[2] = new Employee(3, "Abe", "White", deptRef[0]);
+            empRef[3] = new Employee(4, "Paul", "Hinz", deptRef[1]);
+            empRef[4] = new Employee(5, "Carla", "Calrson", deptRef[1]);
+            utx.begin();
+            em.joinTransaction();
+            for (int i = 0; i < 5; i++) {
+                em.persist(empRef[i]);
+            }
+            utx.commit();
+            status = true;
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+    public boolean lazyLoadingByFind(int employeeID) {
+
+        boolean status = true;
+        System.out.println("------------lazyLoadingAfterFind -----------");
+        System.out.println("employeeID = " + employeeID);
+        Employee emp = em.find(Employee.class, employeeID);
+
+        System.out.println("found: emp.id=" + emp.getId());
+
+        try {
+            // 1. get Department before loading
+            Department deptBL = emp.getDepartmentNoWeaving();
+            System.out.println("1. before loading: deptBL=" + deptBL);
+            String deptNameBL = null;
+            if (deptBL != null) {
+                deptNameBL = deptBL.getName();
+                System.out.println("deptNameBL=" + deptNameBL);
+            }
+            // assert deptBL == null;
+            if (deptBL != null) {
+                status = false;
+            }
+
+            // 2. loading
+            String deptName = emp.getDepartment().getName();
+            System.out.println("2. loading, deptName = " + deptName);
+
+            // 3. get Department after loading
+            Department deptAL = emp.getDepartmentNoWeaving();
+            System.out.println("3. after loading: deptAL=" + deptAL);
+            String deptNameAL = deptAL.getName();
+            System.out.println("deptNameAL=" + deptNameAL);
+            // assert deptAL != null
+            // assert deptAL.getName == deptName;
+            if (deptAL == null || deptNameAL != deptName) {
+                status = false;
+            }
+        } catch (Exception ex) {
+            status = false;
+            ex.printStackTrace();
+        }
+
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+    public boolean lazyLoadingByQuery(String fName) {
+
+        boolean status = true;
+        System.out.println("------------lazyLoadingByQuery -----------");
+        System.out.println("fName = " + fName);
+        Query query = em.createQuery(
+                "SELECT e FROM Employee e WHERE e.firstName like :firstName")
+                .setParameter("firstName", fName);
+        ;
+        Employee emp = (Employee) query.getSingleResult();
+
+        System.out.println("queried: emp.firstName=" + emp.getFirstName());
+
+        try {
+            // 1. get Department before loading
+            Department deptBL = emp.getDepartmentNoWeaving();
+            System.out.println("1. before loading: deptBL=" + deptBL);
+            String deptNameBL = null;
+            if (deptBL != null) {
+                deptNameBL = deptBL.getName();
+                System.out.println("deptNameBL=" + deptNameBL);
+            }
+            // assert deptBL == null;
+            if (deptBL != null) {
+                status = false;
+            }
+
+            // 2. loading
+            String deptName = emp.getDepartment().getName();
+            System.out.println("2. loading, deptName = " + deptName);
+
+            // 3. get Department after loading
+            Department deptAL = emp.getDepartmentNoWeaving();
+            System.out.println("3. after loading: deptAL=" + deptAL);
+            String deptNameAL = deptAL.getName();
+            System.out.println("deptNameAL=" + deptNameAL);
+            // assert deptAL != null
+            // assert deptAL.getName == deptName;
+            if (deptAL == null || deptNameAL != deptName) {
+                status = false;
+            }
+        } catch (Exception ex) {
+            status = false;
+            ex.printStackTrace();
+        }
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/README
new file mode 100644
index 0000000..d620428
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/README
@@ -0,0 +1,5 @@
+Test
+- Use of Java EE component environment resources 
+    - type safe injection of JPA resources (EntityManagerFactory, EntityManager) 
+    by declaring a resource by annotating a producer field wuth a 
+    component environment injection annotation
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/build.properties
new file mode 100644
index 0000000..168fae7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/build.properties
@@ -0,0 +1,25 @@
+<!--
+
+    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}-jpa-resource-injection"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
+<property name="persistence.xml" value="descriptor/persistence.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/build.xml
new file mode 100644
index 0000000..295d086
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/build.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,create-resources,deploy,run,undeploy,delete-resources" />
+
+	<target name="clean" depends="init-common">
+		<antcall target="clean-common" />
+		<delete>
+			<fileset dir="." includes="*.class" />
+			<fileset dir="client/test/client" includes="*.class" />
+		</delete>
+	</target>
+
+	<target name="compile" depends="clean">
+		<antcall target="compile-common">
+			<param name="src" value="servlet" />
+		</antcall>
+	</target>
+
+	<target name="build" depends="compile">
+		<property name="hasWebclient" value="yes" />
+		<antcall target="webclient-war-common">
+			<param name="hasWebclient" value="yes" />
+			<param name="webclient.war.classes" value="**/*.class" />
+		</antcall>
+
+		<javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar" includes="test/client/WebTest.java" />
+
+	</target>
+
+	<target name="build-publish-war" depends="build, publish-war-common" />
+
+	<target name="deploy" depends="init-common">
+		<antcall target="deploy-war-common" />
+	</target>
+
+	<target name="create-resources" depends="init-common">
+		<antcall target="create-jdbc-connpool-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+		</antcall>
+		<antcall target="create-jdbc-resource-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+			<param name="jdbc.resource.name" value="jdbc/jdbc-dev-test-resource" />
+		</antcall>
+	</target>
+
+
+	<target name="run" depends="init-common">
+		<java classname="test.client.WebTest">
+			<arg value="${http.host}" />
+			<arg value="${http.port}" />
+			<arg value="${contextroot}" />
+			<classpath>
+				<pathelement location="${env.APS_HOME}/lib/reportbuilder.jar" />
+				<pathelement location="client" />
+			</classpath>
+		</java>
+	</target>
+
+	<target name="undeploy" depends="init-common">
+		<antcall target="undeploy-war-common" />
+	</target>
+
+	<target name="delete-resources" depends="init-common">
+		<antcall target="delete-jdbc-resource-common">
+			<param name="jdbc.resource.name" value="jdbc/jdbc-dev-test-resource" />
+		</antcall>
+
+		<antcall target="delete-jdbc-connpool-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+		</antcall>
+	</target>
+
+	<target name="usage">
+		<antcall target="usage-common" />
+	</target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/client/test/client/WebTest.java
new file mode 100644
index 0000000..1cde8c0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/client/test/client/WebTest.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+    private static final String TEST_NAME = "jpa-resource-injection";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for Java EE resource injection");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            invoke("llinit");
+            invoke("llquery");
+            invoke("llfind");
+            invoke("llinj");
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke(String testCase) throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl"
+                + "?testcase=" + testCase;
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME + testCase, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME + testCase, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: "
+                        + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME + testCase, stat.FAIL);
+            }
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/descriptor/beans.xml
new file mode 100644
index 0000000..1d355f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/descriptor/beans.xml
@@ -0,0 +1,25 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/descriptor/persistence.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/descriptor/persistence.xml
new file mode 100644
index 0000000..82f2d7b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/descriptor/persistence.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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
+
+-->
+
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
+  <persistence-unit name="pu1" transaction-type="JTA">
+    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+    <jta-data-source>jdbc/__default</jta-data-source>
+    <non-jta-data-source>jdbc/__default</non-jta-data-source>
+    <class>myapp.Department</class>
+    <class>myapp.Employee</class>
+    <properties>
+       <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
+       <property name="eclipselink.logging.level" value="INFO"/>
+    </properties>
+  </persistence-unit>
+</persistence>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/beans/TestBeanInterface.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/beans/TestBeanInterface.java
new file mode 100644
index 0000000..29e137a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/beans/TestBeanInterface.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public interface TestBeanInterface {
+    public void m1();
+    public void m2();
+    
+    public String testDatasourceInjection();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/beans/artifacts/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/beans/artifacts/Preferred.java
new file mode 100644
index 0000000..b7584c8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/beans/artifacts/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/beans/artifacts/TestDatabase.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/beans/artifacts/TestDatabase.java
new file mode 100644
index 0000000..b69ab8e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/beans/artifacts/TestDatabase.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface TestDatabase {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/beans/nonmock/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/beans/nonmock/TestBean.java
new file mode 100644
index 0000000..4fe1ded
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/beans/nonmock/TestBean.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+import javax.persistence.EntityManagerFactory;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.TestDatabase;
+
+
+@RequestScoped
+@Preferred
+public class TestBean implements TestBeanInterface{
+    public static boolean testBeanInvoked = false;
+    
+    @Inject @TestDatabase 
+    EntityManagerFactory emf;
+
+    @Override
+    public void m1() {
+        testBeanInvoked = true;
+        System.out.println("TestBean::m1 called");
+    }
+
+    @Override
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+    @Override
+    public String testDatasourceInjection() {
+        return (emf==null ? "typesafe injection into testbean failed" : "");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/entity/Department.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/entity/Department.java
new file mode 100644
index 0000000..14191ec
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/entity/Department.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.entity;
+
+import java.util.Set;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "DEPARTMENT")
+public class Department implements java.io.Serializable {
+
+    // Instance variables
+    private int id;
+    private String name;
+    private Set<Employee> employees;
+
+    public Department() {
+    }
+
+    public Department(int id, String name) {
+        this.id = id;
+        this.name = name;
+    }
+
+    // ===========================================================
+    // getters and setters for the state fields
+
+    @Id
+    @Column(name = "ID")
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    @Column(name = "NAME")
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    // ===========================================================
+    // getters and setters for the association fields
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "department")
+    public Set<Employee> getEmployees() {
+        return employees;
+    }
+
+    public void setEmployees(Set<Employee> employees) {
+        this.employees = employees;
+    }
+
+    public String toString() {
+        return "Department id=" + getId() + ", Department Name=" + getName();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/entity/Employee.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/entity/Employee.java
new file mode 100644
index 0000000..a1820e8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/entity/Employee.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.entity;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+@Entity
+@Table(name = "EMPLOYEE")
+public class Employee implements java.io.Serializable {
+
+    private int id;
+    private String firstName;
+    private String lastName;
+    private Department department;
+
+    public Employee() {
+    }
+
+    public Employee(int id, String firstName, String lastName) {
+        this.id = id;
+        this.firstName = firstName;
+        this.lastName = lastName;
+    }
+
+    public Employee(int id, String firstName, String lastName,
+            Department department) {
+        this.id = id;
+        this.firstName = firstName;
+        this.lastName = lastName;
+        this.department = department;
+    }
+
+    // ===========================================================
+    // getters and setters for the state fields
+    @Id
+    @Column(name = "ID")
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    @Column(name = "FIRSTNAME")
+    public String getFirstName() {
+        return firstName;
+    }
+
+    public void setFirstName(String firstName) {
+        this.firstName = firstName;
+    }
+
+    @Column(name = "LASTNAME")
+    public String getLastName() {
+        return lastName;
+    }
+
+    public void setLastName(String lastName) {
+        this.lastName = lastName;
+    }
+
+    // ===========================================================
+    // getters and setters for the association fields
+    // @ManyToOne
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "DEPARTMENT_ID")
+    public Department getDepartment() {
+        return department;
+    }
+
+    @Transient
+    public Department getDepartmentNoWeaving() {
+        try {
+            java.lang.reflect.Field f = Employee.class
+                    .getDeclaredField("department");
+            return (Department) f.get(this);
+        } catch (NoSuchFieldException e) {
+            throw new RuntimeException(
+                    "Please change argument to getDeclaredField", e);
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public void setDepartment(Department department) {
+        this.department = department;
+    }
+
+    public String toString() {
+        return "Employee id=" + getId() + ", firstName=" + getFirstName()
+                + ", lastName=" + getLastName() + ", department="
+                + getDepartment();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/servlet/JPAResourceInjectionServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/servlet/JPAResourceInjectionServlet.java
new file mode 100644
index 0000000..e00446b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/servlet/JPAResourceInjectionServlet.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.annotation.Resource;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceUnit;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.transaction.UserTransaction;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.TestDatabase;
+import test.util.JpaTest;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class JPAResourceInjectionServlet extends HttpServlet {
+
+    @PersistenceUnit(unitName = "pu1")
+    private EntityManagerFactory emf;
+
+    @Inject
+    @TestDatabase
+    private EntityManagerFactory emf1;
+
+    private @Resource
+    UserTransaction utx;
+    
+    @Inject
+    @Preferred
+    TestBeanInterface tbi;
+
+    protected void doGet(HttpServletRequest request,
+            HttpServletResponse response) throws ServletException,
+            IOException {
+        PrintWriter writer = response.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+        System.out.println("JPAResourceInjectionServlet::@PersistenceUnit " +
+        		"CDI EntityManagerFactory=" + emf1);
+
+        EntityManager em = emf1.createEntityManager();
+        System.out.println("JPAResourceInjectionServlet::createEM" +
+        		"EntityManager=" + em);
+        String testcase = request.getParameter("testcase");
+        System.out.println("testcase=" + testcase);
+
+        if (testcase != null) {
+            JpaTest jt = new JpaTest(em, utx);
+            boolean status = false;
+            if ("llinit".equals(testcase)) {
+                status = jt.lazyLoadingInit();
+            } else if ("llfind".equals(testcase)) {
+                status = jt.lazyLoadingByFind(1);
+            } else if ("llquery".equals(testcase)) {
+                status = jt.lazyLoadingByQuery("Carla");
+            } else if ("llinj".equals(testcase)){
+                status = ((tbi != null) && 
+                        (tbi.testDatasourceInjection().trim().length()==0));
+            }
+            if (status) {
+                msg += "";// pass
+            } else {
+                msg += (testcase + ":fail");
+            }
+        }
+
+        writer.write(msg + "\n");
+
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/util/JPAResourceProducer.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/util/JPAResourceProducer.java
new file mode 100644
index 0000000..cf38fab
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/util/JPAResourceProducer.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.util;
+
+import javax.enterprise.inject.Produces;
+import javax.inject.Singleton;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceUnit;
+
+import test.beans.artifacts.TestDatabase;
+
+@Singleton
+public class JPAResourceProducer {
+    @Produces @PersistenceUnit(unitName="pu1")
+    @TestDatabase 
+    EntityManagerFactory customerDatabasePersistenceUnit;
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/util/JpaTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/util/JpaTest.java
new file mode 100644
index 0000000..3d47448
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/jpa-resource-injection/servlet/test/util/JpaTest.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.util;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Query;
+import javax.transaction.UserTransaction;
+
+import test.entity.Department;
+import test.entity.Employee;
+
+public class JpaTest {
+
+    private EntityManager em;
+    private UserTransaction utx;
+
+    private static Department deptRef[] = new Department[2];
+    private static Employee empRef[] = new Employee[5];
+
+    public JpaTest() {
+    }
+
+    public JpaTest(EntityManager em, UserTransaction utx) {
+        this.em = em;
+        this.utx = utx;
+    }
+
+    public boolean lazyLoadingInit() {
+        boolean status = false;
+        System.out.println("-----lazeLoadingInit()---------");
+        try {
+            deptRef[0] = new Department(1, "Engineering");
+            deptRef[1] = new Department(2, "Marketing");
+            utx.begin();
+            em.joinTransaction();
+            for (int i = 0; i < 2; i++) {
+                em.persist(deptRef[i]);
+            }
+            utx.commit();
+
+            empRef[0] = new Employee(1, "Alan", "Frechette", deptRef[0]);
+            empRef[1] = new Employee(2, "Arthur", "Wesley", deptRef[0]);
+            empRef[2] = new Employee(3, "Abe", "White", deptRef[0]);
+            empRef[3] = new Employee(4, "Paul", "Hinz", deptRef[1]);
+            empRef[4] = new Employee(5, "Carla", "Calrson", deptRef[1]);
+            utx.begin();
+            em.joinTransaction();
+            for (int i = 0; i < 5; i++) {
+                em.persist(empRef[i]);
+            }
+            utx.commit();
+            status = true;
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+    public boolean lazyLoadingByFind(int employeeID) {
+
+        boolean status = true;
+        System.out.println("------------lazyLoadingAfterFind -----------");
+        System.out.println("employeeID = " + employeeID);
+        Employee emp = em.find(Employee.class, employeeID);
+
+        System.out.println("found: emp.id=" + emp.getId());
+
+        try {
+            // 1. get Department before loading
+            Department deptBL = emp.getDepartmentNoWeaving();
+            System.out.println("1. before loading: deptBL=" + deptBL);
+            String deptNameBL = null;
+            if (deptBL != null) {
+                deptNameBL = deptBL.getName();
+                System.out.println("deptNameBL=" + deptNameBL);
+            }
+            // assert deptBL == null;
+            if (deptBL != null) {
+                status = false;
+            }
+
+            // 2. loading
+            String deptName = emp.getDepartment().getName();
+            System.out.println("2. loading, deptName = " + deptName);
+
+            // 3. get Department after loading
+            Department deptAL = emp.getDepartmentNoWeaving();
+            System.out.println("3. after loading: deptAL=" + deptAL);
+            String deptNameAL = deptAL.getName();
+            System.out.println("deptNameAL=" + deptNameAL);
+            // assert deptAL != null
+            // assert deptAL.getName == deptName;
+            if (deptAL == null || deptNameAL != deptName) {
+                status = false;
+            }
+        } catch (Exception ex) {
+            status = false;
+            ex.printStackTrace();
+        }
+
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+    public boolean lazyLoadingByQuery(String fName) {
+
+        boolean status = true;
+        System.out.println("------------lazyLoadingByQuery -----------");
+        System.out.println("fName = " + fName);
+        Query query = em.createQuery(
+                "SELECT e FROM Employee e WHERE e.firstName like :firstName")
+                .setParameter("firstName", fName);
+        ;
+        Employee emp = (Employee) query.getSingleResult();
+
+        System.out.println("queried: emp.firstName=" + emp.getFirstName());
+
+        try {
+            // 1. get Department before loading
+            Department deptBL = emp.getDepartmentNoWeaving();
+            System.out.println("1. before loading: deptBL=" + deptBL);
+            String deptNameBL = null;
+            if (deptBL != null) {
+                deptNameBL = deptBL.getName();
+                System.out.println("deptNameBL=" + deptNameBL);
+            }
+            // assert deptBL == null;
+            if (deptBL != null) {
+                status = false;
+            }
+
+            // 2. loading
+            String deptName = emp.getDepartment().getName();
+            System.out.println("2. loading, deptName = " + deptName);
+
+            // 3. get Department after loading
+            Department deptAL = emp.getDepartmentNoWeaving();
+            System.out.println("3. after loading: deptAL=" + deptAL);
+            String deptNameAL = deptAL.getName();
+            System.out.println("deptNameAL=" + deptNameAL);
+            // assert deptAL != null
+            // assert deptAL.getName == deptName;
+            if (deptAL == null || deptNameAL != deptName) {
+                status = false;
+            }
+        } catch (Exception ex) {
+            status = false;
+            ex.printStackTrace();
+        }
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/README
new file mode 100644
index 0000000..098e4ae
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/README
@@ -0,0 +1,5 @@
+Test
+- Injection of a no-interface bean in a request-scoped model via @Inject 
+and @EJB and invocation of methods defined in the EJB class and 
+in a super-class of the EJB
+- glassfish issue 13040
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/build.properties
new file mode 100644
index 0000000..5b8ba11
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-no-interface-ejb"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/build.xml
new file mode 100644
index 0000000..a0e6a9d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/build.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy" />
+
+	<target name="clean" depends="init-common">
+		<antcall target="clean-common" />
+		<delete>
+			<fileset dir="." includes="*.class" />
+			<fileset dir="client/test/client" includes="*.class" />
+		</delete>
+	</target>
+
+	<target name="compile" depends="clean">
+		<antcall target="compile-common">
+			<param name="src" value="servlet" />
+		</antcall>
+	</target>
+
+	<target name="build" depends="compile">
+		<property name="hasWebclient" value="yes" />
+		<antcall target="webclient-war-common">
+			<param name="hasWebclient" value="yes" />
+			<param name="webclient.war.classes" value="**/*.class" />
+		</antcall>
+
+		<javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar" includes="test/client/WebTest.java" />
+
+	</target>
+
+	<target name="build-publish-war" depends="build, publish-war-common" />
+
+	<target name="deploy" depends="init-common">
+		<antcall target="deploy-war-common" />
+	</target>
+
+	<target name="run" depends="init-common">
+		<java classname="test.client.WebTest">
+			<arg value="${http.host}" />
+			<arg value="${http.port}" />
+			<arg value="${contextroot}" />
+			<classpath>
+				<pathelement location="${env.APS_HOME}/lib/reportbuilder.jar" />
+				<pathelement location="client" />
+			</classpath>
+		</java>
+	</target>
+
+	<target name="undeploy" depends="init-common">
+		<antcall target="undeploy-war-common" />
+	</target>
+
+	<target name="usage">
+		<antcall target="usage-common" />
+	</target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/client/test/client/WebTest.java
new file mode 100644
index 0000000..e775694
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/client/test/client/WebTest.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+    private static final String TEST_NAME = "injection-of-no-interface-bean-view-and-EJB-with-local-view";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for Java EE resource injection");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: "
+                        + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/descriptor/beans.xml
new file mode 100644
index 0000000..1d355f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/descriptor/beans.xml
@@ -0,0 +1,25 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/descriptor/persistence.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/descriptor/persistence.xml
new file mode 100644
index 0000000..82f2d7b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/descriptor/persistence.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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
+
+-->
+
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
+  <persistence-unit name="pu1" transaction-type="JTA">
+    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+    <jta-data-source>jdbc/__default</jta-data-source>
+    <non-jta-data-source>jdbc/__default</non-jta-data-source>
+    <class>myapp.Department</class>
+    <class>myapp.Employee</class>
+    <properties>
+       <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
+       <property name="eclipselink.logging.level" value="INFO"/>
+    </properties>
+  </persistence-unit>
+</persistence>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/TestBeanInterface.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/TestBeanInterface.java
new file mode 100644
index 0000000..cf49083
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/TestBeanInterface.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public interface TestBeanInterface {
+    public String runTests();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/artifacts/InjectViaAtEJB.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/artifacts/InjectViaAtEJB.java
new file mode 100644
index 0000000..594448d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/artifacts/InjectViaAtEJB.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface InjectViaAtEJB {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/artifacts/InjectViaAtInject.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/artifacts/InjectViaAtInject.java
new file mode 100644
index 0000000..8e11c88
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/artifacts/InjectViaAtInject.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface InjectViaAtInject {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/artifacts/LocalEJB.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/artifacts/LocalEJB.java
new file mode 100644
index 0000000..04bb97c
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/artifacts/LocalEJB.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface LocalEJB {
+}
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/artifacts/NoInterfaceBeanView.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/artifacts/NoInterfaceBeanView.java
new file mode 100644
index 0000000..6e95330
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/artifacts/NoInterfaceBeanView.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface NoInterfaceBeanView {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/nonmock/local/TestBeanSuper.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/nonmock/local/TestBeanSuper.java
new file mode 100644
index 0000000..a95c06e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/nonmock/local/TestBeanSuper.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock.local;
+
+import test.beans.TestBeanInterface;
+import test.ejb.local.TestInterface;
+import test.ejb.local.TestLocalEJB;
+
+abstract class TestBeanSuper implements TestBeanInterface {
+
+    abstract TestInterface getTestEJB();
+
+    @Override
+    public String runTests() {
+        String s = "";
+        if (!getTestEJB().m1DefinedInInterface())
+            s += "Cannot call method defined in the local EJB's interface";
+        return s;
+
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/nonmock/local/TestEJBInjectionViaAtEJB.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/nonmock/local/TestEJBInjectionViaAtEJB.java
new file mode 100644
index 0000000..edadb04
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/nonmock/local/TestEJBInjectionViaAtEJB.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock.local;
+
+import javax.ejb.EJB;
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Named;
+
+import test.beans.artifacts.InjectViaAtEJB;
+import test.beans.artifacts.LocalEJB;
+import test.ejb.local.TestInterface;
+
+
+
+@RequestScoped
+@InjectViaAtEJB
+@LocalEJB
+
+public class TestEJBInjectionViaAtEJB extends TestBeanSuper{
+    @EJB TestInterface tnie;
+
+    @Override
+    TestInterface getTestEJB() {
+        return tnie;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/nonmock/local/TestEJBInjectionViaInject.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/nonmock/local/TestEJBInjectionViaInject.java
new file mode 100644
index 0000000..c4dec72
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/nonmock/local/TestEJBInjectionViaInject.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock.local;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import test.beans.artifacts.InjectViaAtInject;
+import test.beans.artifacts.LocalEJB;
+import test.ejb.local.TestInterface;
+
+
+@RequestScoped
+@InjectViaAtInject
+@LocalEJB
+
+public class TestEJBInjectionViaInject extends TestBeanSuper {
+    @Inject TestInterface tnie;
+
+    @Override
+    TestInterface getTestEJB() {
+        return tnie;
+    }
+
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/nonmock/nointerfacebeanview/TestBeanSuper.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/nonmock/nointerfacebeanview/TestBeanSuper.java
new file mode 100644
index 0000000..5a38f90
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/nonmock/nointerfacebeanview/TestBeanSuper.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock.nointerfacebeanview;
+
+import test.beans.TestBeanInterface;
+import test.ejb.nointerfacebeanview.TestNoInterfaceEJB;
+
+abstract class TestBeanSuper implements TestBeanInterface {
+    
+    abstract TestNoInterfaceEJB getTestEJB();
+
+    @Override
+    public String runTests() {
+        String s = "";
+        if (!getTestEJB().m2DefinedInSuperClass())
+            s += "Cannot call method defined in super class";
+        if (!getTestEJB().m3DefinedInEJB())
+            s += "Cannot call method defined in EJB";
+        return s;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/nonmock/nointerfacebeanview/TestEJBInjectionViaAtEJB.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/nonmock/nointerfacebeanview/TestEJBInjectionViaAtEJB.java
new file mode 100644
index 0000000..a6eaacd
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/nonmock/nointerfacebeanview/TestEJBInjectionViaAtEJB.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock.nointerfacebeanview;
+
+import javax.ejb.EJB;
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Named;
+
+import test.beans.artifacts.InjectViaAtEJB;
+import test.beans.artifacts.NoInterfaceBeanView;
+import test.ejb.nointerfacebeanview.TestNoInterfaceEJB;
+
+
+@RequestScoped
+@InjectViaAtEJB
+@NoInterfaceBeanView
+
+public class TestEJBInjectionViaAtEJB extends TestBeanSuper{
+    @EJB TestNoInterfaceEJB tnie;
+
+    public TestEJBInjectionViaAtEJB() {
+        new Throwable().printStackTrace();
+    }
+    @Override
+    TestNoInterfaceEJB getTestEJB() {
+        return tnie;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/nonmock/nointerfacebeanview/TestEJBInjectionViaInject.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/nonmock/nointerfacebeanview/TestEJBInjectionViaInject.java
new file mode 100644
index 0000000..62b1b11
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/beans/nonmock/nointerfacebeanview/TestEJBInjectionViaInject.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock.nointerfacebeanview;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import test.beans.artifacts.InjectViaAtInject;
+import test.beans.artifacts.NoInterfaceBeanView;
+import test.ejb.nointerfacebeanview.TestNoInterfaceEJB;
+
+
+@RequestScoped
+@InjectViaAtInject
+@NoInterfaceBeanView
+
+public class TestEJBInjectionViaInject extends TestBeanSuper {
+    @Inject TestNoInterfaceEJB tnie;
+
+    @Override
+    TestNoInterfaceEJB getTestEJB() {
+        return tnie;
+    }
+
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/ejb/local/TestInterface.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/ejb/local/TestInterface.java
new file mode 100644
index 0000000..fefb9ad
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/ejb/local/TestInterface.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.local;
+
+public interface TestInterface {
+    public boolean m1DefinedInInterface();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/ejb/local/TestLocalEJB.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/ejb/local/TestLocalEJB.java
new file mode 100644
index 0000000..18054b1
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/ejb/local/TestLocalEJB.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.local;
+
+import javax.ejb.Local;
+import javax.ejb.Stateless;
+
+@Stateless
+@Local(TestInterface.class)
+public class TestLocalEJB extends TestSuperClass implements TestInterface {
+    public boolean m3DefinedInEJB(){
+        System.out.println("local ejb: m3");
+        return true;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/ejb/local/TestSuperClass.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/ejb/local/TestSuperClass.java
new file mode 100644
index 0000000..53ad721
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/ejb/local/TestSuperClass.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.local;
+
+import javax.enterprise.inject.Alternative;
+
+ 
+//marked as Alternative, otherwise there would
+//an ambiguous definition for TestLocalInterface between this
+//super class and the TestLocalEJB
+public @Alternative class TestSuperClass implements TestInterface{
+
+    @Override
+    public boolean m1DefinedInInterface() {
+        System.out.println("local bean: m1");
+        return true;
+    }
+    
+    public boolean m2DefinedInSuperClass(){
+        System.out.println("local: m2");
+        return true;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/ejb/nointerfacebeanview/TestInterface.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/ejb/nointerfacebeanview/TestInterface.java
new file mode 100644
index 0000000..dcb7186
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/ejb/nointerfacebeanview/TestInterface.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.nointerfacebeanview;
+
+public interface TestInterface {
+    public boolean m1DefinedInInterface();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/ejb/nointerfacebeanview/TestNoInterfaceEJB.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/ejb/nointerfacebeanview/TestNoInterfaceEJB.java
new file mode 100644
index 0000000..ec60e4d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/ejb/nointerfacebeanview/TestNoInterfaceEJB.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.nointerfacebeanview;
+
+import javax.ejb.Stateless;
+
+
+@Stateless
+public class TestNoInterfaceEJB {
+  public boolean m1DefinedInInterface() {
+    System.out.println("no interface bean: m1");
+    return true;
+  }
+
+  public boolean m2DefinedInSuperClass(){
+    System.out.println("no interface bean: m2");
+    return true;
+  }
+    public boolean m3DefinedInEJB() {
+        System.out.println("no interface ejb: m3");
+        return true;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/ejb/nointerfacebeanview/TestSuperClass.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/ejb/nointerfacebeanview/TestSuperClass.java
new file mode 100644
index 0000000..b4fbe8e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/ejb/nointerfacebeanview/TestSuperClass.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.nointerfacebeanview;
+
+import javax.enterprise.inject.Alternative;
+
+ 
+public class TestSuperClass implements TestInterface{
+
+    @Override
+    public boolean m1DefinedInInterface() {
+        System.out.println("no interface bean: m1");
+        return true;
+    }
+    
+    public boolean m2DefinedInSuperClass(){
+        System.out.println("no interface bean: m2");
+        return true;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/servlet/FooBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/servlet/FooBean.java
new file mode 100644
index 0000000..1e102af
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/servlet/FooBean.java
@@ -0,0 +1,36 @@
+/*
+ * 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.servlet;
+
+import javax.inject.Inject;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.InjectViaAtEJB;
+import test.beans.artifacts.NoInterfaceBeanView;
+
+public class FooBean {
+
+    @Inject
+    @InjectViaAtEJB
+    @NoInterfaceBeanView
+    TestBeanInterface testBeanEJB;
+    
+    public TestBeanInterface getBean(){
+        return testBeanEJB;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/servlet/NoInterfaceEJBTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/servlet/NoInterfaceEJBTestServlet.java
new file mode 100644
index 0000000..d878ef3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/no-interface-ejb/servlet/test/servlet/NoInterfaceEJBTestServlet.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.InjectViaAtEJB;
+import test.beans.artifacts.InjectViaAtInject;
+import test.beans.artifacts.LocalEJB;
+import test.beans.artifacts.NoInterfaceBeanView;
+import test.ejb.nointerfacebeanview.TestInterface;
+import test.ejb.nointerfacebeanview.TestSuperClass;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class NoInterfaceEJBTestServlet extends HttpServlet {
+
+//    @Inject
+//    @InjectViaAtInject
+//    @NoInterfaceBeanView
+//    TestBeanInterface testBeanInject;
+
+
+    @Inject
+    FooBean fb;
+//    @Inject
+//    @InjectViaAtInject
+//    @LocalEJB
+//    TestBeanInterface testLocalBeanInject;
+
+//    @Inject
+//    @InjectViaAtEJB
+//    @LocalEJB
+//    TestBeanInterface testLocalBeanEJB;
+    
+    @Inject
+    TestInterface ti;
+    
+    @Inject
+    TestSuperClass ti1;
+    
+    protected void doGet(HttpServletRequest request,
+            HttpServletResponse response) throws ServletException,
+            IOException {
+        PrintWriter writer = response.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        
+        String msg = "";
+        //test EJB injection via @EJB
+        String m = fb.getBean().runTests();
+        if (!m.equals(""))
+            msg += "Invocation on no-interface EJB -- obtained through @EJB -- failed. Failed tests" + m;
+        
+        //test EJB injection via @Inject
+//        m = testBeanInject.runTests();
+//        if (!m.equals(""))
+//            msg += "Invocation on no-interface EJB -- obtained through @Inject -- failed. Failed tests" + m;
+
+        //test No-Interface EJB injection via @Inject of an interface the 
+        //no-interface bean is implementing
+        if (ti != null && !(ti.m1DefinedInInterface()))
+            msg += "Invocation on no-interface EJB -- obtained through @Inject -- (method defined in super interface) failed";
+        
+        //test No-Interface EJB injection via @Inject of an interface the 
+        //no-interface bean is implementing
+        if (ti1 != null && !(ti1.m2DefinedInSuperClass()))
+            msg += "Invocation on no-interface EJB -- obtained through @Inject -- (method defined in super class) failed";
+        
+        //test local EJB injection via @EJB
+//        m = testLocalBeanEJB.runTests();
+//        if (!m.equals(""))
+//            msg += "Invocation on local EJB -- obtained through @EJB -- failed. Failed tests" + m;
+        
+        //test EJB injection via @Inject
+//        m = testLocalBeanInject.runTests();
+//        if (!m.equals(""))
+//            msg += "Invocation on local EJB -- obtained through @Inject -- failed. Failed tests" + m;
+
+        writer.write(msg + "\n");
+
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/README
new file mode 100644
index 0000000..431262e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/README
@@ -0,0 +1,3 @@
+Test
+- glassfish issue 11607
+- test to reproduce injection of SLSB into a session scoped bean
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/build.properties
new file mode 100644
index 0000000..5b8ba11
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-no-interface-ejb"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/build.xml
new file mode 100644
index 0000000..a0e6a9d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/build.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy" />
+
+	<target name="clean" depends="init-common">
+		<antcall target="clean-common" />
+		<delete>
+			<fileset dir="." includes="*.class" />
+			<fileset dir="client/test/client" includes="*.class" />
+		</delete>
+	</target>
+
+	<target name="compile" depends="clean">
+		<antcall target="compile-common">
+			<param name="src" value="servlet" />
+		</antcall>
+	</target>
+
+	<target name="build" depends="compile">
+		<property name="hasWebclient" value="yes" />
+		<antcall target="webclient-war-common">
+			<param name="hasWebclient" value="yes" />
+			<param name="webclient.war.classes" value="**/*.class" />
+		</antcall>
+
+		<javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar" includes="test/client/WebTest.java" />
+
+	</target>
+
+	<target name="build-publish-war" depends="build, publish-war-common" />
+
+	<target name="deploy" depends="init-common">
+		<antcall target="deploy-war-common" />
+	</target>
+
+	<target name="run" depends="init-common">
+		<java classname="test.client.WebTest">
+			<arg value="${http.host}" />
+			<arg value="${http.port}" />
+			<arg value="${contextroot}" />
+			<classpath>
+				<pathelement location="${env.APS_HOME}/lib/reportbuilder.jar" />
+				<pathelement location="client" />
+			</classpath>
+		</java>
+	</target>
+
+	<target name="undeploy" depends="init-common">
+		<antcall target="undeploy-war-common" />
+	</target>
+
+	<target name="usage">
+		<antcall target="usage-common" />
+	</target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/client/test/client/WebTest.java
new file mode 100644
index 0000000..05b4076
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/client/test/client/WebTest.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+    private static final String TEST_NAME = "slsb-injection-into-sessionscopedbean";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for Java EE resource injection");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: "
+                        + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/descriptor/beans.xml
new file mode 100644
index 0000000..1d355f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/descriptor/beans.xml
@@ -0,0 +1,25 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/descriptor/persistence.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/descriptor/persistence.xml
new file mode 100644
index 0000000..82f2d7b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/descriptor/persistence.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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
+
+-->
+
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
+  <persistence-unit name="pu1" transaction-type="JTA">
+    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+    <jta-data-source>jdbc/__default</jta-data-source>
+    <non-jta-data-source>jdbc/__default</non-jta-data-source>
+    <class>myapp.Department</class>
+    <class>myapp.Employee</class>
+    <properties>
+       <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
+       <property name="eclipselink.logging.level" value="INFO"/>
+    </properties>
+  </persistence-unit>
+</persistence>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/TestBeanInterface.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/TestBeanInterface.java
new file mode 100644
index 0000000..cf49083
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/TestBeanInterface.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public interface TestBeanInterface {
+    public String runTests();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/TestSessionScopedBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/TestSessionScopedBean.java
new file mode 100644
index 0000000..a9fc170
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/TestSessionScopedBean.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import java.io.Serializable;
+import javax.enterprise.context.SessionScoped;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import test.ejb.slsb.TestSLSB;
+
+@Named
+@SessionScoped
+public class TestSessionScopedBean implements Serializable{
+
+    @Inject
+    TestSLSB statelessSessionBean;
+
+    public TestSessionScopedBean() {
+    }
+    
+    public boolean testSLSBAccess(){
+        if (statelessSessionBean != null)
+            return statelessSessionBean.statelessMethod1();
+        else return false;
+    }
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/artifacts/InjectViaAtEJB.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/artifacts/InjectViaAtEJB.java
new file mode 100644
index 0000000..594448d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/artifacts/InjectViaAtEJB.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface InjectViaAtEJB {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/artifacts/InjectViaAtInject.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/artifacts/InjectViaAtInject.java
new file mode 100644
index 0000000..8e11c88
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/artifacts/InjectViaAtInject.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface InjectViaAtInject {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/artifacts/LocalEJB.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/artifacts/LocalEJB.java
new file mode 100644
index 0000000..04bb97c
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/artifacts/LocalEJB.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface LocalEJB {
+}
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/artifacts/NoInterfaceBeanView.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/artifacts/NoInterfaceBeanView.java
new file mode 100644
index 0000000..6e95330
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/artifacts/NoInterfaceBeanView.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface NoInterfaceBeanView {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/nonmock/local/TestBeanSuper.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/nonmock/local/TestBeanSuper.java
new file mode 100644
index 0000000..a95c06e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/nonmock/local/TestBeanSuper.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock.local;
+
+import test.beans.TestBeanInterface;
+import test.ejb.local.TestInterface;
+import test.ejb.local.TestLocalEJB;
+
+abstract class TestBeanSuper implements TestBeanInterface {
+
+    abstract TestInterface getTestEJB();
+
+    @Override
+    public String runTests() {
+        String s = "";
+        if (!getTestEJB().m1DefinedInInterface())
+            s += "Cannot call method defined in the local EJB's interface";
+        return s;
+
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/nonmock/local/TestEJBInjectionViaAtEJB.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/nonmock/local/TestEJBInjectionViaAtEJB.java
new file mode 100644
index 0000000..edadb04
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/nonmock/local/TestEJBInjectionViaAtEJB.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock.local;
+
+import javax.ejb.EJB;
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Named;
+
+import test.beans.artifacts.InjectViaAtEJB;
+import test.beans.artifacts.LocalEJB;
+import test.ejb.local.TestInterface;
+
+
+
+@RequestScoped
+@InjectViaAtEJB
+@LocalEJB
+
+public class TestEJBInjectionViaAtEJB extends TestBeanSuper{
+    @EJB TestInterface tnie;
+
+    @Override
+    TestInterface getTestEJB() {
+        return tnie;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/nonmock/local/TestEJBInjectionViaInject.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/nonmock/local/TestEJBInjectionViaInject.java
new file mode 100644
index 0000000..c4dec72
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/nonmock/local/TestEJBInjectionViaInject.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock.local;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import test.beans.artifacts.InjectViaAtInject;
+import test.beans.artifacts.LocalEJB;
+import test.ejb.local.TestInterface;
+
+
+@RequestScoped
+@InjectViaAtInject
+@LocalEJB
+
+public class TestEJBInjectionViaInject extends TestBeanSuper {
+    @Inject TestInterface tnie;
+
+    @Override
+    TestInterface getTestEJB() {
+        return tnie;
+    }
+
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/nonmock/nointerfacebeanview/TestBeanSuper.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/nonmock/nointerfacebeanview/TestBeanSuper.java
new file mode 100644
index 0000000..5a38f90
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/nonmock/nointerfacebeanview/TestBeanSuper.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock.nointerfacebeanview;
+
+import test.beans.TestBeanInterface;
+import test.ejb.nointerfacebeanview.TestNoInterfaceEJB;
+
+abstract class TestBeanSuper implements TestBeanInterface {
+    
+    abstract TestNoInterfaceEJB getTestEJB();
+
+    @Override
+    public String runTests() {
+        String s = "";
+        if (!getTestEJB().m2DefinedInSuperClass())
+            s += "Cannot call method defined in super class";
+        if (!getTestEJB().m3DefinedInEJB())
+            s += "Cannot call method defined in EJB";
+        return s;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/nonmock/nointerfacebeanview/TestEJBInjectionViaAtEJB.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/nonmock/nointerfacebeanview/TestEJBInjectionViaAtEJB.java
new file mode 100644
index 0000000..ccd055e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/nonmock/nointerfacebeanview/TestEJBInjectionViaAtEJB.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock.nointerfacebeanview;
+
+import javax.ejb.EJB;
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Named;
+
+import test.beans.artifacts.InjectViaAtEJB;
+import test.beans.artifacts.NoInterfaceBeanView;
+import test.ejb.nointerfacebeanview.TestNoInterfaceEJB;
+
+
+@RequestScoped
+@InjectViaAtEJB
+@NoInterfaceBeanView
+
+public class TestEJBInjectionViaAtEJB extends TestBeanSuper{
+    @EJB TestNoInterfaceEJB tnie;
+
+    @Override
+    TestNoInterfaceEJB getTestEJB() {
+        return tnie;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/nonmock/nointerfacebeanview/TestEJBInjectionViaInject.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/nonmock/nointerfacebeanview/TestEJBInjectionViaInject.java
new file mode 100644
index 0000000..62b1b11
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/beans/nonmock/nointerfacebeanview/TestEJBInjectionViaInject.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock.nointerfacebeanview;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import test.beans.artifacts.InjectViaAtInject;
+import test.beans.artifacts.NoInterfaceBeanView;
+import test.ejb.nointerfacebeanview.TestNoInterfaceEJB;
+
+
+@RequestScoped
+@InjectViaAtInject
+@NoInterfaceBeanView
+
+public class TestEJBInjectionViaInject extends TestBeanSuper {
+    @Inject TestNoInterfaceEJB tnie;
+
+    @Override
+    TestNoInterfaceEJB getTestEJB() {
+        return tnie;
+    }
+
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/ejb/local/TestInterface.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/ejb/local/TestInterface.java
new file mode 100644
index 0000000..fefb9ad
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/ejb/local/TestInterface.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.local;
+
+public interface TestInterface {
+    public boolean m1DefinedInInterface();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/ejb/local/TestLocalEJB.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/ejb/local/TestLocalEJB.java
new file mode 100644
index 0000000..ce06ab6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/ejb/local/TestLocalEJB.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.local;
+
+import javax.ejb.Local;
+import javax.ejb.Stateless;
+
+@Stateless
+@Local(TestInterface.class)
+public class TestLocalEJB extends TestSuperClass{
+    public boolean m3DefinedInEJB(){
+        System.out.println("local ejb: m3");
+        return true;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/ejb/local/TestSuperClass.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/ejb/local/TestSuperClass.java
new file mode 100644
index 0000000..53ad721
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/ejb/local/TestSuperClass.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.local;
+
+import javax.enterprise.inject.Alternative;
+
+ 
+//marked as Alternative, otherwise there would
+//an ambiguous definition for TestLocalInterface between this
+//super class and the TestLocalEJB
+public @Alternative class TestSuperClass implements TestInterface{
+
+    @Override
+    public boolean m1DefinedInInterface() {
+        System.out.println("local bean: m1");
+        return true;
+    }
+    
+    public boolean m2DefinedInSuperClass(){
+        System.out.println("local: m2");
+        return true;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/ejb/nointerfacebeanview/TestInterface.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/ejb/nointerfacebeanview/TestInterface.java
new file mode 100644
index 0000000..dcb7186
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/ejb/nointerfacebeanview/TestInterface.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.nointerfacebeanview;
+
+public interface TestInterface {
+    public boolean m1DefinedInInterface();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/ejb/nointerfacebeanview/TestNoInterfaceEJB.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/ejb/nointerfacebeanview/TestNoInterfaceEJB.java
new file mode 100644
index 0000000..64ebd63
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/ejb/nointerfacebeanview/TestNoInterfaceEJB.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.nointerfacebeanview;
+
+import javax.ejb.Stateless;
+
+
+@Stateless
+public class TestNoInterfaceEJB  {
+  public boolean m1DefinedInInterface() {
+    System.out.println("no interface bean: m1");
+    return true;
+  }
+
+  public boolean m2DefinedInSuperClass(){
+    System.out.println("no interface bean: m2");
+    return true;
+  }
+    public boolean m3DefinedInEJB() {
+        System.out.println("no interface ejb: m3");
+        return true;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/ejb/nointerfacebeanview/TestSuperClass.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/ejb/nointerfacebeanview/TestSuperClass.java
new file mode 100644
index 0000000..ef5e220
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/ejb/nointerfacebeanview/TestSuperClass.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.nointerfacebeanview;
+
+import javax.enterprise.inject.Alternative;
+
+ 
+//marked as Alternative, otherwise there would
+//an ambiguous definition for TestLocalInterface between this
+//super class and the TestLocalEJB
+public class TestSuperClass implements TestInterface{
+
+    @Override
+    public boolean m1DefinedInInterface() {
+        System.out.println("no interface bean: m1");
+        return true;
+    }
+    
+    public boolean m2DefinedInSuperClass(){
+        System.out.println("no interface bean: m2");
+        return true;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/ejb/slsb/TestSLSB.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/ejb/slsb/TestSLSB.java
new file mode 100644
index 0000000..96b85d8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/ejb/slsb/TestSLSB.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.slsb;
+import javax.ejb.Stateless;
+import javax.enterprise.context.Dependent;
+import javax.inject.Named;
+
+@Named
+@Stateless
+@Dependent
+public class TestSLSB {
+
+    public TestSLSB() {
+    }
+    
+    public boolean statelessMethod1(){
+        return true;
+    }
+ 
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/servlet/SLSBInjectionIntoSessionScopedBeanTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/servlet/SLSBInjectionIntoSessionScopedBeanTestServlet.java
new file mode 100644
index 0000000..c5f0232
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-component-resources/slsb-injection-into-sessionscoped/servlet/test/servlet/SLSBInjectionIntoSessionScopedBeanTestServlet.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.TestBeanInterface;
+import test.beans.TestSessionScopedBean;
+import test.beans.artifacts.InjectViaAtEJB;
+import test.beans.artifacts.InjectViaAtInject;
+import test.beans.artifacts.LocalEJB;
+import test.beans.artifacts.NoInterfaceBeanView;
+import test.ejb.nointerfacebeanview.TestInterface;
+import test.ejb.nointerfacebeanview.TestSuperClass;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class SLSBInjectionIntoSessionScopedBeanTestServlet extends HttpServlet {
+
+    @Inject
+    @InjectViaAtInject
+    @NoInterfaceBeanView
+    TestBeanInterface testBeanInject;
+
+    @Inject
+    @InjectViaAtEJB
+    @NoInterfaceBeanView
+    TestBeanInterface testBeanEJB;
+
+    @Inject
+    @InjectViaAtInject
+    @LocalEJB
+    TestBeanInterface testLocalBeanInject;
+
+    @Inject
+    @InjectViaAtEJB
+    @LocalEJB
+    TestBeanInterface testLocalBeanEJB;
+    
+    @Inject
+    TestInterface ti;
+    
+    @Inject
+    TestSuperClass ti1;
+    
+    @Inject
+    TestSessionScopedBean tssb;
+    
+    protected void doGet(HttpServletRequest request,
+            HttpServletResponse response) throws ServletException,
+            IOException {
+        PrintWriter writer = response.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        
+        String msg = "";
+        //test EJB injection via @EJB
+        String m = testBeanEJB.runTests();
+        if (!m.equals(""))
+            msg += "Invocation on no-interface EJB -- obtained through @EJB -- failed. Failed tests" + m;
+        
+        //test EJB injection via @Inject
+        m = testBeanInject.runTests();
+        if (!m.equals(""))
+            msg += "Invocation on no-interface EJB -- obtained through @Inject -- failed. Failed tests" + m;
+
+        //test No-Interface EJB injection via @Inject of an interface the 
+        //no-interface bean is implementing
+        if (ti != null && !(ti.m1DefinedInInterface()))
+            msg += "Invocation on no-interface EJB -- obtained through @Inject -- (method defined in super interface) failed";
+        
+        //test No-Interface EJB injection via @Inject of an interface the 
+        //no-interface bean is implementing
+        if (ti1 != null && !(ti1.m2DefinedInSuperClass()))
+            msg += "Invocation on no-interface EJB -- obtained through @Inject -- (method defined in super class) failed";
+        
+        //test local EJB injection via @EJB
+        m = testLocalBeanEJB.runTests();
+        if (!m.equals(""))
+            msg += "Invocation on local EJB -- obtained through @EJB -- failed. Failed tests" + m;
+        
+        //test EJB injection via @Inject
+        m = testLocalBeanInject.runTests();
+        if (!m.equals(""))
+            msg += "Invocation on local EJB -- obtained through @Inject -- failed. Failed tests" + m;
+        
+        if (!tssb.testSLSBAccess())
+            msg += "Stateless Session Bean into session scoped bean failed";
+
+        writer.write(msg + "\n");
+
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/README
new file mode 100644
index 0000000..6c8ebfb
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/README
@@ -0,0 +1,7 @@
+- A test to check if ManagedBean, CDI Dependent Bean and a common POJO in a library jar is available for EJBs of an EAR.
+[issue GLASSFISH-11888]
+- Structure
+EAR:
+ - EJB.jar (EJB impl)
+ - WAR (uses EJB api to access EJB)
+ - lib-dir (set as library-directory through application.xml and has EJB API and lib Beans)
\ No newline at end of file
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/build.properties
new file mode 100644
index 0000000..bc15b60
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/build.properties
@@ -0,0 +1,29 @@
+<!--
+
+    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="bean-in-lib-dir-used-by-ejb-in-ear"/>
+<property name="appname" value="${module}"/>         
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="se.client" value="com.acme.Client"/>
+<property name="app.type" value="application"/>
+<property name="sun-application.xml" value="descriptor/sun-application.xml"/>
+<property name="application.xml" value="descriptor/application.xml"/>
+<property name="persistence.xml" value="descriptor/persistence.xml"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
+<property name="contextroot" value="${module}"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/build.xml
new file mode 100644
index 0000000..bef55c1
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/build.xml
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="cdi-full-ear-App" default="usage" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+
+    <target name="all" depends="clean,build,deploy,run,undeploy" />
+
+	<target name="clean" depends="init-common">
+		<antcall target="clean-common" />
+	</target>
+
+	<target name="compile" depends="clean">
+		<!-- compile library -->
+		<antcall target="compile-common">
+			<param name="src" value="lib" />
+		</antcall>
+
+
+		<antcall target="compile-common">
+			<param name="src" value="ejb" />
+		</antcall>
+
+
+		<antcall target="compile-common">
+			<param name="src" value="war" />
+		</antcall>
+
+
+		<javac classpath="${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/lib/gf-client.jar:${build.classes.dir}:${env.APS_HOME}/lib/reporter.jar" srcdir="client" destdir="${build.classes.dir}" debug="on" failonerror="true">
+			<compilerarg line="-endorseddirs ${env.S1AS_HOME}/modules/endorsed" />
+		</javac>
+	</target>
+
+	<target name="build" depends="compile">
+		<mkdir dir="${assemble.dir}" />
+
+		<!-- build library jar -->
+		<mkdir dir="${build.classes.dir}/META-INF" />
+		<copy file="${persistence.xml}" tofile="${build.classes.dir}/META-INF/persistence.xml" failonerror="false" />
+		<copy file="${beans.xml}" tofile="${build.classes.dir}/META-INF/beans.xml" failonerror="false" />
+		<mkdir dir="${build.classes.dir}/lib-dir" />
+		<jar jarfile="${build.classes.dir}/lib-dir/lib.jar" basedir="${build.classes.dir}" includes="com/acme/util/*.class, com/acme/ejb/api/*.class">
+			<metainf dir="${build.classes.dir}/META-INF">
+				<include name="persistence.xml" />
+				<include name="beans.xml" />
+			</metainf>
+		</jar>
+		<copy file="${env.APS_HOME}/lib/reporter.jar" todir="${build.classes.dir}/lib-dir" />
+
+		<!-- build EJB jar -->
+		<antcall target="ejb-jar-common">
+			<param name="ejbjar.classes" value="com/acme/ejb/impl/*.class" />
+		</antcall>
+
+		<!-- delete EJB impl and lib classes as WAR should not have them -->
+		<delete includeEmptyDirs="true">
+			<fileset dir="${build.classes.dir}/com/acme/ejb/" />
+			<fileset dir="${build.classes.dir}/com/acme/util/" />
+		</delete>
+
+		<!-- create WAR -->
+		<antcall target="webclient-war-common">
+			<param name="hasWebclient" value="true" />
+		</antcall>
+
+		<!-- assemble EAR -->
+		<delete file="${assemble.dir}/${appname}.ear" />
+		<mkdir dir="${assemble.dir}" />
+		<mkdir dir="${build.classes.dir}/META-INF" />
+		<copy file="${sun-application.xml}" tofile="${build.classes.dir}/META-INF/sun-application.xml" failonerror="false" />
+		<copy file="${glassfish-resources-ear.xml}" tofile="${build.classes.dir}/META-INF/glassfish-resources.xml" failonerror="false" filtering="true" />
+		<ear earfile="${assemble.dir}/${appname}App.ear" appxml="${application.xml}">
+			<fileset dir="${assemble.dir}">
+				<include name="*.jar" />
+				<include name="*.war" />
+			</fileset>
+			<fileset dir="${build.classes.dir}">
+				<include name="META-INF/sun-application.xml" />
+				<include name="META-INF/glassfish-resources.xml" />
+			</fileset>
+			<fileset dir="${build.classes.dir}" includes="lib-dir/*" />
+		</ear>
+
+	</target>
+
+	<target name="deploy" depends="init-common">
+		<antcall target="deploy-common" />
+	</target>
+
+	<target name="run" depends="init-common">
+		<java fork="on" failonerror="true" classpath="${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/lib/gf-client.jar:${build.classes.dir}:${env.APS_HOME}/lib/reporter.jar" classname="${se.client}">
+			<arg line="${contextroot}" />
+			<arg line="${http.host}" />
+			<arg line="${http.port}" />
+		</java>
+	</target>
+
+	<target name="undeploy" depends="init-common">
+		<antcall target="undeploy-common" />
+	</target>
+
+	<target name="usage">
+		<antcall target="usage-common" />
+	</target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/client/com/acme/Client.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/client/com/acme/Client.java
new file mode 100644
index 0000000..c6bdce2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/client/com/acme/Client.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import javax.annotation.Resource;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+public class Client {
+
+    private static final String TEST_NAME = "bean-in-lib-dir-of-ear-used-by-ejb";
+
+    private static SimpleReporterAdapter stat = 
+                            new SimpleReporterAdapter("appserv-tests");
+
+    private static String appName;
+    private String host;
+    private String port;
+
+    @Resource(lookup = "java:app/env/value1")
+    private static Integer appLevelViaLookup;
+
+    public static void main(String args[]) {
+        appName = args[0];
+        stat.addDescription(appName);
+        Client client = new Client(args);
+        client.doTest();
+        stat.printSummary(appName + "ID");
+        System.out.println("appLevelViaLookup = '" + appLevelViaLookup + "'");
+    }
+
+    public Client(String[] args) {
+        host = args[1];
+        port = args[2];
+    }
+
+    public void doTest() {
+        try {
+            String url = "http://" + host + ":" + port + "/" + appName
+                    + "/HelloServlet";
+            System.out.println("invoking webclient servlet at " + 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.out.println("<response>:" + line);
+                if (line.trim().length() > 0) {
+                    stat.addStatus(TEST_NAME, stat.FAIL);
+                    return;
+                }
+            }
+            if (code != 200) {
+                stat.addStatus(TEST_NAME, stat.FAIL);
+                return;
+            }
+            stat.addStatus(TEST_NAME, stat.PASS);
+
+        } catch (Exception e) {
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            e.printStackTrace();
+        }
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/descriptor/application.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/descriptor/application.xml
new file mode 100644
index 0000000..f604093
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/descriptor/application.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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">
+  <display-name>bean-in-lib-dir-used-by-ejb-in-ear</display-name>
+  <module>
+    <ejb>bean-in-lib-dir-used-by-ejb-in-ear-ejb.jar</ejb>
+  </module>
+  <module>
+    <web>
+      <web-uri>bean-in-lib-dir-used-by-ejb-in-ear-web.war</web-uri>
+      <context-root>bean-in-lib-dir-used-by-ejb-in-ear</context-root>
+    </web>
+  </module>
+  <library-directory>lib-dir</library-directory>
+  <env-entry>
+     <env-entry-name>java:app/env/value1</env-entry-name>
+     <env-entry-type>java.lang.Integer</env-entry-type>
+     <env-entry-value>18338</env-entry-value>
+  </env-entry>
+  <env-entry>
+    <env-entry-name>java:app/env/myString</env-entry-name>
+    <env-entry-type>java.lang.String</env-entry-type>
+    <env-entry-value>myString</env-entry-value>
+  </env-entry>
+</application>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/descriptor/persistence.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/descriptor/persistence.xml
new file mode 100644
index 0000000..82f2d7b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/descriptor/persistence.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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
+
+-->
+
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
+  <persistence-unit name="pu1" transaction-type="JTA">
+    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+    <jta-data-source>jdbc/__default</jta-data-source>
+    <non-jta-data-source>jdbc/__default</non-jta-data-source>
+    <class>myapp.Department</class>
+    <class>myapp.Employee</class>
+    <properties>
+       <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
+       <property name="eclipselink.logging.level" value="INFO"/>
+    </properties>
+  </persistence-unit>
+</persistence>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/ejb/com/acme/ejb/api/Hello.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/ejb/com/acme/ejb/api/Hello.java
new file mode 100644
index 0000000..0151798
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/ejb/com/acme/ejb/api/Hello.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme.ejb.api;
+
+public interface Hello {
+
+    public String hello();
+
+    public static final String ALL_OK_STRING = "All Iz Well!\n";
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/ejb/com/acme/ejb/api/HelloRemote.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/ejb/com/acme/ejb/api/HelloRemote.java
new file mode 100644
index 0000000..0993e59
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/ejb/com/acme/ejb/api/HelloRemote.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme.ejb.api;
+
+import javax.ejb.Remote;
+
+@Remote
+public interface HelloRemote {
+
+    public String hello();
+
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/ejb/com/acme/ejb/impl/HelloSingleton.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/ejb/com/acme/ejb/impl/HelloSingleton.java
new file mode 100644
index 0000000..a8518c1
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/ejb/com/acme/ejb/impl/HelloSingleton.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme.ejb.impl;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.annotation.Resource;
+import javax.ejb.DependsOn;
+import javax.ejb.SessionContext;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+import javax.inject.Inject;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceUnit;
+
+import com.acme.ejb.api.Hello;
+import com.acme.util.TestDatabase;
+import com.acme.util.TestDependentBeanInLib;
+import com.acme.util.TestManagedBean;
+import com.acme.util.TestSessionScopedBeanInLib;
+import com.acme.util.UtilInLibDir;
+
+@Singleton
+@Startup
+@DependsOn("Singleton4")
+public class HelloSingleton implements Hello {
+
+    @Resource
+    SessionContext sessionCtx;
+
+    @PersistenceUnit(unitName = "pu1")
+    @TestDatabase
+    private EntityManagerFactory emf;
+    
+    @Inject
+    TestManagedBean tmb;
+    
+    @Inject
+    TestDependentBeanInLib tdbil;
+    
+    @Inject
+    TestSessionScopedBeanInLib tssil;
+    
+
+    @PostConstruct
+    private void init() {
+        System.out.println("HelloSingleton::init()");
+
+        String appName;
+        String moduleName;
+        appName = (String) sessionCtx.lookup("java:app/AppName");
+        moduleName = (String) sessionCtx.lookup("java:module/ModuleName");
+        System.out.println("AppName = " + appName);
+        System.out.println("ModuleName = " + moduleName);
+    }
+
+    public String hello() {
+        System.out.println("HelloSingleton::hello()");
+        String res = testEMF();
+        if (!res.equals("")) return res;
+        res = testInjectionOfBeansInLibDir();
+        if (!res.equals("")) return res;
+        UtilInLibDir uilb = new UtilInLibDir();
+        if (!(uilb.add(1, 2) == 3)) {
+            return "Can't use utility class in library directory";
+        }
+        return ALL_OK_STRING;
+    }
+
+    private String testInjectionOfBeansInLibDir() {
+        if (tmb == null) return "Injection of Managed Bean in lib into an EJB in that ear failed";
+        if (tdbil == null) return "Injection of Dependent Bean in lib into an EJB in that ear failed";
+        if (tssil == null) return "Injection of SessionScoped Bean in lib into an EJB in that ear failed";
+        return "";
+    }
+
+    private String testEMF() {
+        if (emf == null) return "EMF injection failed, is null in Singleton EJB";
+        if (emf.createEntityManager() == null) return "Usage of EMF failed in Singleton EJB";
+        return "";
+    }
+
+    @PreDestroy
+    private void destroy() {
+        System.out.println("HelloSingleton::destroy()");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/ejb/com/acme/ejb/impl/Singleton4.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/ejb/com/acme/ejb/impl/Singleton4.java
new file mode 100644
index 0000000..b3fd249
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/ejb/com/acme/ejb/impl/Singleton4.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme.ejb.impl;
+
+import javax.ejb.*;
+import javax.annotation.*;
+
+
+@Singleton
+public class Singleton4 {
+
+    @PostConstruct
+    public void init() {
+        System.out.println("In SingletonBean4::init()");
+    }
+    
+    @PreDestroy
+    public void destroy() {
+        System.out.println("In SingletonBean4::destroy()");
+    }
+
+
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/lib/com/acme/util/ResourcesProducer.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/lib/com/acme/util/ResourcesProducer.java
new file mode 100644
index 0000000..fdc079b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/lib/com/acme/util/ResourcesProducer.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme.util;
+
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+@Singleton
+public class ResourcesProducer {
+    @Produces
+    @PersistenceContext(unitName = "pu1")
+    @TestDatabase
+    EntityManager customerDatabasePersistenceUnit;
+    
+    @Inject
+    TestDependentBeanInLib foo;
+    
+    public boolean isInjectionSuccessful(){
+        return (foo != null);
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/lib/com/acme/util/TestDatabase.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/lib/com/acme/util/TestDatabase.java
new file mode 100644
index 0000000..db9e318
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/lib/com/acme/util/TestDatabase.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme.util;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target( { TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface TestDatabase {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/lib/com/acme/util/TestDependentBeanInLib.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/lib/com/acme/util/TestDependentBeanInLib.java
new file mode 100644
index 0000000..9596b22
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/lib/com/acme/util/TestDependentBeanInLib.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme.util;
+
+
+public class TestDependentBeanInLib {
+    public TestDependentBeanInLib() {
+        super();
+    }
+    
+    public String foo(){
+        return "foo!";
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/lib/com/acme/util/TestManagedBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/lib/com/acme/util/TestManagedBean.java
new file mode 100644
index 0000000..c650b91
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/lib/com/acme/util/TestManagedBean.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme.util;
+
+import javax.annotation.ManagedBean;
+import javax.inject.Inject;
+
+@ManagedBean
+public class TestManagedBean {
+    @Inject
+    private TestDependentBeanInLib tdb;
+
+    @Inject
+    private TestSessionScopedBeanInLib tssil;
+
+    public boolean isInjectionSuccessful(){
+        System.out.println("TestManagedBean:isInjectionSuccessful");
+        System.out.println("TestDependentBean:" + tdb);
+        System.out.println("TestSessionScopedBean:" + tssil);
+        return (tdb != null) && (tssil != null);
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/lib/com/acme/util/TestSessionScopedBeanInLib.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/lib/com/acme/util/TestSessionScopedBeanInLib.java
new file mode 100644
index 0000000..03f1071
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/lib/com/acme/util/TestSessionScopedBeanInLib.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme.util;
+
+import java.io.Serializable;
+
+import javax.enterprise.context.SessionScoped;
+
+@SessionScoped
+public class TestSessionScopedBeanInLib implements Serializable{
+    public void m1(){
+        System.out.println("TestSessionScopedBeanInLib:m1");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/lib/com/acme/util/UtilInLibDir.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/lib/com/acme/util/UtilInLibDir.java
new file mode 100644
index 0000000..18e76ab
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/lib/com/acme/util/UtilInLibDir.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme.util;
+
+public class UtilInLibDir {
+    
+    public int add(int i1, int i2) {
+        return i1+i2;
+    }
+    
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/manifest.mf b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/manifest.mf
new file mode 100644
index 0000000..328e8e5
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/manifest.mf
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+X-COMMENT: Main-Class will be added automatically by build
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/war/com/acme/servlet/HelloServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/war/com/acme/servlet/HelloServlet.java
new file mode 100644
index 0000000..7f9875a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/bean-in-lib-dir-used-by-ejb-in-ear/war/com/acme/servlet/HelloServlet.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme.servlet;
+
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.ejb.EJB;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceUnit;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import com.acme.ejb.api.Hello;
+import com.acme.util.TestDatabase;
+
+@WebServlet(urlPatterns = "/HelloServlet", loadOnStartup = 1)
+
+@SuppressWarnings("serial")
+public class HelloServlet extends HttpServlet {
+    String msg = "";
+    
+    @EJB(name = "java:module/m1", beanName = "HelloSingleton", beanInterface = Hello.class)
+    Hello h;
+    
+    @PersistenceUnit(unitName = "pu1")
+    @TestDatabase
+    private EntityManagerFactory emf;
+
+//    @Inject
+//    private ResourcesProducer rp;
+//    
+//    @Inject
+//    private TestDependentBeanInLib fb;
+    
+//    @Inject
+//    private TestManagedBean tmb;
+    
+//    @Inject
+//    private TestSessionScopedBeanInLib tssil;
+    
+    @Override
+    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+            throws ServletException, IOException {
+        System.out.println("In HelloServlet::doGet");
+        resp.setContentType("text/html");
+        PrintWriter out = resp.getWriter();
+        
+        checkForNull(emf, "Injection of EMF failed in Servlet");
+        //ensure EMF works!
+        emf.createEntityManager();
+        
+        //call Singleton EJB
+        String response = h.hello();
+        if(!response.equals(Hello.ALL_OK_STRING))
+            msg += "Invocation of Hello Singeton EJB failed:msg=" + response;
+        
+//        if (!rp.isInjectionSuccessful())
+//            msg += "Injection of a bean in lib directory into another " +
+//            		"Bean in lib directory failed";
+//        checkForNull(fb, "Injection of a bean that is placed in lib directory " +
+//        		"into a Servlet that is placed in a WAR failed");
+//        checkForNull(tmb, "Injection of a Managed bean that is placed in lib directory " +
+//        "into a Servlet that is placed in a WAR failed");
+//        checkForNull(tssil, "Injection of a session scoped Bean placed in lib dir into a " +
+//            "into a servlet in that ear failed");
+        
+//        if (!rp.isInjectionSuccessful())
+//            msg += "Injection of a bean in lib directory into another Bean " +
+//            		"in lib directory failed";
+        
+//        if (!tmb.isInjectionSuccessful())
+//            msg += "Injection of a Bean placed in lib dir into a " +
+//            		"ManagedBean placed in lib dir failed";
+        
+        out.println(msg);
+    }
+
+    protected void checkForNull(Object o, String errorMessage){
+        System.out.println("o=" + o);
+        if (o == null) msg += " " + errorMessage;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/build.xml
new file mode 100644
index 0000000..08b090d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/build.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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="javaee-int-test" default="usage" basedir=".">
+
+    <property name="javaee-int-target" value="all"/>
+
+    <target name="run-test">
+        <antcall target="javaee-int">
+        <param name="javaee-int-target" value="run-test"/>
+        </antcall>
+    </target>
+
+    <target name="all">
+        <antcall target="javaee-int">
+        <param name="javaee-int-target" value="all"/>
+        </antcall>
+    </target>
+
+    <target name="clean">
+        <antcall target="javaee-int">
+        <param name="javaee-int-target" value="clean"/>
+        </antcall>
+    </target>
+
+    <target name="build">
+        <antcall target="javaee-int">
+        <param name="javaee-int-target" value="build"/>
+        </antcall>
+    </target>
+
+    <target name="setup">
+        <antcall target="javaee-int">
+        <param name="javaee-int-target" value="setup"/>
+        </antcall>
+    </target>
+
+    <target name="deploy">
+        <antcall target="javaee-int">
+        <param name="javaee-int-target" value="deploy"/>
+        </antcall>
+    </target>
+
+    <target name="undeploy">
+        <antcall target="javaee-int">
+        <param name="javaee-int-target" value="undeploy"/>
+        </antcall>
+    </target>
+
+    <target name="unsetup">
+        <antcall target="javaee-int">
+        <param name="javaee-int-target" value="unsetup"/>
+        </antcall>
+    </target>
+
+    <target name="run">
+        <antcall target="javaee-int">
+        <param name="javaee-int-target" value="run"/>
+        </antcall>
+    </target>
+
+    <target name="javaee-int">
+        <record name="javaee-int.output" action="start" />
+            <ant dir="builtin-beans" target="${javaee-int-target}"/>
+            <ant dir="servlet-context-injection-cdi" target="${javaee-int-target}"/>
+<!-- Test issue: ManagedBean need not have a no-arg constructor in CDI runtimes
+            <ant dir="simple-managed-bean-interceptor-noargconstructor-missing" target="${javaee-int-target}"/>
+-->
+            <ant dir="simple-managed-bean-interceptor-nonnull-package" target="${javaee-int-target}"/>
+            <ant dir="no-interface-local-view-proxy-serializable" target="${javaee-int-target}"/>
+            <ant dir="normal-bean-injection-ear" target="${javaee-int-target}"/>
+            <ant dir="programmatic-lookup-ear" target="${javaee-int-target}"/>
+            <ant dir="bean-in-lib-dir-used-by-ejb-in-ear" target="${javaee-int-target}"/>
+            <ant dir="cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection" target="${javaee-int-target}"/>
+            <ant dir="cdi-servlet-3.0-annotation-with-web-inf-lib-ordering" target="${javaee-int-target}"/>
+            <ant dir="cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed" target="${javaee-int-target}"/>
+            <ant dir="cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative" target="${javaee-int-target}"/>
+            <ant dir="cdi-servlet-3.0-annotation-with-web-inf-lib" target="${javaee-int-target}"/>
+            <ant dir="embedded-resource-adapter-as-bean-archive" target="${javaee-int-target}"/>
+
+        <record name="javaee-int.output" action="stop" />
+    </target>
+
+    <target name="usage">
+	<echo> Usage:
+		ant all (Executes all the javaee-int tests)
+		ant clean (cleans all the javaee-int tests)
+		ant build (builds all the javaee-int tests)
+		ant setup (sets up all resources for javaee-int tests)
+		ant deploy (deploys all the javaee-int apps)
+		ant run (Executes all the javaee-int tests)
+		ant undeploy (undeploys all the  javaee-int apps)
+		ant unsetup (unsets all resources for javaee-int tests)
+	</echo>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/README
new file mode 100644
index 0000000..5b536cb
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/README
@@ -0,0 +1,7 @@
+Test
+- Java EE Integration 
+    - container provides the following built-in beans with the qualifier @Default
+        - UserTransaction
+        - Principal
+        - ValidatorFactory
+        - Validator
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/build.properties
new file mode 100644
index 0000000..3543e4c
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-typesafe-javaee-resource-injection"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/build.xml
new file mode 100644
index 0000000..295d086
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/build.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,create-resources,deploy,run,undeploy,delete-resources" />
+
+	<target name="clean" depends="init-common">
+		<antcall target="clean-common" />
+		<delete>
+			<fileset dir="." includes="*.class" />
+			<fileset dir="client/test/client" includes="*.class" />
+		</delete>
+	</target>
+
+	<target name="compile" depends="clean">
+		<antcall target="compile-common">
+			<param name="src" value="servlet" />
+		</antcall>
+	</target>
+
+	<target name="build" depends="compile">
+		<property name="hasWebclient" value="yes" />
+		<antcall target="webclient-war-common">
+			<param name="hasWebclient" value="yes" />
+			<param name="webclient.war.classes" value="**/*.class" />
+		</antcall>
+
+		<javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar" includes="test/client/WebTest.java" />
+
+	</target>
+
+	<target name="build-publish-war" depends="build, publish-war-common" />
+
+	<target name="deploy" depends="init-common">
+		<antcall target="deploy-war-common" />
+	</target>
+
+	<target name="create-resources" depends="init-common">
+		<antcall target="create-jdbc-connpool-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+		</antcall>
+		<antcall target="create-jdbc-resource-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+			<param name="jdbc.resource.name" value="jdbc/jdbc-dev-test-resource" />
+		</antcall>
+	</target>
+
+
+	<target name="run" depends="init-common">
+		<java classname="test.client.WebTest">
+			<arg value="${http.host}" />
+			<arg value="${http.port}" />
+			<arg value="${contextroot}" />
+			<classpath>
+				<pathelement location="${env.APS_HOME}/lib/reportbuilder.jar" />
+				<pathelement location="client" />
+			</classpath>
+		</java>
+	</target>
+
+	<target name="undeploy" depends="init-common">
+		<antcall target="undeploy-war-common" />
+	</target>
+
+	<target name="delete-resources" depends="init-common">
+		<antcall target="delete-jdbc-resource-common">
+			<param name="jdbc.resource.name" value="jdbc/jdbc-dev-test-resource" />
+		</antcall>
+
+		<antcall target="delete-jdbc-connpool-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+		</antcall>
+	</target>
+
+	<target name="usage">
+		<antcall target="usage-common" />
+	</target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/client/test/client/WebTest.java
new file mode 100644
index 0000000..bce94d2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/client/test/client/WebTest.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+    private static final String TEST_NAME = "javaee-integration-simple";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for Java EE Integration");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: "
+                        + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/descriptor/beans.xml
new file mode 100644
index 0000000..1d355f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/descriptor/beans.xml
@@ -0,0 +1,25 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/servlet/test/beans/TestBeanInterface.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/servlet/test/beans/TestBeanInterface.java
new file mode 100644
index 0000000..29e137a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/servlet/test/beans/TestBeanInterface.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public interface TestBeanInterface {
+    public void m1();
+    public void m2();
+    
+    public String testDatasourceInjection();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/servlet/test/beans/artifacts/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/servlet/test/beans/artifacts/Preferred.java
new file mode 100644
index 0000000..b7584c8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/servlet/test/beans/artifacts/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/servlet/test/beans/artifacts/TestDatabase.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/servlet/test/beans/artifacts/TestDatabase.java
new file mode 100644
index 0000000..b69ab8e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/servlet/test/beans/artifacts/TestDatabase.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface TestDatabase {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/servlet/test/beans/nonmock/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/servlet/test/beans/nonmock/TestBean.java
new file mode 100644
index 0000000..1947fac
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/servlet/test/beans/nonmock/TestBean.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+import javax.sql.DataSource;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.TestDatabase;
+
+
+@RequestScoped
+@Preferred
+public class TestBean implements TestBeanInterface{
+    public static boolean testBeanInvoked = false;
+    
+    @Inject @TestDatabase 
+    DataSource ds;
+
+    @Override
+    public void m1() {
+        testBeanInvoked = true;
+        System.out.println("TestBean::m1 called");
+    }
+
+    @Override
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+    @Override
+    public String testDatasourceInjection() {
+        return (ds==null ? "typesafe injection into testbean failed" : "");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/servlet/test/servlet/DatabaseManager.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/servlet/test/servlet/DatabaseManager.java
new file mode 100644
index 0000000..0b4d0b3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/servlet/test/servlet/DatabaseManager.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import javax.annotation.Resource;
+import javax.enterprise.inject.Produces;
+import javax.sql.DataSource;
+
+import test.beans.artifacts.TestDatabase;
+
+public class DatabaseManager {
+    @Produces 
+    @TestDatabase
+    @Resource(name = "jdbc/jdbc-dev-test-resource", 
+            mappedName = "jdbc/jdbc-dev-test-resource")
+    DataSource ds;
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/servlet/test/servlet/SimpleJavaEEIntegrationTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/servlet/test/servlet/SimpleJavaEEIntegrationTestServlet.java
new file mode 100644
index 0000000..9d1e2ea
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/builtin-beans/servlet/test/servlet/SimpleJavaEEIntegrationTestServlet.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.security.Principal;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.sql.DataSource;
+import javax.transaction.UserTransaction;
+import javax.validation.Validator;
+import javax.validation.ValidatorFactory;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.TestDatabase;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class SimpleJavaEEIntegrationTestServlet extends HttpServlet {
+    @Inject @Preferred
+    TestBeanInterface tb;
+
+    @Inject @TestDatabase
+    DataSource ds;
+
+    // Inject the built-in beans
+    @Inject UserTransaction ut;
+    @Inject Principal principal;
+    @Inject Validator validator;
+    @Inject ValidatorFactory vf;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        if (ds == null)
+            msg += "typesafe Injection of datasource into a servlet failed";
+
+        if (tb == null)
+            msg += "Injection of request scoped bean failed";
+
+        if (tb.testDatasourceInjection().trim().length() != 0)
+            msg += tb.testDatasourceInjection();
+
+        System.out.println("UserTransaction: " + ut);
+        System.out.println("Principal: " + principal);
+        System.out.println("Default Validator: " + validator);
+        System.out.println("Default ValidatorFactory: " + vf);
+        if (ut == null)
+            msg += "UserTransaction not available for injection "
+                    + "with the default qualifier in Servlet";
+
+        if (principal == null)
+            msg += "Caller Principal not available for injection "
+                    + "with the default qualifier in Servlet";
+
+        if (validator == null)
+            msg += "Default Validator not available for injection "
+                    + "with the default qualifier in Servlet";
+
+        if (vf == null)
+            msg += "ValidationFactory not available for injection "
+                    + "with the default qualifier in Servlet";
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/README
new file mode 100644
index 0000000..f98070f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/README
@@ -0,0 +1,8 @@
+GLASSFISH-15791
+Ensure Extension in a bundled library in an archive, does not result in 
+issues with Alternatives enabled in that bundled library
+
+GLASSFISH-16279
+Ensure BM injected in sub BDA is not parent BDA's BM
+Ensure alternatives enabled in sub BDA is not visible via BeanManager 
+in parent BDA
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/WebTest.java
new file mode 100644
index 0000000..d1198c4
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/WebTest.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.*;
+import java.net.*;
+
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "cdi-servlet-annotation-with-web-inf-lib-extension-alternative";
+    private static final String EXPECTED_RESPONSE = "";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for @WebServlet");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            invoke("llinit");
+            invoke("llquery");
+            invoke("llfind");
+            invoke("llinj");
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke(String testCase) throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl"
+                + "?testcase=" + testCase;
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME + testCase, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                if (line.trim().length() != 0) {
+                    System.out.println("line = " + line);
+                }
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME + testCase, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: "
+                        + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME + testCase, stat.FAIL);
+            }
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/build.properties
new file mode 100644
index 0000000..493d4a8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/build.properties
@@ -0,0 +1,25 @@
+<!--
+
+    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}-servlet-annotation-with-web-inf-lib-extension-alternative"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
+<property name="persistence.xml" value="descriptor/persistence.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/build.xml
new file mode 100644
index 0000000..e4dca16
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/build.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,create-resources,deploy,run,undeploy,delete-resources"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+        <delete file="lib/bean-lib.jar"/>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <!-- create WEB-INF/lib/bean-lib.jar -->
+        <mkdir dir="${build.classes.dir}"/>
+        <mkdir dir="${build.classes.dir}/META-INF"/>
+        <javac srcdir="servlet" includes="TestBean.java" destdir="${build.classes.dir}" classpath="${s1astest.classpath}" debug="on" source="1.6"/>
+        <javac srcdir="util" destdir="${build.classes.dir}" classpath="${s1astest.classpath}" debug="on" source="1.6"/>
+        <copy file="descriptor/beans-alternative.xml" tofile="${build.classes.dir}/META-INF/beans.xml"/>
+        <mkdir dir="${build.classes.dir}/META-INF/services"/>
+        <copy file="services/javax.enterprise.inject.spi.Extension" tofile="${build.classes.dir}/META-INF/services/javax.enterprise.inject.spi.Extension"/>
+        <delete file="${build.classes.dir}/TestBean.class" /> <!-- This is included in the WAR below -->
+
+        <jar destfile="lib/bean-lib.jar">
+            <fileset dir="${build.classes.dir}"/>
+        </jar>
+        <delete dir="${build.classes.dir}"/>
+   
+        <!-- compile test servlet -->     
+        <mkdir dir="${build.classes.dir}"/>
+        <echo message="common.xml: Compiling test source files" level="verbose"/>
+        <mkdir dir="servlet"/>
+        <javac srcdir="servlet" destdir="${build.classes.dir}" classpath="${s1astest.classpath}:lib/bean-lib.jar" debug="on" failonerror="true"/>
+    </target>
+
+    <target name="build" depends="compile">
+       <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="create-resources" depends="init-common">
+        <antcall target="create-jdbc-connpool-common">
+            <param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+        </antcall>
+        <antcall target="create-jdbc-resource-common">
+            <param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+            <param name="jdbc.resource.name" value="jdbc/jdbc-dev-test-resource" />
+        </antcall>
+    </target>
+	
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>
+	
+    <target name="delete-resources" depends="init-common">
+        <antcall target="delete-jdbc-resource-common">
+            <param name="jdbc.resource.name" value="jdbc/jdbc-dev-test-resource" />
+        </antcall>
+
+        <antcall target="delete-jdbc-connpool-common">
+            <param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+        </antcall>
+    </target>
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/descriptor/beans-alternative.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/descriptor/beans-alternative.xml
new file mode 100644
index 0000000..1b3ee25
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/descriptor/beans-alternative.xml
@@ -0,0 +1,26 @@
+<!--
+
+    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
+
+-->
+
+<beans 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/beans_1_0.xsd">
+    <alternatives>
+        <class>test.beans.wbinflib.TestAlternativeBeanInWebInfLib</class>
+    </alternatives>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/descriptor/persistence.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/descriptor/persistence.xml
new file mode 100644
index 0000000..82f2d7b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/descriptor/persistence.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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
+
+-->
+
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
+  <persistence-unit name="pu1" transaction-type="JTA">
+    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+    <jta-data-source>jdbc/__default</jta-data-source>
+    <non-jta-data-source>jdbc/__default</non-jta-data-source>
+    <class>myapp.Department</class>
+    <class>myapp.Employee</class>
+    <properties>
+       <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
+       <property name="eclipselink.logging.level" value="INFO"/>
+    </properties>
+  </persistence-unit>
+</persistence>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/lib/slf4j-api-1.7.25.jar b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/lib/slf4j-api-1.7.25.jar
new file mode 100644
index 0000000..0143c09
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/lib/slf4j-api-1.7.25.jar
Binary files differ
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/lib/slf4j-simple-1.7.25.jar b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/lib/slf4j-simple-1.7.25.jar
new file mode 100644
index 0000000..a7260f3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/lib/slf4j-simple-1.7.25.jar
Binary files differ
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/services/javax.enterprise.inject.spi.Extension b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/services/javax.enterprise.inject.spi.Extension
new file mode 100644
index 0000000..ac73a52
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/services/javax.enterprise.inject.spi.Extension
@@ -0,0 +1,2 @@
+test.beans.wbinflib.TestExtensionInWebInfLib
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/beans/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/beans/TestBean.java
new file mode 100644
index 0000000..34ae7eb
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/beans/TestBean.java
@@ -0,0 +1,50 @@
+/*
+ * 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+
+import test.beans.artifacts.Preferred;
+
+
+@RequestScoped
+@Preferred
+public class TestBean implements TestBeanInterface{
+    public static boolean testBeanInvoked = false;
+    
+    @Inject //@TestDatabase 
+    EntityManager emf;
+
+    @Override
+    public void m1() {
+        testBeanInvoked = true;
+        System.out.println("TestBean::m1 called");
+    }
+
+    @Override
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+    @Override
+    public String testDatasourceInjection() {
+        return (emf==null ? "typesafe injection into testbean failed" : "");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/beans/TestBeanInterface.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/beans/TestBeanInterface.java
new file mode 100644
index 0000000..29e137a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/beans/TestBeanInterface.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public interface TestBeanInterface {
+    public void m1();
+    public void m2();
+    
+    public String testDatasourceInjection();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/beans/TestLoggerProducer.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/beans/TestLoggerProducer.java
new file mode 100644
index 0000000..5d6b389
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/beans/TestLoggerProducer.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+import javax.enterprise.inject.Produces;
+
+
+public class TestLoggerProducer {
+    @Produces
+    public org.jboss.logging.Logger getLogger(){
+        org.jboss.logging.Logger l = org.jboss.logging.Logger.getLogger(TestLoggerProducer.class);
+        System.out.println("getLogger:: " + l);
+        return l;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/beans/artifacts/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/beans/artifacts/Preferred.java
new file mode 100644
index 0000000..b7584c8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/beans/artifacts/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/beans/artifacts/TestDatabase.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/beans/artifacts/TestDatabase.java
new file mode 100644
index 0000000..b69ab8e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/beans/artifacts/TestDatabase.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface TestDatabase {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/entity/Department.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/entity/Department.java
new file mode 100644
index 0000000..14191ec
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/entity/Department.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.entity;
+
+import java.util.Set;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "DEPARTMENT")
+public class Department implements java.io.Serializable {
+
+    // Instance variables
+    private int id;
+    private String name;
+    private Set<Employee> employees;
+
+    public Department() {
+    }
+
+    public Department(int id, String name) {
+        this.id = id;
+        this.name = name;
+    }
+
+    // ===========================================================
+    // getters and setters for the state fields
+
+    @Id
+    @Column(name = "ID")
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    @Column(name = "NAME")
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    // ===========================================================
+    // getters and setters for the association fields
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "department")
+    public Set<Employee> getEmployees() {
+        return employees;
+    }
+
+    public void setEmployees(Set<Employee> employees) {
+        this.employees = employees;
+    }
+
+    public String toString() {
+        return "Department id=" + getId() + ", Department Name=" + getName();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/entity/Employee.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/entity/Employee.java
new file mode 100644
index 0000000..a1820e8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/entity/Employee.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.entity;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+@Entity
+@Table(name = "EMPLOYEE")
+public class Employee implements java.io.Serializable {
+
+    private int id;
+    private String firstName;
+    private String lastName;
+    private Department department;
+
+    public Employee() {
+    }
+
+    public Employee(int id, String firstName, String lastName) {
+        this.id = id;
+        this.firstName = firstName;
+        this.lastName = lastName;
+    }
+
+    public Employee(int id, String firstName, String lastName,
+            Department department) {
+        this.id = id;
+        this.firstName = firstName;
+        this.lastName = lastName;
+        this.department = department;
+    }
+
+    // ===========================================================
+    // getters and setters for the state fields
+    @Id
+    @Column(name = "ID")
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    @Column(name = "FIRSTNAME")
+    public String getFirstName() {
+        return firstName;
+    }
+
+    public void setFirstName(String firstName) {
+        this.firstName = firstName;
+    }
+
+    @Column(name = "LASTNAME")
+    public String getLastName() {
+        return lastName;
+    }
+
+    public void setLastName(String lastName) {
+        this.lastName = lastName;
+    }
+
+    // ===========================================================
+    // getters and setters for the association fields
+    // @ManyToOne
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "DEPARTMENT_ID")
+    public Department getDepartment() {
+        return department;
+    }
+
+    @Transient
+    public Department getDepartmentNoWeaving() {
+        try {
+            java.lang.reflect.Field f = Employee.class
+                    .getDeclaredField("department");
+            return (Department) f.get(this);
+        } catch (NoSuchFieldException e) {
+            throw new RuntimeException(
+                    "Please change argument to getDeclaredField", e);
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public void setDepartment(Department department) {
+        this.department = department;
+    }
+
+    public String toString() {
+        return "Employee id=" + getId() + ", firstName=" + getFirstName()
+                + ", lastName=" + getLastName() + ", department="
+                + getDepartment();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/servlet/TestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/servlet/TestServlet.java
new file mode 100644
index 0000000..d06d708
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/servlet/TestServlet.java
@@ -0,0 +1,194 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Set;
+
+import javax.annotation.Resource;
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.util.AnnotationLiteral;
+import javax.inject.Inject;
+import javax.naming.InitialContext;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceUnit;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.transaction.UserTransaction;
+
+import test.beans.TestBean;
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+import test.beans.wbinflib.AnotherTestBeanInWebInfLib;
+import test.beans.wbinflib.TestAlternativeBeanInWebInfLib;
+import test.beans.wbinflib.TestBeanInWebInfLib;
+import test.util.JpaTest;
+
+@WebServlet(name="mytest",
+        urlPatterns={"/myurl"},
+        initParams={ @WebInitParam(name="n1", value="v1"), @WebInitParam(name="n2", value="v2") } )
+public class TestServlet extends HttpServlet {
+
+    /* Normal injection of Beans */
+    @Inject 
+    private transient org.jboss.logging.Logger log;
+    @Inject BeanManager bm_at_inj;
+
+    /*Injection of Java EE resources*/
+    @PersistenceUnit(unitName = "pu1")
+    private EntityManagerFactory emf_at_pu;
+
+    @Inject //@TestDatabase
+    private EntityManager emf_at_inj;
+
+    private @Resource
+    UserTransaction utx;
+    
+    @Inject @Preferred
+    TestBeanInterface tbi;
+    
+    /* Injection of Beans from WEB-INF/lib */
+    @Inject TestBeanInWebInfLib tbiwil; 
+    //We are injecting TestBeanInWebInfLib directly above. Since the alternative
+    //TestBean is not enabled in the WAR's BDA(beans.xml), 
+    //TestBeanInWebInfLib must be injected 
+    
+    
+    @Inject AnotherTestBeanInWebInfLib atbiwil;
+    //However in this case, when AnotherTestBeanInWebInfLib tries to inject
+    //TestBeanInWebInfLib in its bean, it must inject TestAlternativeBeanInWebInfLib
+    //as the alternative bean is enabled in the WEB-INF/lib's BDA (beans.xml) 
+
+    /* Test lookup of BeanManager*/
+    BeanManager bm_lookup;
+
+    
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        String msg = "";
+        if (tbi == null) msg += "Bean injection into Servlet failed";
+        if (tbiwil == null) msg += "Bean injection of a TestBean in WEB-INF/lib into Servlet failed";
+        System.out.println("Test Bean from WEB-INF/lib=" + tbiwil);
+
+        System.out.println("BeanManager is " + bm_at_inj);
+        System.out.println("BeanManager via lookup is " + bm_lookup);
+        if (bm_at_inj == null) msg += "BeanManager Injection via @Inject failed";
+        try {
+            bm_lookup = (BeanManager)((new InitialContext()).lookup("java:comp/BeanManager"));
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            msg += "BeanManager Injection via component environment lookup failed";
+        }
+        if (bm_lookup == null) msg += "BeanManager Injection via component environment lookup failed";
+
+        //Check if Beans in WAR(WEB-INF/classes) and WEB-INF/lib/*.jar are visible
+        //via BeanManager of WAR
+        Set warBeans = bm_at_inj.getBeans(TestBean.class,new AnnotationLiteral<Any>() {});
+        if (warBeans.size() != 1) msg += "TestBean in WAR is not available via the WAR BeanManager";
+        
+        Set webinfLibBeans = bm_at_inj.getBeans(TestBeanInWebInfLib.class,new AnnotationLiteral<Any>() {});
+        if (webinfLibBeans.size() != 1) msg += "TestBean in WEB-INF/lib is not available via the WAR BeanManager";
+        System.out.println("Test Bean from WEB-INF/lib via BeanManager:" + webinfLibBeans);
+
+        //Ensure Alternative Beans enabled only in the context of web-inf/lib is
+        //not visible in WAR's BM
+        Set webinfLibAltBeans = bm_at_inj.getBeans(TestAlternativeBeanInWebInfLib.class,new AnnotationLiteral<Any>() {});
+        if (webinfLibAltBeans.size() != 0) msg += "TestAlternativeBean in WEB-INF/lib is available via the WAR BeanManager";
+        System.out.println("Test Bean from WEB-INF/lib via BeanManager:" + webinfLibAltBeans);
+        
+        //Test injection of a Bean in WEB-INF/lib beans into Servlet
+        //and check that the Alternative bean is not called.
+        //The alternative bean in web-inf/lib is not enabled in the WAR's beans.xml
+        //and hence must not be visible.
+        TestAlternativeBeanInWebInfLib.clearStatus(); //clear status
+        
+        String injectionOfBeanInWebInfLibResult = tbiwil.testInjection();
+        System.out.println("injectionWithAlternative returned: " + injectionOfBeanInWebInfLibResult);
+        if (injectionOfBeanInWebInfLibResult.equals ("Alternative")) {
+            msg += "Expected that the original TestBeanInWebInfLib is called, " +
+            		"but instead got " + injectionOfBeanInWebInfLibResult + " instead";
+        } 
+        
+        if(TestAlternativeBeanInWebInfLib.ALTERNATIVE_BEAN_HAS_BEEN_CALLED) {
+            msg += "Alternate Bean is called even though it is not enabled in the WAR's beans.xml";
+        }
+
+        //Test injection into a bean in web-inf/lib
+        //In this case the alternative bean must be called, as it is enabled
+        //in the library jar's beans.xml and the injection of the Bean
+        //happens in the context of the library jar
+        TestAlternativeBeanInWebInfLib.clearStatus(); //clear status
+        String injectionWithAlternative2 = atbiwil.testInjection();
+        System.out.println("injectionWithAlternative returned: " + injectionWithAlternative2);
+        if (injectionWithAlternative2.equals ("Alternative")) {
+            //test injection successful
+        } else {
+            msg += "Expected alternative, but got " + injectionWithAlternative2 + " instead";
+        }
+
+        if (!TestAlternativeBeanInWebInfLib.ALTERNATIVE_BEAN_HAS_BEEN_CALLED) {
+            msg += "Alternative Bean enabled in WEB-INF/lib was not called " +
+            		"when the injection happened in the context of a " +
+            		"Bean in WEB-INF/lib where the alternative Bean was enabled";
+        }
+
+        
+        msg += testEMInjection(req);
+        
+        writer.write(msg + "\n");
+    }
+
+
+    private String testEMInjection(HttpServletRequest request) {
+        String msg = "";
+        EntityManager em = emf_at_inj;
+        System.out.println("JPAResourceInjectionServlet::createEM" +
+                "EntityManager=" + em);
+        String testcase = request.getParameter("testcase");
+        System.out.println("testcase=" + testcase);
+
+        if (testcase != null) {
+            JpaTest jt = new JpaTest(em, utx);
+            boolean status = false;
+            if ("llinit".equals(testcase)) {
+                status = jt.lazyLoadingInit();
+            } else if ("llfind".equals(testcase)) {
+                status = jt.lazyLoadingByFind(1);
+            } else if ("llquery".equals(testcase)) {
+                status = jt.lazyLoadingByQuery("Carla");
+            } else if ("llinj".equals(testcase)){
+                status = ((tbi != null) && 
+                        (tbi.testDatasourceInjection().trim().length()==0));
+            }
+            if (status) {
+                msg += "";// pass
+            } else {
+                msg += (testcase + ":fail");
+            }
+        }
+        return msg;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/util/JPAResourceProducer.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/util/JPAResourceProducer.java
new file mode 100644
index 0000000..2cf2827
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/util/JPAResourceProducer.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.util;
+
+import javax.enterprise.inject.Produces;
+import javax.inject.Singleton;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+@Singleton
+public class JPAResourceProducer {
+    @Produces @PersistenceContext(unitName="pu1")
+    //@TestDatabase 
+    EntityManager customerDatabasePersistenceUnit;
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/util/JpaTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/util/JpaTest.java
new file mode 100644
index 0000000..3d47448
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/servlet/test/util/JpaTest.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.util;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Query;
+import javax.transaction.UserTransaction;
+
+import test.entity.Department;
+import test.entity.Employee;
+
+public class JpaTest {
+
+    private EntityManager em;
+    private UserTransaction utx;
+
+    private static Department deptRef[] = new Department[2];
+    private static Employee empRef[] = new Employee[5];
+
+    public JpaTest() {
+    }
+
+    public JpaTest(EntityManager em, UserTransaction utx) {
+        this.em = em;
+        this.utx = utx;
+    }
+
+    public boolean lazyLoadingInit() {
+        boolean status = false;
+        System.out.println("-----lazeLoadingInit()---------");
+        try {
+            deptRef[0] = new Department(1, "Engineering");
+            deptRef[1] = new Department(2, "Marketing");
+            utx.begin();
+            em.joinTransaction();
+            for (int i = 0; i < 2; i++) {
+                em.persist(deptRef[i]);
+            }
+            utx.commit();
+
+            empRef[0] = new Employee(1, "Alan", "Frechette", deptRef[0]);
+            empRef[1] = new Employee(2, "Arthur", "Wesley", deptRef[0]);
+            empRef[2] = new Employee(3, "Abe", "White", deptRef[0]);
+            empRef[3] = new Employee(4, "Paul", "Hinz", deptRef[1]);
+            empRef[4] = new Employee(5, "Carla", "Calrson", deptRef[1]);
+            utx.begin();
+            em.joinTransaction();
+            for (int i = 0; i < 5; i++) {
+                em.persist(empRef[i]);
+            }
+            utx.commit();
+            status = true;
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+    public boolean lazyLoadingByFind(int employeeID) {
+
+        boolean status = true;
+        System.out.println("------------lazyLoadingAfterFind -----------");
+        System.out.println("employeeID = " + employeeID);
+        Employee emp = em.find(Employee.class, employeeID);
+
+        System.out.println("found: emp.id=" + emp.getId());
+
+        try {
+            // 1. get Department before loading
+            Department deptBL = emp.getDepartmentNoWeaving();
+            System.out.println("1. before loading: deptBL=" + deptBL);
+            String deptNameBL = null;
+            if (deptBL != null) {
+                deptNameBL = deptBL.getName();
+                System.out.println("deptNameBL=" + deptNameBL);
+            }
+            // assert deptBL == null;
+            if (deptBL != null) {
+                status = false;
+            }
+
+            // 2. loading
+            String deptName = emp.getDepartment().getName();
+            System.out.println("2. loading, deptName = " + deptName);
+
+            // 3. get Department after loading
+            Department deptAL = emp.getDepartmentNoWeaving();
+            System.out.println("3. after loading: deptAL=" + deptAL);
+            String deptNameAL = deptAL.getName();
+            System.out.println("deptNameAL=" + deptNameAL);
+            // assert deptAL != null
+            // assert deptAL.getName == deptName;
+            if (deptAL == null || deptNameAL != deptName) {
+                status = false;
+            }
+        } catch (Exception ex) {
+            status = false;
+            ex.printStackTrace();
+        }
+
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+    public boolean lazyLoadingByQuery(String fName) {
+
+        boolean status = true;
+        System.out.println("------------lazyLoadingByQuery -----------");
+        System.out.println("fName = " + fName);
+        Query query = em.createQuery(
+                "SELECT e FROM Employee e WHERE e.firstName like :firstName")
+                .setParameter("firstName", fName);
+        ;
+        Employee emp = (Employee) query.getSingleResult();
+
+        System.out.println("queried: emp.firstName=" + emp.getFirstName());
+
+        try {
+            // 1. get Department before loading
+            Department deptBL = emp.getDepartmentNoWeaving();
+            System.out.println("1. before loading: deptBL=" + deptBL);
+            String deptNameBL = null;
+            if (deptBL != null) {
+                deptNameBL = deptBL.getName();
+                System.out.println("deptNameBL=" + deptNameBL);
+            }
+            // assert deptBL == null;
+            if (deptBL != null) {
+                status = false;
+            }
+
+            // 2. loading
+            String deptName = emp.getDepartment().getName();
+            System.out.println("2. loading, deptName = " + deptName);
+
+            // 3. get Department after loading
+            Department deptAL = emp.getDepartmentNoWeaving();
+            System.out.println("3. after loading: deptAL=" + deptAL);
+            String deptNameAL = deptAL.getName();
+            System.out.println("deptNameAL=" + deptNameAL);
+            // assert deptAL != null
+            // assert deptAL.getName == deptName;
+            if (deptAL == null || deptNameAL != deptName) {
+                status = false;
+            }
+        } catch (Exception ex) {
+            status = false;
+            ex.printStackTrace();
+        }
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/util/test/beans/wbinflib/AnotherTestBeanInWebInfLib.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/util/test/beans/wbinflib/AnotherTestBeanInWebInfLib.java
new file mode 100644
index 0000000..3140fe1
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/util/test/beans/wbinflib/AnotherTestBeanInWebInfLib.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2011, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.wbinflib;
+
+import javax.inject.Inject;
+
+public class AnotherTestBeanInWebInfLib {
+    @Inject
+    TestBeanInWebInfLib twil; //Enabled alternative bean must be injected here, as this bean is within web-inf/lib BDA which has the enabled alternatives
+
+
+    public String testInjection() {
+        String ret = twil.testInjection();
+        return ret; //"Alternative"
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/util/test/beans/wbinflib/TestAlternativeBeanInWebInfLib.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/util/test/beans/wbinflib/TestAlternativeBeanInWebInfLib.java
new file mode 100644
index 0000000..45bbdb4
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/util/test/beans/wbinflib/TestAlternativeBeanInWebInfLib.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.wbinflib;
+
+import javax.enterprise.inject.Alternative;
+
+@Alternative
+public class TestAlternativeBeanInWebInfLib extends TestBeanInWebInfLib {
+    public static boolean ALTERNATIVE_BEAN_HAS_BEEN_CALLED = false;
+    public TestAlternativeBeanInWebInfLib(){
+        System.out.println("**************** Alternative Bean in web-inf/lib created");
+    }
+
+    @Override
+    public String testInjection() {
+        ALTERNATIVE_BEAN_HAS_BEEN_CALLED = true;
+        System.out.println("*************** testinjection in alternative bean in web-inf/lib called");
+        return "Alternative";
+    }
+    
+    public static void clearStatus(){
+        ALTERNATIVE_BEAN_HAS_BEEN_CALLED = false;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/util/test/beans/wbinflib/TestBeanInWebInfLib.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/util/test/beans/wbinflib/TestBeanInWebInfLib.java
new file mode 100644
index 0000000..ccc108f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/util/test/beans/wbinflib/TestBeanInWebInfLib.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.wbinflib;
+import java.util.Set;
+
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.util.AnnotationLiteral;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+public class TestBeanInWebInfLib {
+    @Inject
+    BeanManager bm;
+    
+//    @Inject //@TestDatabase 
+//    EntityManager emf_at_inj;
+
+    @PersistenceContext(unitName="pu1")  
+    EntityManager emf_at_pu;
+
+    //This test injection method would be called in the context of the servlet in WAR
+    //which does not have the alternative bean enabled in it.
+    public String testInjection() {
+        if (bm == null)
+            return "Bean Manager not injected into the TestBean in WEB-INF/lib";
+        System.out.println("BeanManager injected in WEB-INF/lib bean is " + bm);
+
+        System.out.println("EMF injected in WEB-INF/lib bean is " + emf_at_pu);
+        if (emf_at_pu == null)
+            return "EMF injected via @PersistenceContext is not injected into " +
+            		"the TestBean packaged in WEB-INF/lib";
+        
+        Set<Bean<?>> webinfLibBeans = bm.getBeans(TestBeanInWebInfLib.class, new AnnotationLiteral<Any>() {});
+        if (webinfLibBeans.size() != 2) //Bean and enabled Alternative
+            return "TestBean in WEB-INF/lib is not available via the WEB-INF/lib "
+                    + "Bean's BeanManager";
+        System.out.println("***********************************************************");
+        printBeans(webinfLibBeans, "BeanManager.getBeans(TestBeanInWebInfLib, Any):");
+        
+        Set<Bean<?>> webinfLibAltBeans = bm.getBeans(TestAlternativeBeanInWebInfLib.class, new AnnotationLiteral<Any>() {});
+        if (webinfLibBeans.size() != 1) //enabled Alternative
+            return "TestAlternativeBean in WEB-INF/lib is not available via the WEB-INF/lib "
+                    + "Bean's BeanManager";
+        printBeans(webinfLibAltBeans, "BeanManager.getBeans(TestAlternativeBeanInWebInfLib, Any):");
+        
+        
+        Iterable<Bean<?>> accessibleBeans = ((org.jboss.weld.manager.BeanManagerImpl) bm).getAccessibleBeans();
+        printBeans(accessibleBeans, "BeanManagerImpl.getAccessibleBeans:");
+
+        Iterable<Bean<?>> beans = ((org.jboss.weld.manager.BeanManagerImpl) bm).getBeans();
+        printBeans(beans, "BeanManagerImpl.getBeans");
+        System.out.println("***********************************************************");
+
+        // success
+        return "";
+    }
+
+    private void printBeans(Iterable<Bean<?>> beans, String msg) {
+        System.out.println(msg + ":");
+        for (Bean b : beans) {
+            debug(b);
+        }
+        System.out.println();
+    }
+
+    private void debug(Bean b) {
+        String name = b.getBeanClass().getName();
+        if (name.indexOf("Test") != -1) {
+            System.out.print(name);
+        }
+
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/util/test/beans/wbinflib/TestExtensionInWebInfLib.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/util/test/beans/wbinflib/TestExtensionInWebInfLib.java
new file mode 100644
index 0000000..9f33e08
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-extension-alternative/util/test/beans/wbinflib/TestExtensionInWebInfLib.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.wbinflib;
+
+import javax.enterprise.inject.spi.Extension;
+
+public class TestExtensionInWebInfLib implements Extension {
+//no-op
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/README
new file mode 100644
index 0000000..c4a8a73
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/README
@@ -0,0 +1 @@
+GLASSFISH-15749
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/WebTest.java
new file mode 100644
index 0000000..9eccfad
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/WebTest.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.*;
+import java.net.*;
+
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "cdi-servlet-annotation-with-web-inf-lib-javaee-injection";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0. initParams: n1=v1, n2=v2";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for @WebServlet");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            invoke("llinit");
+            invoke("llquery");
+            invoke("llfind");
+            invoke("llinj");
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke(String testCase) throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl"
+                + "?testcase=" + testCase;
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME + testCase, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME + testCase, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: "
+                        + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME + testCase, stat.FAIL);
+            }
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/build.properties
new file mode 100644
index 0000000..cf2f0c0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/build.properties
@@ -0,0 +1,25 @@
+<!--
+
+    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}-servlet-annotation-with-web-inf-lib-javaee-injection"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
+<property name="persistence.xml" value="descriptor/persistence.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/build.xml
new file mode 100644
index 0000000..42ccb47
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/build.xml
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,create-resources,deploy,run,undeploy,delete-resources"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+        <delete file="lib/bean-lib.jar"/>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <!-- create WEB-INF/lib/bean-lib.jar -->
+        <mkdir dir="${build.classes.dir}"/>
+        <mkdir dir="${build.classes.dir}/META-INF"/>
+        <javac srcdir="servlet" includes="TestBean.java" destdir="${build.classes.dir}" classpath="${s1astest.classpath}" debug="on" source="1.6"/>
+        <javac srcdir="util" destdir="${build.classes.dir}" classpath="${s1astest.classpath}" debug="on" source="1.6"/>
+        <copy file="descriptor/beans.xml" tofile="${build.classes.dir}/META-INF/beans.xml"/>
+        <delete file="${build.classes.dir}/TestBean.class" /> <!-- This is included in the WAR below -->
+
+        <jar destfile="lib/bean-lib.jar">
+            <fileset dir="${build.classes.dir}"/>
+        </jar>
+        <delete dir="${build.classes.dir}"/>
+   
+        <!-- compile test servlet -->     
+        <mkdir dir="${build.classes.dir}"/>
+        <echo message="common.xml: Compiling test source files" level="verbose"/>
+        <mkdir dir="servlet"/>
+        <javac srcdir="servlet" destdir="${build.classes.dir}" classpath="${s1astest.classpath}:lib/bean-lib.jar" debug="on" failonerror="true"/>
+    </target>
+
+    <target name="build" depends="compile">
+       <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="create-resources" depends="init-common">
+        <antcall target="create-jdbc-connpool-common">
+            <param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+        </antcall>
+        <antcall target="create-jdbc-resource-common">
+            <param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+            <param name="jdbc.resource.name" value="jdbc/jdbc-dev-test-resource" />
+        </antcall>
+    </target>
+	
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>
+	
+    <target name="delete-resources" depends="init-common">
+        <antcall target="delete-jdbc-resource-common">
+            <param name="jdbc.resource.name" value="jdbc/jdbc-dev-test-resource" />
+        </antcall>
+
+        <antcall target="delete-jdbc-connpool-common">
+            <param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+        </antcall>
+    </target>
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/descriptor/persistence.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/descriptor/persistence.xml
new file mode 100644
index 0000000..82f2d7b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/descriptor/persistence.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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
+
+-->
+
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
+  <persistence-unit name="pu1" transaction-type="JTA">
+    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+    <jta-data-source>jdbc/__default</jta-data-source>
+    <non-jta-data-source>jdbc/__default</non-jta-data-source>
+    <class>myapp.Department</class>
+    <class>myapp.Employee</class>
+    <properties>
+       <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
+       <property name="eclipselink.logging.level" value="INFO"/>
+    </properties>
+  </persistence-unit>
+</persistence>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/lib/slf4j-api-1.7.25.jar b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/lib/slf4j-api-1.7.25.jar
new file mode 100644
index 0000000..0143c09
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/lib/slf4j-api-1.7.25.jar
Binary files differ
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/lib/slf4j-simple-1.7.25.jar b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/lib/slf4j-simple-1.7.25.jar
new file mode 100644
index 0000000..a7260f3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/lib/slf4j-simple-1.7.25.jar
Binary files differ
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/beans/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/beans/TestBean.java
new file mode 100644
index 0000000..787108a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/beans/TestBean.java
@@ -0,0 +1,49 @@
+/*
+ * 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+
+import test.beans.artifacts.Preferred;
+
+@RequestScoped
+@Preferred
+public class TestBean implements TestBeanInterface{
+    public static boolean testBeanInvoked = false;
+    
+    @Inject //@TestDatabase 
+    EntityManager emf;
+
+    @Override
+    public void m1() {
+        testBeanInvoked = true;
+        System.out.println("TestBean::m1 called");
+    }
+
+    @Override
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+    @Override
+    public String testDatasourceInjection() {
+        return (emf==null ? "typesafe injection into testbean failed" : "");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/beans/TestBeanInterface.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/beans/TestBeanInterface.java
new file mode 100644
index 0000000..29e137a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/beans/TestBeanInterface.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public interface TestBeanInterface {
+    public void m1();
+    public void m2();
+    
+    public String testDatasourceInjection();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/beans/TestLoggerProducer.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/beans/TestLoggerProducer.java
new file mode 100644
index 0000000..8be9d65
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/beans/TestLoggerProducer.java
@@ -0,0 +1,30 @@
+/*
+ * 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.beans;
+
+import javax.enterprise.inject.Produces;
+
+
+public class TestLoggerProducer {
+    @Produces
+    public org.jboss.logging.Logger getLogger(){
+        org.jboss.logging.Logger l = org.jboss.logging.Logger.getLogger(TestLoggerProducer.class);
+        System.out.println("getLogger:: " + l);
+        return l;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/beans/artifacts/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/beans/artifacts/Preferred.java
new file mode 100644
index 0000000..b7584c8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/beans/artifacts/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/beans/artifacts/TestDatabase.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/beans/artifacts/TestDatabase.java
new file mode 100644
index 0000000..b69ab8e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/beans/artifacts/TestDatabase.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface TestDatabase {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/entity/Department.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/entity/Department.java
new file mode 100644
index 0000000..14191ec
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/entity/Department.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.entity;
+
+import java.util.Set;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "DEPARTMENT")
+public class Department implements java.io.Serializable {
+
+    // Instance variables
+    private int id;
+    private String name;
+    private Set<Employee> employees;
+
+    public Department() {
+    }
+
+    public Department(int id, String name) {
+        this.id = id;
+        this.name = name;
+    }
+
+    // ===========================================================
+    // getters and setters for the state fields
+
+    @Id
+    @Column(name = "ID")
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    @Column(name = "NAME")
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    // ===========================================================
+    // getters and setters for the association fields
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "department")
+    public Set<Employee> getEmployees() {
+        return employees;
+    }
+
+    public void setEmployees(Set<Employee> employees) {
+        this.employees = employees;
+    }
+
+    public String toString() {
+        return "Department id=" + getId() + ", Department Name=" + getName();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/entity/Employee.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/entity/Employee.java
new file mode 100644
index 0000000..a1820e8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/entity/Employee.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.entity;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+@Entity
+@Table(name = "EMPLOYEE")
+public class Employee implements java.io.Serializable {
+
+    private int id;
+    private String firstName;
+    private String lastName;
+    private Department department;
+
+    public Employee() {
+    }
+
+    public Employee(int id, String firstName, String lastName) {
+        this.id = id;
+        this.firstName = firstName;
+        this.lastName = lastName;
+    }
+
+    public Employee(int id, String firstName, String lastName,
+            Department department) {
+        this.id = id;
+        this.firstName = firstName;
+        this.lastName = lastName;
+        this.department = department;
+    }
+
+    // ===========================================================
+    // getters and setters for the state fields
+    @Id
+    @Column(name = "ID")
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    @Column(name = "FIRSTNAME")
+    public String getFirstName() {
+        return firstName;
+    }
+
+    public void setFirstName(String firstName) {
+        this.firstName = firstName;
+    }
+
+    @Column(name = "LASTNAME")
+    public String getLastName() {
+        return lastName;
+    }
+
+    public void setLastName(String lastName) {
+        this.lastName = lastName;
+    }
+
+    // ===========================================================
+    // getters and setters for the association fields
+    // @ManyToOne
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "DEPARTMENT_ID")
+    public Department getDepartment() {
+        return department;
+    }
+
+    @Transient
+    public Department getDepartmentNoWeaving() {
+        try {
+            java.lang.reflect.Field f = Employee.class
+                    .getDeclaredField("department");
+            return (Department) f.get(this);
+        } catch (NoSuchFieldException e) {
+            throw new RuntimeException(
+                    "Please change argument to getDeclaredField", e);
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public void setDepartment(Department department) {
+        this.department = department;
+    }
+
+    public String toString() {
+        return "Employee id=" + getId() + ", firstName=" + getFirstName()
+                + ", lastName=" + getLastName() + ", department="
+                + getDepartment();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/servlet/TestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/servlet/TestServlet.java
new file mode 100644
index 0000000..80a1932
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/servlet/TestServlet.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Set;
+
+import javax.annotation.Resource;
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.util.AnnotationLiteral;
+import javax.inject.Inject;
+import javax.naming.InitialContext;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceUnit;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.transaction.UserTransaction;
+
+import test.beans.TestBean;
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+import test.util.JpaTest;
+
+import test.beans.wbinflib.TestBeanInWebInfLib;
+
+@WebServlet(name="mytest",
+        urlPatterns={"/myurl"},
+        initParams={ @WebInitParam(name="n1", value="v1"), @WebInitParam(name="n2", value="v2") } )
+public class TestServlet extends HttpServlet {
+
+    /* Normal injection of Beans */
+    @Inject 
+    private transient org.jboss.logging.Logger log;
+    @Inject BeanManager bm_at_inj;
+
+    /*Injection of Java EE resources*/
+    @PersistenceUnit(unitName = "pu1")
+    private EntityManagerFactory emf_at_pu;
+
+    @Inject //@TestDatabase
+    private EntityManager emf_at_inj;
+
+    private @Resource
+    UserTransaction utx;
+    
+    @Inject @Preferred
+    TestBeanInterface tbi;
+    
+    /* Injection of Beans from WEB-INF/lib */
+    @Inject TestBeanInWebInfLib tbiwil;
+    
+    /* Test lookup of BeanManager*/
+    BeanManager bm_lookup;
+
+    
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0. ");
+        String msg = "n1=" + getInitParameter("n1") +
+            ", n2=" + getInitParameter("n2");
+
+        if (tbi == null) msg += "Bean injection into Servlet failed";
+        if (tbiwil == null) msg += "Bean injection of a TestBean in WEB-INF/lib into Servlet failed";
+        System.out.println("Test Bean from WEB-INF/lib=" + tbiwil);
+
+        System.out.println("BeanManager is " + bm_at_inj);
+        System.out.println("BeanManager via lookup is " + bm_lookup);
+        if (bm_at_inj == null) msg += "BeanManager Injection via @Inject failed";
+        try {
+            bm_lookup = (BeanManager)((new InitialContext()).lookup("java:comp/BeanManager"));
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            msg += "BeanManager Injection via component environment lookup failed";
+        }
+        if (bm_lookup == null) msg += "BeanManager Injection via component environment lookup failed";
+
+        //Check if Beans in WAR(WEB-INF/classes) and WEB-INF/lib/*.jar are visible
+        //via BeanManager of WAR
+        Set warBeans = bm_at_inj.getBeans(TestBean.class,new AnnotationLiteral<Any>() {});
+        if (warBeans.size() != 1) msg += "TestBean in WAR is not available via the WAR BeanManager";
+        
+        Set webinfLibBeans = bm_at_inj.getBeans(TestBeanInWebInfLib.class,new AnnotationLiteral<Any>() {});
+        if (webinfLibBeans.size() != 1) msg += "TestBean in WEB-INF/lib is not available via the WAR BeanManager";
+        System.out.println("Test Bean from WEB-INF/lib via BeanManager:" + webinfLibBeans);
+        
+        //Test injection into WEB-INF/lib beans
+        msg += tbiwil.testInjection();
+        
+        msg += testEMInjection(req);
+        
+        writer.write("initParams: " + msg + "\n");
+    }
+
+
+    private String testEMInjection(HttpServletRequest request) {
+        String msg = "";
+        EntityManager em = emf_at_inj;
+        System.out.println("JPAResourceInjectionServlet::createEM" +
+                "EntityManager=" + em);
+        String testcase = request.getParameter("testcase");
+        System.out.println("testcase=" + testcase);
+
+        if (testcase != null) {
+            JpaTest jt = new JpaTest(em, utx);
+            boolean status = false;
+            if ("llinit".equals(testcase)) {
+                status = jt.lazyLoadingInit();
+            } else if ("llfind".equals(testcase)) {
+                status = jt.lazyLoadingByFind(1);
+            } else if ("llquery".equals(testcase)) {
+                status = jt.lazyLoadingByQuery("Carla");
+            } else if ("llinj".equals(testcase)){
+                status = ((tbi != null) && 
+                        (tbi.testDatasourceInjection().trim().length()==0));
+            }
+            if (status) {
+                msg += "";// pass
+            } else {
+                msg += (testcase + ":fail");
+            }
+        }
+        return msg;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/util/JPAResourceProducer.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/util/JPAResourceProducer.java
new file mode 100644
index 0000000..2cf2827
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/util/JPAResourceProducer.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.util;
+
+import javax.enterprise.inject.Produces;
+import javax.inject.Singleton;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+@Singleton
+public class JPAResourceProducer {
+    @Produces @PersistenceContext(unitName="pu1")
+    //@TestDatabase 
+    EntityManager customerDatabasePersistenceUnit;
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/util/JpaTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/util/JpaTest.java
new file mode 100644
index 0000000..3d47448
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/servlet/test/util/JpaTest.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.util;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Query;
+import javax.transaction.UserTransaction;
+
+import test.entity.Department;
+import test.entity.Employee;
+
+public class JpaTest {
+
+    private EntityManager em;
+    private UserTransaction utx;
+
+    private static Department deptRef[] = new Department[2];
+    private static Employee empRef[] = new Employee[5];
+
+    public JpaTest() {
+    }
+
+    public JpaTest(EntityManager em, UserTransaction utx) {
+        this.em = em;
+        this.utx = utx;
+    }
+
+    public boolean lazyLoadingInit() {
+        boolean status = false;
+        System.out.println("-----lazeLoadingInit()---------");
+        try {
+            deptRef[0] = new Department(1, "Engineering");
+            deptRef[1] = new Department(2, "Marketing");
+            utx.begin();
+            em.joinTransaction();
+            for (int i = 0; i < 2; i++) {
+                em.persist(deptRef[i]);
+            }
+            utx.commit();
+
+            empRef[0] = new Employee(1, "Alan", "Frechette", deptRef[0]);
+            empRef[1] = new Employee(2, "Arthur", "Wesley", deptRef[0]);
+            empRef[2] = new Employee(3, "Abe", "White", deptRef[0]);
+            empRef[3] = new Employee(4, "Paul", "Hinz", deptRef[1]);
+            empRef[4] = new Employee(5, "Carla", "Calrson", deptRef[1]);
+            utx.begin();
+            em.joinTransaction();
+            for (int i = 0; i < 5; i++) {
+                em.persist(empRef[i]);
+            }
+            utx.commit();
+            status = true;
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+    public boolean lazyLoadingByFind(int employeeID) {
+
+        boolean status = true;
+        System.out.println("------------lazyLoadingAfterFind -----------");
+        System.out.println("employeeID = " + employeeID);
+        Employee emp = em.find(Employee.class, employeeID);
+
+        System.out.println("found: emp.id=" + emp.getId());
+
+        try {
+            // 1. get Department before loading
+            Department deptBL = emp.getDepartmentNoWeaving();
+            System.out.println("1. before loading: deptBL=" + deptBL);
+            String deptNameBL = null;
+            if (deptBL != null) {
+                deptNameBL = deptBL.getName();
+                System.out.println("deptNameBL=" + deptNameBL);
+            }
+            // assert deptBL == null;
+            if (deptBL != null) {
+                status = false;
+            }
+
+            // 2. loading
+            String deptName = emp.getDepartment().getName();
+            System.out.println("2. loading, deptName = " + deptName);
+
+            // 3. get Department after loading
+            Department deptAL = emp.getDepartmentNoWeaving();
+            System.out.println("3. after loading: deptAL=" + deptAL);
+            String deptNameAL = deptAL.getName();
+            System.out.println("deptNameAL=" + deptNameAL);
+            // assert deptAL != null
+            // assert deptAL.getName == deptName;
+            if (deptAL == null || deptNameAL != deptName) {
+                status = false;
+            }
+        } catch (Exception ex) {
+            status = false;
+            ex.printStackTrace();
+        }
+
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+    public boolean lazyLoadingByQuery(String fName) {
+
+        boolean status = true;
+        System.out.println("------------lazyLoadingByQuery -----------");
+        System.out.println("fName = " + fName);
+        Query query = em.createQuery(
+                "SELECT e FROM Employee e WHERE e.firstName like :firstName")
+                .setParameter("firstName", fName);
+        ;
+        Employee emp = (Employee) query.getSingleResult();
+
+        System.out.println("queried: emp.firstName=" + emp.getFirstName());
+
+        try {
+            // 1. get Department before loading
+            Department deptBL = emp.getDepartmentNoWeaving();
+            System.out.println("1. before loading: deptBL=" + deptBL);
+            String deptNameBL = null;
+            if (deptBL != null) {
+                deptNameBL = deptBL.getName();
+                System.out.println("deptNameBL=" + deptNameBL);
+            }
+            // assert deptBL == null;
+            if (deptBL != null) {
+                status = false;
+            }
+
+            // 2. loading
+            String deptName = emp.getDepartment().getName();
+            System.out.println("2. loading, deptName = " + deptName);
+
+            // 3. get Department after loading
+            Department deptAL = emp.getDepartmentNoWeaving();
+            System.out.println("3. after loading: deptAL=" + deptAL);
+            String deptNameAL = deptAL.getName();
+            System.out.println("deptNameAL=" + deptNameAL);
+            // assert deptAL != null
+            // assert deptAL.getName == deptName;
+            if (deptAL == null || deptNameAL != deptName) {
+                status = false;
+            }
+        } catch (Exception ex) {
+            status = false;
+            ex.printStackTrace();
+        }
+        System.out.println("-----status = " + status + "---------");
+        return status;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/util/test/beans/wbinflib/TestBeanInWebInfLib.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/util/test/beans/wbinflib/TestBeanInWebInfLib.java
new file mode 100644
index 0000000..8e89576
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-javaee-injection/util/test/beans/wbinflib/TestBeanInWebInfLib.java
@@ -0,0 +1,84 @@
+/*
+ * 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.beans.wbinflib;
+
+import java.util.Set;
+
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.util.AnnotationLiteral;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+public class TestBeanInWebInfLib {
+    @Inject
+    BeanManager bm;
+    
+//    @Inject //@TestDatabase 
+//    EntityManager emf_at_inj;
+
+    @PersistenceContext(unitName="pu1")  
+    EntityManager emf_at_pu;
+
+    public String testInjection() {
+        if (bm == null)
+            return "Bean Manager not injected into the TestBean in WEB-INF/lib";
+        System.out.println("BeanManager injected in WEB-INF/lib bean is " + bm);
+
+        System.out.println("EMF injected in WEB-INF/lib bean is " + emf_at_pu);
+        if (emf_at_pu == null)
+            return "EMF injected via @PersistenceContext is not injected into " +
+            		"the TestBean packaged in WEB-INF/lib";
+        
+        Set<Bean<?>> webinfLibBeans = bm.getBeans(TestBeanInWebInfLib.class, new AnnotationLiteral<Any>() {});
+        if (webinfLibBeans.size() != 1)
+            return "TestBean in WEB-INF/lib is not available via the WEB-INF/lib "
+                    + "Bean's BeanManager";
+        System.out.println("BeanManager.getBeans(TestBeanInWebInfLib, Any):" + webinfLibBeans);
+        for (Bean b: webinfLibBeans) {
+            debug(b);
+        }
+
+        // Get the proxy delegate
+        org.jboss.weld.manager.BeanManagerImpl delegate =
+                                     ((org.jboss.weld.bean.builtin.BeanManagerProxy) bm).delegate();
+
+        Iterable<Bean<?>> accessibleBeans = delegate.getAccessibleBeans();
+        System.out.println("BeanManagerImpl.getAccessibleBeans:" + accessibleBeans);
+        for (Bean b : accessibleBeans) {
+            debug(b);
+        }
+
+        Iterable<Bean<?>> beans = delegate.getBeans();
+        System.out.println("BeanManagerImpl.getBeans:" + beans);
+        for (Bean b : beans) {
+            debug(b);
+        }
+        // success
+        return "";
+    }
+
+    private void debug(Bean b) {
+        String name = b.getBeanClass().getName();
+        if (name.indexOf("Test") != -1) {
+            System.out.println(name);
+        }
+
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/README
new file mode 100644
index 0000000..b055956
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/README
@@ -0,0 +1,5 @@
+GLASSFISH-15735 scenario
+with the ordering reversed.
+alpha.jar has "Bar"(that requires Foo to be injected)
+bravo.jar has "Foo"
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/WebTest.java
new file mode 100644
index 0000000..1481991
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/WebTest.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "cdi-servlet-annotation-with-web-inf-lib-with-ordering-reversed";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0. initParams: n1=v1, n2=v2";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for @WebServlet");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/build.properties
new file mode 100644
index 0000000..c6b5b5a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-servlet-annotation-with-web-inf-lib-with-ordering-reversed"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/build.xml
new file mode 100644
index 0000000..66a8829
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/build.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+        <delete file="lib/alpha.jar"/>
+        <delete file="lib/bravo.jar"/>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <!-- create WEB-INF/lib/bravo.jar -->
+        <mkdir dir="${build.classes.dir}"/>
+        <mkdir dir="${build.classes.dir}/META-INF"/>
+        <javac srcdir="util1" destdir="${build.classes.dir}" classpath="${s1astest.classpath}" debug="on" source="1.6"/>
+        <copy file="descriptor/beans.xml" tofile="${build.classes.dir}/META-INF/beans.xml"/>
+        <jar destfile="lib/bravo.jar">
+            <fileset dir="${build.classes.dir}"/>
+        </jar>
+        <delete dir="${build.classes.dir}"/>
+
+         <!-- create WEB-INF/lib/alpha.jar -->
+        <mkdir dir="${build.classes.dir}"/>
+        <mkdir dir="${build.classes.dir}/META-INF"/>
+        <javac srcdir="util1" destdir="${build.classes.dir}" classpath="${s1astest.classpath}" debug="on" source="1.6"/>
+        <javac srcdir="util2" destdir="${build.classes.dir}" classpath="${s1astest.classpath}" debug="on" source="1.6"/>
+        <delete file="${build.classes.dir}/Foo.class"/>
+        <copy file="descriptor/beans.xml" tofile="${build.classes.dir}/META-INF/beans.xml"/>
+        <jar destfile="lib/alpha.jar">
+            <fileset dir="${build.classes.dir}"/>
+        </jar>
+        <delete dir="${build.classes.dir}"/>
+
+        <!-- compile test servlet -->     
+        <mkdir dir="${build.classes.dir}"/>
+        <echo message="common.xml: Compiling test source files" level="verbose"/>
+        <mkdir dir="servlet"/>
+        <javac srcdir="servlet" destdir="${build.classes.dir}" classpath="${s1astest.classpath}:lib/alpha.jar:lib/bravo.jar" debug="on" failonerror="true"/>
+    </target>
+
+    <target name="build" depends="compile">
+       <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/lib/slf4j-api-1.7.25.jar b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/lib/slf4j-api-1.7.25.jar
new file mode 100644
index 0000000..0143c09
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/lib/slf4j-api-1.7.25.jar
Binary files differ
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/lib/slf4j-simple-1.7.25.jar b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/lib/slf4j-simple-1.7.25.jar
new file mode 100644
index 0000000..a7260f3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/lib/slf4j-simple-1.7.25.jar
Binary files differ
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/servlet/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/servlet/TestBean.java
new file mode 100644
index 0000000..c696caf
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/servlet/TestBean.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+//Simple TestBean to test CDI. 
+public class TestBean 
+{
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/servlet/TestLoggerProducer.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/servlet/TestLoggerProducer.java
new file mode 100644
index 0000000..f8e08a7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/servlet/TestLoggerProducer.java
@@ -0,0 +1,28 @@
+/*
+ * 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 javax.enterprise.inject.Produces;
+
+
+public class TestLoggerProducer {
+    @Produces
+    public org.jboss.logging.Logger getLogger(){
+        org.jboss.logging.Logger l = org.jboss.logging.Logger.getLogger(TestLoggerProducer.class);
+        System.out.println("getLogger:: " + l);
+        return l;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/servlet/TestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/servlet/TestServlet.java
new file mode 100644
index 0000000..e3cf013
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/servlet/TestServlet.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.IOException;
+import java.io.PrintWriter;
+import java.util.Enumeration;
+import java.util.Set;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.inject.Inject;
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Default;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.util.AnnotationLiteral;
+import javax.naming.InitialContext;
+
+@WebServlet(name="mytest",
+        urlPatterns={"/myurl"},
+        initParams={ @WebInitParam(name="n1", value="v1"), @WebInitParam(name="n2", value="v2") } )
+public class TestServlet extends HttpServlet {
+    @Inject TestBean tb;
+    @Inject BeanManager bm;
+
+    @Inject Foo f; //from WEB-INF/lib/alpha.jar
+    @Inject Bar b; //from WEB-INF/lib/bravo.jar
+
+
+    BeanManager bm1;
+    
+    @Inject 
+    private transient org.jboss.logging.Logger log;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0. ");
+        String msg = "n1=" + getInitParameter("n1") +
+            ", n2=" + getInitParameter("n2");
+        
+        //Bean Injection
+        if (tb == null) msg += "Bean injection into Servlet failed";
+
+        if (f == null) msg += "Bean injection of a TestBean(foo) in WEB-INF/lib/alpha.jar into Servlet failed";
+        System.out.println("Test Bean foo from WEB-INF/lib/alpha.jar=" + f);
+
+        if (b == null) msg += "Bean injection of a TestBean(bar) in WEB-INF/lib/bravo.jar into Servlet failed";
+        System.out.println("Test Bean foo from WEB-INF/lib/bravo.jar=" + b);
+
+        //BeanManager Injection
+        System.out.println("BeanManager is " + bm);
+        if (bm == null) msg += "BeanManager Injection via @Inject failed";
+
+        try {
+            bm1 = (BeanManager)((new InitialContext()).lookup("java:comp/BeanManager"));
+            System.out.println("BeanManager via lookup is " + bm1);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            msg += "BeanManager Injection via component environment lookup failed";
+        }
+        if (bm1 == null) msg += "BeanManager Injection via component environment lookup failed";
+
+        //Check if Beans in WAR(WEB-INF/classes) and WEB-INF/lib/*.jar are visible
+        //via BeanManager of WAR
+        Set warBeans = bm.getBeans(TestBean.class,new AnnotationLiteral<Any>() {});
+        if (warBeans.size() != 1) msg += "TestBean in WAR is not available via the WAR BeanManager";
+        
+        Set webinfLibBeans = bm.getBeans(Foo.class,new AnnotationLiteral<Any>() {});
+        if (webinfLibBeans.size() != 1) msg += "TestBean Foo in WEB-INF/lib/alpha.jar is not available via the WAR BeanManager";
+        System.out.println("Test Bean Foo from WEB-INF/lib/alpha.jar via BeanManager:" + webinfLibBeans);
+        
+        webinfLibBeans = bm.getBeans(Bar.class,new AnnotationLiteral<Any>() {});
+        if (webinfLibBeans.size() != 1) msg += "TestBean Bar in WEB-INF/lib/bravo.jar is not available via the WAR BeanManager";
+        System.out.println("Test Bean Bar from WEB-INF/lib/bravo.jar via BeanManager:" + webinfLibBeans);
+
+        writer.write("initParams: " + msg + "\n");
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/util1/Foo.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/util1/Foo.java
new file mode 100644
index 0000000..9ee6ebb
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/util1/Foo.java
@@ -0,0 +1,19 @@
+/*
+ * 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
+ */
+
+@javax.enterprise.context.RequestScoped
+public class Foo {
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/util2/Bar.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/util2/Bar.java
new file mode 100644
index 0000000..f15bc53
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering-reversed/util2/Bar.java
@@ -0,0 +1,21 @@
+/*
+ * 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
+ */
+
+@javax.enterprise.context.RequestScoped
+public class Bar{
+@javax.inject.Inject
+Foo f;
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/README
new file mode 100644
index 0000000..78565b8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/README
@@ -0,0 +1,2 @@
+GLASSFISH-15735
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/WebTest.java
new file mode 100644
index 0000000..0bb3666
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/WebTest.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "cdi-servlet-annotation-with-web-inf-lib-with-ordering";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0. initParams: n1=v1, n2=v2";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for @WebServlet");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/build.properties
new file mode 100644
index 0000000..542d011
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-servlet-annotation-with-web-inf-lib-with-ordering"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/build.xml
new file mode 100644
index 0000000..3598ebd
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/build.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+        <delete file="lib/alpha.jar"/>
+        <delete file="lib/bravo.jar"/>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <!-- create WEB-INF/lib/alpha.jar -->
+        <mkdir dir="${build.classes.dir}"/>
+        <mkdir dir="${build.classes.dir}/META-INF"/>
+        <javac srcdir="util1" destdir="${build.classes.dir}" classpath="${s1astest.classpath}" debug="on" source="1.6"/>
+        <copy file="descriptor/beans.xml" tofile="${build.classes.dir}/META-INF/beans.xml"/>
+        <jar destfile="lib/alpha.jar">
+            <fileset dir="${build.classes.dir}"/>
+        </jar>
+        <delete dir="${build.classes.dir}"/>
+
+         <!-- create WEB-INF/lib/bravo.jar -->
+        <mkdir dir="${build.classes.dir}"/>
+        <mkdir dir="${build.classes.dir}/META-INF"/>
+        <javac srcdir="util1" destdir="${build.classes.dir}" classpath="${s1astest.classpath}" debug="on" source="1.6"/>
+        <javac srcdir="util2" destdir="${build.classes.dir}" classpath="${s1astest.classpath}" debug="on" source="1.6"/>
+        <delete file="${build.classes.dir}/Foo.class"/>
+        <copy file="descriptor/beans.xml" tofile="${build.classes.dir}/META-INF/beans.xml"/>
+        <jar destfile="lib/bravo.jar">
+            <fileset dir="${build.classes.dir}"/>
+        </jar>
+        <delete dir="${build.classes.dir}"/>
+
+        <!-- compile test servlet -->     
+        <mkdir dir="${build.classes.dir}"/>
+        <echo message="common.xml: Compiling test source files" level="verbose"/>
+        <mkdir dir="servlet"/>
+        <javac srcdir="servlet" destdir="${build.classes.dir}" classpath="${s1astest.classpath}:lib/alpha.jar:lib/bravo.jar" debug="on" failonerror="true"/>
+    </target>
+
+    <target name="build" depends="compile">
+       <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/lib/slf4j-api-1.7.25.jar b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/lib/slf4j-api-1.7.25.jar
new file mode 100644
index 0000000..0143c09
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/lib/slf4j-api-1.7.25.jar
Binary files differ
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/lib/slf4j-simple-1.7.25.jar b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/lib/slf4j-simple-1.7.25.jar
new file mode 100644
index 0000000..a7260f3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/lib/slf4j-simple-1.7.25.jar
Binary files differ
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/servlet/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/servlet/TestBean.java
new file mode 100644
index 0000000..c696caf
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/servlet/TestBean.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+//Simple TestBean to test CDI. 
+public class TestBean 
+{
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/servlet/TestLoggerProducer.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/servlet/TestLoggerProducer.java
new file mode 100644
index 0000000..f8e08a7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/servlet/TestLoggerProducer.java
@@ -0,0 +1,28 @@
+/*
+ * 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 javax.enterprise.inject.Produces;
+
+
+public class TestLoggerProducer {
+    @Produces
+    public org.jboss.logging.Logger getLogger(){
+        org.jboss.logging.Logger l = org.jboss.logging.Logger.getLogger(TestLoggerProducer.class);
+        System.out.println("getLogger:: " + l);
+        return l;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/servlet/TestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/servlet/TestServlet.java
new file mode 100644
index 0000000..e3cf013
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/servlet/TestServlet.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.IOException;
+import java.io.PrintWriter;
+import java.util.Enumeration;
+import java.util.Set;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.inject.Inject;
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Default;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.util.AnnotationLiteral;
+import javax.naming.InitialContext;
+
+@WebServlet(name="mytest",
+        urlPatterns={"/myurl"},
+        initParams={ @WebInitParam(name="n1", value="v1"), @WebInitParam(name="n2", value="v2") } )
+public class TestServlet extends HttpServlet {
+    @Inject TestBean tb;
+    @Inject BeanManager bm;
+
+    @Inject Foo f; //from WEB-INF/lib/alpha.jar
+    @Inject Bar b; //from WEB-INF/lib/bravo.jar
+
+
+    BeanManager bm1;
+    
+    @Inject 
+    private transient org.jboss.logging.Logger log;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0. ");
+        String msg = "n1=" + getInitParameter("n1") +
+            ", n2=" + getInitParameter("n2");
+        
+        //Bean Injection
+        if (tb == null) msg += "Bean injection into Servlet failed";
+
+        if (f == null) msg += "Bean injection of a TestBean(foo) in WEB-INF/lib/alpha.jar into Servlet failed";
+        System.out.println("Test Bean foo from WEB-INF/lib/alpha.jar=" + f);
+
+        if (b == null) msg += "Bean injection of a TestBean(bar) in WEB-INF/lib/bravo.jar into Servlet failed";
+        System.out.println("Test Bean foo from WEB-INF/lib/bravo.jar=" + b);
+
+        //BeanManager Injection
+        System.out.println("BeanManager is " + bm);
+        if (bm == null) msg += "BeanManager Injection via @Inject failed";
+
+        try {
+            bm1 = (BeanManager)((new InitialContext()).lookup("java:comp/BeanManager"));
+            System.out.println("BeanManager via lookup is " + bm1);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            msg += "BeanManager Injection via component environment lookup failed";
+        }
+        if (bm1 == null) msg += "BeanManager Injection via component environment lookup failed";
+
+        //Check if Beans in WAR(WEB-INF/classes) and WEB-INF/lib/*.jar are visible
+        //via BeanManager of WAR
+        Set warBeans = bm.getBeans(TestBean.class,new AnnotationLiteral<Any>() {});
+        if (warBeans.size() != 1) msg += "TestBean in WAR is not available via the WAR BeanManager";
+        
+        Set webinfLibBeans = bm.getBeans(Foo.class,new AnnotationLiteral<Any>() {});
+        if (webinfLibBeans.size() != 1) msg += "TestBean Foo in WEB-INF/lib/alpha.jar is not available via the WAR BeanManager";
+        System.out.println("Test Bean Foo from WEB-INF/lib/alpha.jar via BeanManager:" + webinfLibBeans);
+        
+        webinfLibBeans = bm.getBeans(Bar.class,new AnnotationLiteral<Any>() {});
+        if (webinfLibBeans.size() != 1) msg += "TestBean Bar in WEB-INF/lib/bravo.jar is not available via the WAR BeanManager";
+        System.out.println("Test Bean Bar from WEB-INF/lib/bravo.jar via BeanManager:" + webinfLibBeans);
+
+        writer.write("initParams: " + msg + "\n");
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/util1/Foo.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/util1/Foo.java
new file mode 100644
index 0000000..9ee6ebb
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/util1/Foo.java
@@ -0,0 +1,19 @@
+/*
+ * 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
+ */
+
+@javax.enterprise.context.RequestScoped
+public class Foo {
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/util2/Bar.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/util2/Bar.java
new file mode 100644
index 0000000..f15bc53
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib-ordering/util2/Bar.java
@@ -0,0 +1,21 @@
+/*
+ * 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
+ */
+
+@javax.enterprise.context.RequestScoped
+public class Bar{
+@javax.inject.Inject
+Foo f;
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/README
new file mode 100644
index 0000000..b004f04
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/README
@@ -0,0 +1,4 @@
+A simple WAR with a bean archive in WEB-INF/lib. The visibility of the Bean bundled in WAR(WEB-INF/classes) and WEB-INF/lib 
+is tested in the WAR's BeanManager
+
+GLASSFISH-15721
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/WebTest.java
new file mode 100644
index 0000000..1ea710b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/WebTest.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "cdi-servlet-annotation-with-web-inf-lib";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0. initParams: n1=v1, n2=v2";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for @WebServlet");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/build.properties
new file mode 100644
index 0000000..bb7bc8d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-servlet-annotation-with-web-inf-lib"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/build.xml
new file mode 100644
index 0000000..3b2d3f1
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/build.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+        <delete file="lib/bean-lib.jar"/>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <!-- create WEB-INF/lib/bean-lib.jar -->
+        <mkdir dir="${build.classes.dir}"/>
+        <mkdir dir="${build.classes.dir}/META-INF"/>
+        <javac srcdir="servlet" includes="TestBean.java" destdir="${build.classes.dir}" classpath="${s1astest.classpath}" debug="on" source="1.6"/>
+        <javac srcdir="util" destdir="${build.classes.dir}" classpath="${s1astest.classpath}" debug="on" source="1.6"/>
+        <copy file="descriptor/beans.xml" tofile="${build.classes.dir}/META-INF/beans.xml"/>
+        <delete file="${build.classes.dir}/TestBean.class" /> <!-- This is included in the WAR below -->
+
+        <jar destfile="lib/bean-lib.jar">
+            <fileset dir="${build.classes.dir}"/>
+        </jar>
+        <delete dir="${build.classes.dir}"/>
+   
+        <!-- compile test servlet -->     
+        <mkdir dir="${build.classes.dir}"/>
+        <echo message="common.xml: Compiling test source files" level="verbose"/>
+        <mkdir dir="servlet"/>
+        <javac srcdir="servlet" destdir="${build.classes.dir}" classpath="${s1astest.classpath}:lib/bean-lib.jar" debug="on" failonerror="true"/>
+    </target>
+
+    <target name="build" depends="compile">
+       <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/lib/slf4j-api-1.7.25.jar b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/lib/slf4j-api-1.7.25.jar
new file mode 100644
index 0000000..0143c09
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/lib/slf4j-api-1.7.25.jar
Binary files differ
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/lib/slf4j-simple-1.7.25.jar b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/lib/slf4j-simple-1.7.25.jar
new file mode 100644
index 0000000..a7260f3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/lib/slf4j-simple-1.7.25.jar
Binary files differ
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/servlet/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/servlet/TestBean.java
new file mode 100644
index 0000000..c696caf
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/servlet/TestBean.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+//Simple TestBean to test CDI. 
+public class TestBean 
+{
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/servlet/TestLoggerProducer.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/servlet/TestLoggerProducer.java
new file mode 100644
index 0000000..f8e08a7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/servlet/TestLoggerProducer.java
@@ -0,0 +1,28 @@
+/*
+ * 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 javax.enterprise.inject.Produces;
+
+
+public class TestLoggerProducer {
+    @Produces
+    public org.jboss.logging.Logger getLogger(){
+        org.jboss.logging.Logger l = org.jboss.logging.Logger.getLogger(TestLoggerProducer.class);
+        System.out.println("getLogger:: " + l);
+        return l;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/servlet/TestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/servlet/TestServlet.java
new file mode 100644
index 0000000..9145274
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/servlet/TestServlet.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.IOException;
+import java.io.PrintWriter;
+import java.util.Enumeration;
+import java.util.Set;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.inject.Inject;
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Default;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.util.AnnotationLiteral;
+import javax.naming.InitialContext;
+
+@WebServlet(name="mytest",
+        urlPatterns={"/myurl"},
+        initParams={ @WebInitParam(name="n1", value="v1"), @WebInitParam(name="n2", value="v2") } )
+public class TestServlet extends HttpServlet {
+    @Inject TestBean tb;
+    @Inject BeanManager bm;
+    @Inject TestBeanInWebInfLib tbiwil;
+
+    BeanManager bm1;
+    
+    @Inject 
+    private transient org.jboss.logging.Logger log;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0. ");
+        String msg = "n1=" + getInitParameter("n1") +
+            ", n2=" + getInitParameter("n2");
+
+        if (tb == null) msg += "Bean injection into Servlet failed";
+        if (tbiwil == null) msg += "Bean injection of a TestBean in WEB-INF/lib into Servlet failed";
+        System.out.println("Test Bean from WEB-INF/lib=" + tbiwil);
+
+        System.out.println("BeanManager is " + bm);
+        System.out.println("BeanManager via lookup is " + bm1);
+        if (bm == null) msg += "BeanManager Injection via @Inject failed";
+        try {
+            bm1 = (BeanManager)((new InitialContext()).lookup("java:comp/BeanManager"));
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            msg += "BeanManager Injection via component environment lookup failed";
+        }
+        if (bm1 == null) msg += "BeanManager Injection via component environment lookup failed";
+
+        //Check if Beans in WAR(WEB-INF/classes) and WEB-INF/lib/*.jar are visible
+        //via BeanManager of WAR
+        Set warBeans = bm.getBeans(TestBean.class,new AnnotationLiteral<Any>() {});
+        if (warBeans.size() != 1) msg += "TestBean in WAR is not available via the WAR BeanManager";
+        
+        Set webinfLibBeans = bm.getBeans(TestBeanInWebInfLib.class,new AnnotationLiteral<Any>() {});
+        if (webinfLibBeans.size() != 1) msg += "TestBean in WEB-INF/lib is not available via the WAR BeanManager";
+        System.out.println("Test Bean from WEB-INF/lib via BeanManager:" + webinfLibBeans);
+        
+        //Test injection into WEB-INF/lib beans
+        msg += tbiwil.testInjection();
+        
+        writer.write("initParams: " + msg + "\n");
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/util/TestBeanInWebInfLib.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/util/TestBeanInWebInfLib.java
new file mode 100644
index 0000000..2658910
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/cdi-servlet-3.0-annotation-with-web-inf-lib/util/TestBeanInWebInfLib.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.Set;
+
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.util.AnnotationLiteral;
+import javax.inject.Inject;
+import javax.enterprise.inject.spi.Bean;
+
+public class TestBeanInWebInfLib {
+    @Inject
+    BeanManager bm;
+
+    @Inject
+    TestBean tb;
+
+    public String testInjection() {
+        if (bm == null) {
+            return "Bean Manager not injected into the TestBean in WEB-INF/lib";
+        }
+        System.out.println("BeanManager in WEB-INF/lib bean is " + bm);
+
+        if (tb == null) {
+            return "Injection of WAR's TestBean into the TestBean in WEB-INF/lib failed";
+        }
+
+        Set<Bean<?>> webinfLibBeans = bm.getBeans(TestBeanInWebInfLib.class,
+                                                  new AnnotationLiteral<Any>() {});
+        if (webinfLibBeans.size() != 1){
+            return "TestBean in WEB-INF/lib is not available via the WEB-INF/lib Bean's BeanManager";
+        }
+
+        // success
+        return "";
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/README
new file mode 100644
index 0000000..344a368
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/README
@@ -0,0 +1,10 @@
+- Test support for enabled beans' classes deployed as an embedded RAR
+[test originally from embeddedConnector1.5 test in Connectors developer tests]
+section 12.1. Bean archives of JSR 299 spec:
+
+"Bean classes of enabled beans must be deployed in bean archives.
+• A library jar, EJB jar, application client jar or rar archive is a
+bean archive if it has a file named beans.xml in the META-INF
+directory."
+
+In this test, an embedded RAR has a TestCDIBean Bean class. This is injected into a MDB in another ejb-jar in the EAR.
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/META-INF/application.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/META-INF/application.xml
new file mode 100644
index 0000000..c911361
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/META-INF/application.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE application PUBLIC '-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN' 'http://java.sun.com/dtd/application_1_3.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
+
+-->
+
+<application>
+  <display-name>GenericMessageDrivenBean</display-name>
+  <description>Application description</description>
+  <module>
+    <connector>generic-ra.rar</connector>
+  </module>
+  <module>
+    <ejb>generic-embedded-ejb.jar</ejb>
+  </module>
+  <module>
+    <java>generic-embedded-client.jar</java>
+  </module>
+</application>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/build.xml
new file mode 100644
index 0000000..8be2ab7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/build.xml
@@ -0,0 +1,110 @@
+<!--
+
+    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 common SYSTEM "../../../../../config/common.xml">
+  <!ENTITY testcommon SYSTEM "../../../../../config/properties.xml">
+  <!ENTITY database SYSTEM "../../../config/database.xml">
+]>
+
+<project name="connector1.5 MDB" default="all" basedir=".">
+
+  <property name="j2ee.home" value="../../.."/>
+  <property name="earfile" value="generic-embedded.ear"/>
+
+
+  <!-- include common.xml and testcommon.xml -->
+  &database;
+  &common;
+  &testcommon;
+
+  <target name="all" depends="init-common, clean-common">
+   <ant dir="src" inheritAll="false" target="all"/>
+   <antcall target="build-ear"/>
+ <!--
+   <antcall target="ear-common">
+	<param name="appname" value="generic-embedded"/>
+	<param name="application.xml" value="META-INF/application.xml"/>
+   </antcall>
+ -->
+  </target>
+
+  <target name="build-ear">
+
+     <delete file="${assemble.dir}/generic-embeddedApp.ear"/>
+     <mkdir dir="${assemble.dir}"/>
+     <mkdir dir="${build.classes.dir}/META-INF"/>
+     <ear earfile="${assemble.dir}/generic-embeddedApp.ear"
+       appxml="META-INF/application.xml">
+            
+       <fileset dir="${assemble.dir}">
+            <include name="*.jar"/>
+            <include name="*.war"/>
+       </fileset>
+       <fileset dir="../ra">
+           <include name="*.rar"/>
+       </fileset>
+       <fileset dir="${env.APS_HOME}/lib">
+           <include name="reporter.jar"/>
+       </fileset>
+     </ear>
+
+  </target>
+
+  <target name="setupJdbc" depends="init-common">
+      <antcall target="create-jdbc-conpool-connector">
+        <param name="db.class" value="org.apache.derby.jdbc.ClientXADataSource"/>
+        <param name="jdbc.conpool.name" value="jdbc-pointbase-pool1"/>
+        <param name="jdbc.resource.type" value="javax.sql.XADataSource"/>
+      </antcall>
+      <antcall target="create-jdbc-resource-common">
+        <param name="jdbc.conpool.name" value="jdbc-pointbase-pool1"/>
+        <param name="jdbc.resource.name" value="jdbc/XAPointbase"/>
+      </antcall>
+
+      <antcall target="execute-sql-connector">
+        <param name="sql.file" value="createdb.sql"/>
+      </antcall>
+   </target>
+
+  <target name="unsetJdbc" depends="init-common">
+      <antcall target="delete-jdbc-resource-common">
+        <param name="jdbc.resource.name" value="jdbc/XAPointbase"/>
+      </antcall>
+     <antcall target="delete-jdbc-connpool-common">
+        <param name="jdbc.conpool.name" value="jdbc-pointbase-pool1"/>
+      </antcall>
+  </target>
+
+  <target name="deploy-ear" depends="init-common">
+    <antcall target="deploy-common">
+      <param name="appname" value="generic-embedded"/>
+    </antcall>
+  </target>
+
+  <target name="undeploy" depends="init-common">
+    <antcall target="undeploy-common">
+      <param name="deployedapp.name" value="generic-embeddedApp"/>
+      <param name="appname" value="generic-embedded"/>
+    </antcall>
+  </target>
+
+  <target name="clean">
+    <antcall target="clean-common"/>
+  </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/createdb.sql b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/createdb.sql
new file mode 100644
index 0000000..7d93610
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/createdb.sql
@@ -0,0 +1,2 @@
+drop table MESSAGES;
+create table MESSAGES (messageId CHAR(50), message varchar(80));
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/META-INF/application-client.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/META-INF/application-client.xml
new file mode 100644
index 0000000..766d51c
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/META-INF/application-client.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE application-client PUBLIC '-//Sun Microsystems, Inc.//DTD J2EE Application Client 1.3//EN' 'http://java.sun.com/dtd/application-client_1_3.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
+
+-->
+
+<application-client>
+  <display-name>generic-embeddedClient</display-name>
+</application-client>
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/META-INF/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/META-INF/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/META-INF/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/META-INF/ejb-jar.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/META-INF/ejb-jar.xml
new file mode 100644
index 0000000..696dd3e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/META-INF/ejb-jar.xml
@@ -0,0 +1,112 @@
+<?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"
+         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"
+         version="2.1">
+  <display-name>Ejb1</display-name>
+  <enterprise-beans>
+    <message-driven>
+      <display-name>Generic_Message_Bean</display-name>
+      <ejb-name>GenericMessageBean</ejb-name>
+      <ejb-class>mdb.MyMessageBean</ejb-class>
+      <messaging-type>connector.MyMessageListener</messaging-type>
+      <transaction-type>Container</transaction-type>
+      <activation-config>
+        <activation-config-property>
+          <activation-config-property-name>
+            DestinationType
+          </activation-config-property-name>
+          <activation-config-property-value>
+            java.lang.String
+          </activation-config-property-value>
+        </activation-config-property>
+        <activation-config-property>
+          <activation-config-property-name>
+            TestProp
+          </activation-config-property-name>
+          <activation-config-property-value>
+            WrongValue
+          </activation-config-property-value>
+        </activation-config-property>
+      </activation-config>
+      <resource-ref>
+        <description>description</description>
+        <res-ref-name>MyDB</res-ref-name>
+        <res-type>javax.sql.DataSource</res-type>
+        <res-auth>Container</res-auth>
+        <res-sharing-scope>Shareable</res-sharing-scope>
+      </resource-ref>
+    </message-driven>
+    <session>
+      <display-name>MyMessageChecker</display-name>
+      <ejb-name>MyMessageChecker</ejb-name>
+      <home>beans.MessageCheckerHome</home>
+      <remote>beans.MessageChecker</remote>
+      <ejb-class>beans.MessageCheckerEJB</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>PBPUBLIC</env-entry-value>
+      </env-entry>
+      <env-entry>
+        <env-entry-name>password</env-entry-name>
+        <env-entry-type>java.lang.String</env-entry-type>
+        <env-entry-value>PBPUBLIC</env-entry-value>
+      </env-entry>
+      <resource-ref>
+        <res-ref-name>MyDB</res-ref-name>
+        <res-type>javax.sql.DataSource</res-type>
+        <res-auth>Container</res-auth>
+        <res-sharing-scope>Shareable</res-sharing-scope>
+      </resource-ref>
+      <resource-env-ref>
+	<resource-env-ref-name>eis/testAdmin</resource-env-ref-name>
+	<resource-env-ref-type>connector.MyAdminObject</resource-env-ref-type>
+      </resource-env-ref>
+      <security-identity>
+        <use-caller-identity/>
+      </security-identity>
+    </session>
+  </enterprise-beans>
+  <assembly-descriptor>
+    <container-transaction>
+      <method>
+        <ejb-name>GenericMessageBean</ejb-name>
+        <method-name>onMessage</method-name>
+        <method-params>
+          <method-param>java.lang.String</method-param>
+        </method-params>
+      </method>
+      <trans-attribute>Required</trans-attribute>
+    </container-transaction>
+    <container-transaction>
+      <method>
+        <ejb-name>MyMessageChecker</ejb-name>
+        <method-intf>Remote</method-intf>
+        <method-name>getMessageCount</method-name>
+      </method>
+      <trans-attribute>Required</trans-attribute>
+    </container-transaction>
+  </assembly-descriptor>
+</ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/META-INF/sun-application-client.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/META-INF/sun-application-client.xml
new file mode 100644
index 0000000..2b9166a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/META-INF/sun-application-client.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE sun-application-client PUBLIC "-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 7.0 Application Client 1.3//EN" "http://www.sun.com/software/sunone/appserver/dtds/sun-application-client_1_3-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>
+</sun-application-client>
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/META-INF/sun-ejb-jar.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/META-INF/sun-ejb-jar.xml
new file mode 100644
index 0000000..de701df
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/META-INF/sun-ejb-jar.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 7.0 EJB 2.0//EN" "http://www.sun.com/software/sunone/appserver/dtds/sun-ejb-jar_2_0-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>
+    <module-name>ejb.jar</module-name>
+    <unique-id>1</unique-id>
+    <ejb>
+      <ejb-name>GenericMessageBean</ejb-name>
+      <mdb-resource-adapter>
+        <resource-adapter-mid>generic-embeddedApp#generic-ra</resource-adapter-mid>
+        <activation-config>
+          <activation-config-property>
+            <activation-config-property-name>DestinationName</activation-config-property-name>
+            <activation-config-property-value>Foo</activation-config-property-value>
+          </activation-config-property>
+          <activation-config-property>
+            <activation-config-property-name>TestProp</activation-config-property-name>
+            <activation-config-property-value>RightValue</activation-config-property-value>
+          </activation-config-property>
+        </activation-config>
+      </mdb-resource-adapter>
+      <ior-security-config>
+        <transport-config>
+          <integrity>supported</integrity>
+          <confidentiality>supported</confidentiality>
+          <establish-trust-in-target>supported</establish-trust-in-target>
+          <establish-trust-in-client>supported</establish-trust-in-client>
+        </transport-config>
+        <as-context>
+          <auth-method>username_password</auth-method>
+          <realm>default</realm>
+          <required>true</required>
+        </as-context>
+        <sas-context>
+          <caller-propagation>supported</caller-propagation>
+        </sas-context>
+      </ior-security-config>
+      <resource-ref>
+        <res-ref-name>MyDB</res-ref-name>
+        <jndi-name>jdbc/XAPointbase</jndi-name>
+      </resource-ref>
+      <gen-classes />
+    </ejb>
+    <ejb>
+      <ejb-name>MyMessageChecker</ejb-name>
+      <jndi-name>MyMessageChecker</jndi-name>
+      <ior-security-config>
+        <transport-config>
+          <integrity>supported</integrity>
+          <confidentiality>supported</confidentiality>
+          <establish-trust-in-target>supported</establish-trust-in-target>
+          <establish-trust-in-client>supported</establish-trust-in-client>
+        </transport-config>
+        <as-context>
+          <auth-method>username_password</auth-method>
+          <realm>default</realm>
+          <required>false</required>
+        </as-context>
+        <sas-context>
+          <caller-propagation>supported</caller-propagation>
+        </sas-context>
+      </ior-security-config>
+      <resource-ref>
+        <res-ref-name>MyDB</res-ref-name>
+        <jndi-name>jdbc/XAPointbase</jndi-name>
+      </resource-ref>
+      <resource-env-ref>
+        <resource-env-ref-name>eis/testAdmin</resource-env-ref-name>
+	<jndi-name>eis/testAdmin</jndi-name>
+      </resource-env-ref>
+      <gen-classes/>
+    </ejb>
+  </enterprise-beans>
+</sun-ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/beans/MessageChecker.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/beans/MessageChecker.java
new file mode 100644
index 0000000..f582a2a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/beans/MessageChecker.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 beans;
+
+import java.rmi.RemoteException;
+
+import javax.ejb.EJBObject;
+
+public interface MessageChecker extends EJBObject {
+    int getMessageCount() throws RemoteException;
+    boolean done() throws RemoteException;
+    int expectedResults() throws RemoteException;
+    void notifyAndWait() throws RemoteException;
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/beans/MessageCheckerEJB.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/beans/MessageCheckerEJB.java
new file mode 100644
index 0000000..2751b06
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/beans/MessageCheckerEJB.java
@@ -0,0 +1,189 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 beans;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Properties;
+
+import javax.ejb.CreateException;
+import javax.ejb.EJBException;
+import javax.ejb.SessionBean;
+import javax.ejb.SessionContext;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.sql.DataSource;
+
+import connector.MyAdminObject;
+
+public class MessageCheckerEJB implements SessionBean {
+
+    private int WAIT_TIME = 15;
+    private String user = "j2ee";
+    private String password = "j2ee";
+    private Properties beanProps = null;
+    private SessionContext sessionContext = null;
+    private Connection heldCon = null;
+    private MyAdminObject Controls;
+
+    public MessageCheckerEJB() {}
+
+    public void ejbCreate() 
+        throws CreateException {
+        System.out.println("bean removed");
+        heldCon = null;
+        /*
+          if (holdConnection) {
+          try {
+          heldCon = getDBConnection();
+          } catch (Exception ex) {
+          ex.printStackTrace();
+          throw new CreateException("Error in ejbCreate");
+          }
+          }
+        */
+    }
+
+    public boolean done() {
+        return Controls.done();
+    }
+
+    public int expectedResults() {
+        return Controls.expectedResults();
+    }
+
+    public void notifyAndWait() {
+        try {
+            synchronized (Controls.getLockObject()) {
+                //Tell the resource adapter the client is ready to run
+                Controls.getLockObject().notifyAll(); 
+                
+                debug("NOTIFIED... START WAITING");
+                //Wait until being told to read from the database
+                Controls.getLockObject().wait(); 
+            }
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    public int getMessageCount() {
+	try {
+            Connection con = getFreshConnection();
+            int count1 = getCount(con);
+            con.close();
+            
+	    /*
+            synchronized(Controls.getLockObject()) {
+                Controls.getLockObject().notify();
+            }
+	    */
+                
+            return count1;
+        } catch (Exception e) {
+            e.printStackTrace(System.out);
+            throw new EJBException(e);
+	}
+    }
+
+    private int getCount(Connection con) throws SQLException {
+        Statement stmt = con.createStatement();
+        int count = 0;
+        String messages = "";
+        ResultSet result = stmt.executeQuery(
+                "SELECT messageId, message "+ "FROM messages");
+        while (result.next()) {
+            count++;
+            messages = messages + " - " + result.getString("messageId")+" "+
+                result.getString("message") + "\n";
+        }
+        messages = messages + "count = " + count;
+        System.out.println(messages);
+        stmt.close();
+        return count;
+    }
+
+    public void setSessionContext(SessionContext context) {
+        sessionContext = context;
+        try {
+            Context ic = new InitialContext();
+            user = (String) ic.lookup("java:comp/env/user");
+            password = (String) ic.lookup("java:comp/env/password");
+	    Controls = (MyAdminObject) ic.lookup("java:comp/env/eis/testAdmin");
+	    System.out.println("CALLING INITILIZE ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]");
+	    Controls.initialize();
+	    System.out.println("CALLED INITILIZE ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]");
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    public void ejbRemove() {
+        System.out.println("bean removed");
+    }
+
+    public void ejbActivate() {
+        System.out.println("bean activated");
+    }
+
+    public void ejbPassivate() {
+        System.out.println("bean passivated");
+    }
+
+    private Connection getFreshConnection() throws Exception {
+        Connection oldHeldCon = heldCon;
+        heldCon = null;
+        Connection result = getDBConnection();
+        heldCon = oldHeldCon;
+        return result;
+    }
+
+    private Connection getDBConnection() throws Exception {
+        if (heldCon != null) return heldCon;
+        Connection con = null;
+        try {
+            Context ic = new InitialContext();
+            DataSource ds = (DataSource) ic.lookup("java:comp/env/MyDB");
+            debug("Looked up Datasource\n");
+            debug("Get JDBC connection, auto sign on");
+            con = ds.getConnection();
+            
+            if (con != null) {
+                return con;
+            } else {
+                throw new Exception("Unable to get database connection ");
+            }
+        } catch (SQLException ex1) {
+            //ex1.printStackTrace();
+            throw ex1;
+        }
+    }
+    
+    private void closeConnection(Connection con) throws SQLException {
+        if (heldCon != null) {
+            return;
+        } else {
+            con.close();
+        }
+    }
+
+    private void debug(String msg) {
+        System.out.println("[MessageCheckerEJB]:: -> " + msg);
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/beans/MessageCheckerHome.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/beans/MessageCheckerHome.java
new file mode 100644
index 0000000..9b56081
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/beans/MessageCheckerHome.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 beans;
+
+import java.rmi.RemoteException;
+
+import javax.ejb.CreateException;
+import javax.ejb.EJBHome;
+
+public interface MessageCheckerHome extends EJBHome {
+    MessageChecker create() throws RemoteException, CreateException;
+    boolean done() throws RemoteException, CreateException;
+    int expectedResults() throws RemoteException, CreateException;
+    void notifyAndWait() throws RemoteException, CreateException;
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/build.properties
new file mode 100644
index 0000000..dad207b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/build.properties
@@ -0,0 +1,21 @@
+<!--
+
+    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
+
+-->
+ 
+
+ejb-jar.xml=META-INF/ejb-jar.xml
+sun-ejb-jar.xml=META-INF/sun-ejb-jar.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/build.xml
new file mode 100644
index 0000000..b58b0c3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/build.xml
@@ -0,0 +1,68 @@
+<!--
+
+    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 common SYSTEM "../../../../../../config/common.xml">
+  <!ENTITY testcommon SYSTEM "../../../../../../config/properties.xml">
+]>
+
+<project name="connector1.5 MDB" default="all" basedir=".">
+
+  <property name="j2ee.home" value="../../../.."/>
+
+  <!-- include common.xml and testcommon.xml -->
+  &common;
+  &testcommon;
+
+  <target name="all" depends="init-common">
+   <antcall target="compile-common">
+        <param name="src" value="." />
+        <param name="s1astest.classpath" value="${s1astest.classpath}:../../ra/src/classes" />
+    </antcall>
+
+    <antcall target="ejb-jar-common">
+        <param name="ejb-jar.xml" value="META-INF/ejb-jar.xml" />
+        <param name="ejbjar.classes" value="mdb/*.class, beans/*.class, connector/*.class" />
+        <param name="sun-ejb-jar.xml" value="META-INF/sun-ejb-jar.xml" />
+        <param name="beans.xml" value="META-INF/beans.xml" />
+        <param name="appname" value="generic-embedded" />
+    </antcall>
+
+    <antcall target="appclient-jar-common">
+        <param name="appname" value="generic-embedded" />
+        <param name="application-client.xml" value="META-INF/application-client.xml" />
+        <param name="appclientjar.classes" value="mdb/*.class, beans/*.class, connector/*.class, client/Client.class" />
+        <param name="sun-application-client.xml" value="META-INF/sun-application-client.xml" />
+    </antcall>
+<!--
+    <jar jarfile="../ejb.jar" basedir="classes"
+         includes="mdb/*.class, beans/*.class, connector/*.class" >
+                <metainf dir="META-INF">
+                        <include name="ejb-jar.xml"/>
+                        <include name="sun-ejb-jar.xml"/>
+                </metainf>
+    </jar>
+-->
+  </target>
+
+  <target name="clean">
+    <antcall target="clean-classes-common">
+        <param name="build.classes.dir" value="classes" />
+    </antcall>
+  </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/client/Client.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/client/Client.java
new file mode 100644
index 0000000..676b07b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/client/Client.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 client;
+
+import javax.naming.InitialContext;
+import javax.rmi.PortableRemoteObject;
+
+import beans.MessageChecker;
+import beans.MessageCheckerHome;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+public class Client {
+
+    private static final String TEST_NAME = " Embedded-Connector-1.5 test - ";
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+
+    public Client(String[] args) {
+        // super(args);
+    }
+
+    public static void main(String[] args) {
+        Client client = new Client(args);
+        client.doTest();
+    }
+
+    public String doTest() {
+        stat.addDescription("This is to test connector 1.5 " + "contracts.");
+
+        String res = "NOT RUN";
+        debug("doTest() ENTER...");
+        boolean pass = false;
+        try {
+            res = "ALL TESTS PASSED";
+            int testCount = 1;
+            while (!done()) {
+
+                notifyAndWait();
+                if (!done()) {
+                    debug("Running...");
+                    pass = checkResults(expectedResults());
+                    debug("Got expected results = " + pass);
+
+                    // do not continue if one test failed
+                    if (!pass) {
+                        res = "SOME TESTS FAILED";
+                        stat.addStatus(TEST_NAME + testCount, stat.FAIL);
+                        break;
+                    } else {
+                        stat.addStatus(TEST_NAME + testCount, stat.PASS);
+                    }
+                } else {
+                    break;
+                }
+                testCount++;
+            }
+
+        } catch (Exception ex) {
+            System.out.println("Importing transaction test failed.");
+            ex.printStackTrace();
+            res = "TEST FAILED";
+        }
+
+        stat.printSummary(TEST_NAME);
+
+        debug("EXITING... STATUS = " + res);
+        return res;
+    }
+
+    private boolean checkResults(int num) throws Exception {
+        Object o = (new InitialContext()).lookup("MyMessageChecker");
+        MessageCheckerHome home = (MessageCheckerHome) PortableRemoteObject
+                .narrow(o, MessageCheckerHome.class);
+        MessageChecker checker = home.create();
+        int result = checker.getMessageCount();
+        return result == num;
+    }
+
+    private boolean done() throws Exception {
+        Object o = (new InitialContext()).lookup("MyMessageChecker");
+        MessageCheckerHome home = (MessageCheckerHome) PortableRemoteObject
+                .narrow(o, MessageCheckerHome.class);
+        MessageChecker checker = home.create();
+        return checker.done();
+    }
+
+    private int expectedResults() throws Exception {
+        Object o = (new InitialContext()).lookup("MyMessageChecker");
+        MessageCheckerHome home = (MessageCheckerHome) PortableRemoteObject
+                .narrow(o, MessageCheckerHome.class);
+        MessageChecker checker = home.create();
+        return checker.expectedResults();
+    }
+
+    private void notifyAndWait() throws Exception {
+        Object o = (new InitialContext()).lookup("MyMessageChecker");
+        MessageCheckerHome home = (MessageCheckerHome) PortableRemoteObject
+                .narrow(o, MessageCheckerHome.class);
+        MessageChecker checker = home.create();
+        checker.notifyAndWait();
+    }
+
+    private void debug(String msg) {
+        System.out.println("[CLIENT]:: --> " + msg);
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/client/MANIFEST.MF b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/client/MANIFEST.MF
new file mode 100644
index 0000000..179cd4d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/client/MANIFEST.MF
@@ -0,0 +1,4 @@
+Manifest-Version: 1.0
+Created-By: 1.4.0 (Sun Microsystems Inc.)
+Main-Class: client.Client
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/connector/MyMessageListener.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/connector/MyMessageListener.java
new file mode 100644
index 0000000..a3928d3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/connector/MyMessageListener.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+public interface MyMessageListener {
+  public void onMessage (String message);
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/mdb/MyMessageBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/mdb/MyMessageBean.java
new file mode 100644
index 0000000..caf41e9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/app/src/mdb/MyMessageBean.java
@@ -0,0 +1,230 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 mdb;
+
+import java.sql.Statement;
+
+import javax.ejb.MessageDrivenBean;
+import javax.ejb.MessageDrivenContext;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.sql.DataSource;
+
+import connector.MyMessageListener;
+
+/**
+ */
+public class MyMessageBean implements MessageDrivenBean, MyMessageListener {
+
+    private transient MessageDrivenContext mdc = null;
+    private Context context;
+
+    @javax.inject.Inject
+    private connector.TestCDIBean tb;
+
+    /**
+     * Constructor, which is public and takes no arguments.
+     */
+    public MyMessageBean() {
+    }
+
+    /**
+     * setMessageDrivenContext method, declared as public (but not final or
+     * static), with a return type of void, and with one argument of type
+     * javax.ejb.MessageDrivenContext.
+     * 
+     * @param mdc
+     *            the context to set
+     */
+    public void setMessageDrivenContext(MessageDrivenContext mdc) {
+        this.mdc = mdc;
+    }
+
+    /**
+     * ejbCreate method, declared as public (but not final or static), with a
+     * return type of void, and with no arguments.
+     */
+    public void ejbCreate() {
+    }
+
+    /**
+     * onMessage method, declared as public (but not final or static), with a
+     * return type of void, and with one argument of type javax.jms.Message.
+     * 
+     * Casts the incoming Message to a TextMessage and displays the text.
+     * 
+     * @param inMessage
+     *            the incoming message
+     */
+    public void onMessage(String inMessage) {
+
+        debug("onMessage:: RECEIVED [" + inMessage + "]");
+        debug("TestCDIBean injected:" + tb);
+
+        if (tb == null)
+            throw new RuntimeException("Injection of enabled Bean "
+                    + "in RAR into a MDB injection point failed");
+
+        try {
+            if (inMessage.endsWith("WRITE")) {
+                doDbStuff("WRITE", inMessage.substring(0, inMessage
+                        .lastIndexOf(":")));
+            } else if (inMessage.endsWith("DELETE")) {
+                doDbStuff("DELETE", inMessage.substring(0, inMessage
+                        .lastIndexOf(":")));
+            } else if (inMessage.endsWith("DELETE_ALL")) {
+                doDbStuff("DELETE_ALL", "::");
+            } else {
+                // unsupported op.
+            }
+        } catch (Exception ex) {
+            debug("UH OH...");
+            ex.printStackTrace();
+        }
+
+    }
+
+    /**
+     * ejbRemove method, declared as public (but not final or static), with a
+     * return type of void, and with no arguments.
+     */
+    public void ejbRemove() {
+    }
+
+    private void doDbStuff(String op, String message) throws Exception {
+
+        java.sql.Connection dbConnection = null;
+        String id = message.substring(0, message.indexOf(":"));
+        String body = message.substring(message.indexOf(":") + 1);
+        try {
+            Context ic = new InitialContext();
+
+            if ("READ".equals(op)) {
+
+                debug("Reading row from database...");
+
+                // Creating a database connection
+                /*
+                 * DataSource ds = (DataSource) ic.lookup("java:comp/env/MyDB");
+                 * debug("Looked up Datasource\n");
+                 * debug("Get JDBC connection, auto sign on"); dbConnection =
+                 * ds.getConnection();
+                 * 
+                 * Statement stmt = dbConnection.createStatement(); String query
+                 * = "SELECT id from messages where id = 'QQ'"; ResultSet
+                 * results = stmt.executeQuery(query); results.next();
+                 * System.out.println("QQ has balance " +
+                 * results.getInt("balance") + " dollars"); results.close();
+                 * stmt.close();
+                 * 
+                 * System.out.println("Read one account\n");
+                 */
+
+            } else if ("WRITE".equals(op)) {
+
+                debug("Inserting one message in the database\n");
+
+                // Creating a database connection
+                DataSource ds = (DataSource) ic.lookup("java:comp/env/MyDB");
+                // debug("Looked up Datasource\n");
+                // debug("Get JDBC connection, auto sign on");
+                dbConnection = ds.getConnection();
+
+                createRow(id, body, dbConnection);
+                System.out.println("Created one message\n");
+
+            } else if ("DELETE".equals(op)) {
+
+                debug("Deleting one message from the database\n");
+
+                // Creating a database connection
+                DataSource ds = (DataSource) ic.lookup("java:comp/env/MyDB");
+                // debug("Looked up Datasource\n");
+                // debug("Get JDBC connection, auto sign on");
+                dbConnection = ds.getConnection();
+
+                deleteRow(id, dbConnection);
+                System.out.println("Deleted one message\n");
+            } else if ("DELETE_ALL".equals(op)) {
+
+                debug("Deleting all messages from the database\n");
+
+                // Creating a database connection
+                DataSource ds = (DataSource) ic.lookup("java:comp/env/MyDB");
+                // debug("Looked up Datasource\n");
+                // debug("Get JDBC connection, auto sign on");
+                dbConnection = ds.getConnection();
+                deleteAll(dbConnection);
+                System.out.println("Deleted all messages\n");
+            } else {
+                // unsupported op
+            }
+
+        } finally {
+            try {
+                dbConnection.close();
+            } catch (Exception ex) {
+                debug("Exception occured while closing database con nection.");
+            }
+        }
+    }
+
+    private void createRow(String id, String body,
+            java.sql.Connection dbConnection) throws Exception {
+
+        // Create row for this message
+        debug("CreateRow with ID = " + id + ", BODY = " + body);
+        Statement stmt = dbConnection.createStatement();
+        String query = "INSERT INTO messages (messageId, message)"
+                + "VALUES ('" + id + "', '" + body + "')";
+        int resultCount = stmt.executeUpdate(query);
+        if (resultCount != 1) {
+            throw new Exception("ERROR in INSERT !! resultCount = "
+                    + resultCount);
+        }
+        stmt.close();
+    }
+
+    private void deleteRow(String id, java.sql.Connection dbConnection)
+            throws Exception {
+
+        // Delete row for this message
+        debug("DeleteRow with ID = " + id);
+        Statement stmt = dbConnection.createStatement();
+        String query = "DELETE FROM messages WHERE messageId = '" + id + "'";
+        int resultCount = stmt.executeUpdate(query);
+        if (resultCount != 1) {
+            throw new Exception("ERROR in INSERT !! resultCount = "
+                    + resultCount);
+        }
+        stmt.close();
+    }
+
+    private void deleteAll(java.sql.Connection dbConnection) throws Exception {
+
+        // Delete row for this message
+        Statement stmt = dbConnection.createStatement();
+        String query = "DELETE FROM messages";
+        int resultCount = stmt.executeUpdate(query);
+        debug("Delete all rows from messages... count = " + resultCount);
+        stmt.close();
+    }
+
+    private void debug(String msg) {
+        System.out.println("[MyMessageBean] --> " + msg);
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/build.xml
new file mode 100644
index 0000000..ccd3fa5
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/build.xml
@@ -0,0 +1,75 @@
+<!--
+
+    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 common SYSTEM "../../../../config/common.xml">
+  <!ENTITY testcommon SYSTEM "../../../../config/properties.xml">
+]>
+
+<project name="connector1.5 TEST" default="all" basedir=".">
+<property name="j2ee.home" value="../.."/>
+<property name="client.class" value="client/Client"/>
+
+  <!-- include common.xml and testcommon.xml -->
+  &common;
+  &testcommon;
+
+  <target name="all" depends="init-common, build, setup, runtest, unset"/>
+  <target name="build" depends="init-common">
+   <ant dir="ra" inheritAll="false" target="all"/>
+   <ant dir="app" inheritAll="false" target="all"/>
+  </target>
+
+  <target name="setup">
+    <ant dir="app" inheritAll="false" target="setupJdbc"/>
+    <ant dir="." inheritAll="false" target="deploy"/>
+  </target>
+
+  <target name="deploy">
+    <ant dir="app" inheritAll="false" target="deploy-ear"/>
+    <ant dir="ra" inheritAll="false" target="testAddAdmin"/>
+    <ant dir="." inheritAll="false" target="restart"/>
+  </target>
+
+  <target name="runtest" depends="init-common">
+    <antcall target="runclient-common">
+	<param name="appname" value="generic-embedded" />
+    </antcall>
+  </target>
+
+  <target name="unset">
+    <ant dir="app" inheritAll="false" target="unsetJdbc"/>
+    <ant dir="." inheritAll="false" target="undeploy"/>
+    <ant dir="." inheritAll="false" target="restart"/>
+  </target>
+
+  <target name="undeploy">
+    <ant dir="ra" inheritAll="false" target="testDelAdmin"/>
+    <ant dir="app" inheritAll="false" target="undeploy"/>
+  </target>
+
+  <target name="restart" depends="init-common">
+    <echo message="Not required to restart"/>
+  </target>
+
+  <target name="clean">
+    <ant dir="ra" inheritAll="false" target="clean"/>
+    <ant dir="app" inheritAll="false" target="clean"/>
+  </target>
+
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/createdb.sql b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/createdb.sql
new file mode 100644
index 0000000..19f3324
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/createdb.sql
@@ -0,0 +1,2 @@
+drop table messages;
+create table messages (messageId CHAR(50), message varchar(80));
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/META-INF/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/META-INF/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/META-INF/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/META-INF/ra.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/META-INF/ra.xml
new file mode 100644
index 0000000..2ca2ebc
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/META-INF/ra.xml
@@ -0,0 +1,76 @@
+<?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
+
+-->
+
+<!--
+<!DOCTYPE connector PUBLIC '-//Sun Microsystems, Inc.//DTD Connector 1.5//EN' 'http://java.sun.com/dtd/connector_1_5.dtd'>
+-->
+<connector 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/connector_1_5.xsd"
+           version="1.5">
+    <display-name>Simple Resource Adapter</display-name>
+    <vendor-name>Java Software</vendor-name>
+    <eis-type>Generic Type</eis-type>
+    <resourceadapter-version>1.0Alpha</resourceadapter-version>
+    <resourceadapter>
+        <resourceadapter-class>
+            connector.SimpleResourceAdapterImpl
+        </resourceadapter-class>
+        <config-property>
+            <config-property-name>
+                TestName
+            </config-property-name>
+            <config-property-type>
+                java.lang.String
+            </config-property-type>
+            <config-property-value>
+                ConfigPropertyForRA
+            </config-property-value>
+        </config-property>
+        <inbound-resourceadapter>
+            <messageadapter>          
+                <messagelistener>
+                    <messagelistener-type>
+                        connector.MyMessageListener
+                    </messagelistener-type>
+                    <activationspec>
+                        <activationspec-class>
+                            connector.SimpleActivationSpec
+                        </activationspec-class>
+                    </activationspec>
+                </messagelistener>
+            </messageadapter>          
+        </inbound-resourceadapter>
+        <adminobject>
+          <adminobject-interface>connector.MyAdminObject</adminobject-interface>
+          <adminobject-class>connector.MyAdminObject</adminobject-class>
+          <config-property>
+            <config-property-name>ResetControl</config-property-name>
+            <config-property-type>java.lang.String</config-property-type>
+            <config-property-value>NORESET</config-property-value>
+          </config-property>
+          <config-property>
+            <config-property-name>ExpectedResult</config-property-name>
+            <config-property-type>java.lang.Integer</config-property-type>
+            <config-property-value>88</config-property-value>
+          </config-property>
+        </adminobject>
+    </resourceadapter>
+</connector>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/build.xml
new file mode 100644
index 0000000..d483e8d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/build.xml
@@ -0,0 +1,83 @@
+<!--
+
+    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 common SYSTEM "../../../../../config/common.xml">
+  <!ENTITY props SYSTEM "../../../../../config/properties.xml">
+]>
+
+<project name="connector1.5 RA" default="all" basedir=".">
+
+  <property name="j2ee.home" value="../../.."/>
+  <property name="earfile" value="generic-ra.rar"/>
+
+  <!-- include common.xml and testcommon.xml -->
+  &common;
+  &props;
+
+  <target name="all">
+    <ant dir="src" inheritAll="false" target="all"/>
+
+    <jar jarfile="generic-ra.rar" basedir="."
+         includes="generic-ra.jar, META-INF/ra.xml, META-INF/beans.xml" />
+  </target>
+
+  <target name="deploy" depends="init-common">
+    <antcall target="asadmin-common">
+      <param name="admin.command" value="deploy"/>
+      <param name="operand.props" value="generic-ra.rar"/>
+    </antcall>
+  </target>
+
+  <target name="undeploy" depends="init-common">
+    <antcall target="asadmin-common">
+      <param name="admin.command" value="undeploy"/>
+      <param name="operand.props" value="generic-ra"/>
+    </antcall>
+  </target>
+
+  <target name="testAddAdmin" depends="init-common">
+    <antcall target="asadmin-common">
+      <param name="admin.command" value="create-admin-object --target ${appserver.instance.name} --restype connector.MyAdminObject --raname generic-embeddedApp#generic-ra --property ResetControl=BEGINNING"/>
+      <param name="operand.props" value="eis/testAdmin"/>
+    </antcall>
+  </target>
+
+  <target name="testDelAdmin" depends="init-common">
+    <antcall target="asadmin-common">
+      <param name="admin.command" value="delete-admin-object"/>
+      <param name="operand.props" value="--target ${appserver.instance.name} eis/testAdmin"/>
+    </antcall>
+  </target>
+
+  <target name="sendMessage" depends="init-common">
+    <echo message="Class path is ${s1astest.classpath}"/>
+    <java fork="true" classname="connector.Messages" failonerror="true">
+      <arg line="add Foo TestMessage"/>
+      <classpath>
+        <pathelement location="${s1astest.classpath}"/>
+        <pathelement location="generic-ra.jar"/>
+      </classpath>
+    </java>
+  </target>
+
+  <target name="clean">
+    <ant dir="src" inheritAll="false" target="clean"/>
+  </target>
+
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/build.xml
new file mode 100644
index 0000000..ff8bcc2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/build.xml
@@ -0,0 +1,49 @@
+<!--
+
+    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 common SYSTEM "../../../../../../config/common.xml">
+  <!ENTITY props SYSTEM "../../../../../../config/properties.xml">
+]>
+
+<project name="connector1.5 RA SRC" default="all" basedir=".">
+
+
+  <!-- include common.xml and testcommon.xml -->
+  &common;
+  &props;
+
+  <target name="all" depends="init-common" >
+    <antcall target="compile-common">
+	<param name="build.classes.dir" value="classes" />
+	<param name="src" value="connector" />
+    </antcall>
+    <jar jarfile="../generic-ra.jar" basedir="classes"
+         includes="connector/*.class" />
+  </target>
+
+
+  <target name="clean">
+    <antcall target="clean-classes-common">
+        <param name="build.classes.dir" value="classes" />
+    </antcall>
+    <delete file="../generic-ra.jar"/>
+    <delete file="../generic-ra.rar"/>
+  </target>
+
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/Controls.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/Controls.java
new file mode 100644
index 0000000..3541235
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/Controls.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+/**
+ * 
+ * @author Qingqing Ouyang
+ */
+public class Controls {
+    public static Object readyLock = new Object();
+    public static int expectedResults;
+    public static boolean done = false;
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/DeliveryWork.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/DeliveryWork.java
new file mode 100644
index 0000000..f4599fd
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/DeliveryWork.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+import java.lang.reflect.Method;
+
+import javax.resource.spi.endpoint.MessageEndpoint;
+import javax.resource.spi.work.Work;
+
+/**
+ * 
+ * @author Qingqing Ouyang
+ */
+public class DeliveryWork implements Work {
+
+    private MessageEndpoint ep;
+    private int num;
+    private String op;
+    private boolean keepCount;
+    private static int counter = 0;
+
+    public DeliveryWork(MessageEndpoint ep, int numOfMessages, String op) {
+        this.ep = ep;
+        this.num = numOfMessages;
+        this.op = op;
+        this.keepCount = false;
+    }
+
+    public DeliveryWork(MessageEndpoint ep, int numOfMessages, String op,
+            boolean keepCount) {
+        this.ep = ep;
+        this.num = numOfMessages;
+        this.op = op;
+        this.keepCount = keepCount;
+    }
+
+    public void run() {
+
+        debug("ENTER...");
+
+        try {
+            // Method onMessage = getOnMessageMethod();
+            // ep.beforeDelivery(onMessage);
+
+            if (!keepCount) {
+                for (int i = 0; i < num; i++) {
+                    String msgId = String.valueOf(i);
+                    String msgBody = "This is message " + msgId;
+                    String msg = msgId + ":" + msgBody + ":" + op;
+                    ((MyMessageListener) ep).onMessage(msg);
+                }
+            } else {
+                for (int i = 0; i < num; i++) {
+                    String msgId = String.valueOf(i + counter);
+                    String msgBody = "This is message " + msgId;
+                    String msg = msgId + ":" + msgBody + ":" + op;
+                    ((MyMessageListener) ep).onMessage(msg);
+                }
+                counter = counter + num;
+            }
+
+            // ep.afterDelivery();
+
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+
+        debug("LEAVE...");
+    }
+
+    public void release() {
+    }
+
+    public String toString() {
+        return op;
+    }
+
+    private Method getOnMessageMethod() {
+
+        Method onMessageMethod = null;
+        try {
+            Class msgListenerClass = connector.MyMessageListener.class;
+            Class[] paramTypes = { java.lang.String.class };
+            onMessageMethod = msgListenerClass.getMethod("onMessage",
+                    paramTypes);
+
+        } catch (NoSuchMethodException ex) {
+            ex.printStackTrace();
+        }
+        return onMessageMethod;
+    }
+
+    private void debug(String mesg) {
+        System.out.println("DeliveryWork[" + op + "] --> " + mesg);
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/FakeXAResource.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/FakeXAResource.java
new file mode 100644
index 0000000..52d764a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/FakeXAResource.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+import javax.transaction.xa.XAException;
+import javax.transaction.xa.XAResource;
+import javax.transaction.xa.Xid;
+
+/**
+ * This is class is used for debugging. It prints out trace information on TM
+ * calls to XAResource before directing the call to the actual XAResource object
+ */
+public class FakeXAResource implements XAResource {
+
+    public FakeXAResource() {
+    }
+
+    public void commit(Xid xid, boolean onePhase) throws XAException {
+        print("FakeXAResource.commit: " + xidToString(xid) + "," + onePhase);
+    }
+
+    public void end(Xid xid, int flags) throws XAException {
+        print("FakeXAResource.end: " + xidToString(xid) + ","
+                + flagToString(flags));
+    }
+
+    public void forget(Xid xid) throws XAException {
+        print("FakeXAResource.forget: " + xidToString(xid));
+    }
+
+    public int getTransactionTimeout() throws XAException {
+        return 60 * 1000;
+    }
+
+    public boolean isSameRM(XAResource xares) throws XAException {
+        return false;
+    }
+
+    public int prepare(Xid xid) throws XAException {
+        print("FakeXAResource.prepare: " + xidToString(xid));
+        return XAResource.XA_OK;
+    }
+
+    public Xid[] recover(int flag) throws XAException {
+        print("FakeXAResource.recover: " + flagToString(flag));
+        return null;
+    }
+
+    public void rollback(Xid xid) throws XAException {
+        print("FakeXAResource.rollback: " + xidToString(xid));
+    }
+
+    public boolean setTransactionTimeout(int seconds) throws XAException {
+        return false;
+    }
+
+    public void start(Xid xid, int flags) throws XAException {
+        print("FakeXAResource.start: " + xidToString(xid) + ","
+                + flagToString(flags));
+        throw new XAException();
+    }
+
+    private void print(String s) {
+        System.out.println(s);
+    }
+
+    static public String xidToString(Xid xid) {
+        return String
+                .valueOf((new String(xid.getGlobalTransactionId()) + new String(
+                        xid.getBranchQualifier())).hashCode());
+    }
+
+    static public String flagToString(int flag) {
+        switch (flag) {
+        case TMFAIL:
+            return "TMFAIL";
+        case TMJOIN:
+            return "TMJOIN";
+        case TMNOFLAGS:
+            return "TMNOFLAGS";
+        case TMONEPHASE:
+            return "TMONEPHASE";
+        case TMRESUME:
+            return "TMRESUME";
+        case TMSTARTRSCAN:
+            return "TMSTARTRSCAN";
+        case TMENDRSCAN:
+            return "TMENDRSCAN";
+        case TMSUCCESS:
+            return "TMSUCCESS";
+        case TMSUSPEND:
+            return "TMSUSPEND";
+        case XA_RDONLY:
+            return "XA_RDONLY";
+        default:
+            return "" + Integer.toHexString(flag);
+        }
+    }
+
+    public boolean equals(Object obj) {
+        return false;
+    }
+
+    public int hashCode() {
+        return 1;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/Messages.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/Messages.java
new file mode 100644
index 0000000..597a34b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/Messages.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+
+/**
+ * collection of messages.
+ * 
+ * @author Qingqing Ouyang
+ */
+public class Messages {
+
+    private static Hashtable messages = new Hashtable();
+
+    public static void sendMessage(String destName, String message) {
+        if (messages.get(destName) != null) {
+            ((ArrayList) messages.get(destName)).add(message);
+        } else {
+            ArrayList list = new ArrayList();
+            list.add(message);
+            messages.put(destName, list);
+        }
+        System.out.println("sendMessage. message at foo is "
+                + Messages.hasMessages("Foo"));
+    }
+
+    public static boolean hasMessages(String destName) {
+        return messages.get(destName) != null;
+    }
+
+    public static ArrayList getMessages(String destName) {
+        return (ArrayList) messages.get(destName);
+    }
+
+    public static void main(String[] args) {
+        if (args.length != 3) {
+            System.exit(1);
+        }
+
+        String command = args[0];
+        String destName = args[1];
+        String message = args[2];
+
+        if (!"add".equals(command)) {
+            System.exit(1);
+        }
+
+        sendMessage(destName, message);
+        System.out.println("Message : " + message + " sent to " + destName);
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/MyAdminObject.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/MyAdminObject.java
new file mode 100644
index 0000000..57bf91d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/MyAdminObject.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+public class MyAdminObject implements java.io.Serializable {
+
+    private String resetControl = "NORESET";
+    private Integer expectedResults;
+
+    public void setResetControl(String value) {
+        resetControl = value;
+    }
+
+    public String getResetControl() {
+        return resetControl;
+    }
+
+    public void setExpectedResults(Integer value) {
+        expectedResults = value;
+    }
+
+    public Integer getExpectedResults() {
+        return expectedResults;
+    }
+
+    public void initialize() {
+        System.out
+                .println("[MyAdminObject] Initializing the Controls to false:"
+                        + resetControl);
+        if (resetControl.equals("BEGINNING")) {
+            Controls.done = false;
+            System.out
+                    .println("[MyAdminObject] Initialized the Controls to false");
+        }
+    }
+
+    public boolean done() {
+        return Controls.done;
+    }
+
+    public int expectedResults() {
+        return Controls.expectedResults;
+    }
+
+    public Object getLockObject() {
+        return Controls.readyLock;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/MyMessageListener.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/MyMessageListener.java
new file mode 100644
index 0000000..9e58d7e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/MyMessageListener.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+public interface MyMessageListener {
+    public void onMessage(String message);
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/MyWork.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/MyWork.java
new file mode 100644
index 0000000..7172677
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/MyWork.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+import java.lang.reflect.Method;
+
+import javax.resource.spi.endpoint.MessageEndpointFactory;
+import javax.resource.spi.work.Work;
+import javax.resource.spi.work.WorkManager;
+
+/**
+ * 
+ * @author Qingqing Ouyang
+ */
+public class MyWork implements Work {
+
+    private String name;
+    private boolean stop = false;
+    private MessageEndpointFactory factory;
+    private WorkManager wm;
+
+    public MyWork(String name, MessageEndpointFactory factory, WorkManager wm) {
+        this.factory = factory;
+        this.name = name;
+        this.wm = wm;
+    }
+
+    public void run() {
+
+        debug("ENTER...");
+
+        // try 3 times to create endpoint (in case of failure)
+        for (int i = 0; i < 3; i++) {
+
+            try {
+
+                Method onMessage = getOnMessageMethod();
+                System.out.println("isDeliveryTransacted = "
+                        + factory.isDeliveryTransacted(onMessage));
+
+                /*
+                 * MessageEndpoint ep = factory.createEndpoint(null);
+                 * ep.beforeDelivery(onMessage); ((MyMessageListener)
+                 * ep).onMessage(name + ": TEST MSG ONE"); ((MyMessageListener)
+                 * ep).onMessage(name + ": TEST MSG TWO"); ((MyMessageListener)
+                 * ep).onMessage(name + ": TEST MSG THREE"); ep.afterDelivery();
+                 * break;
+                 */
+
+            } catch (Exception ex) {
+                ex.printStackTrace();
+            }
+        }
+
+        debug("LEAVE...");
+    }
+
+    public void release() {
+    }
+
+    public void stop() {
+        this.stop = true;
+    }
+
+    public String toString() {
+        return name;
+    }
+
+    public Method getOnMessageMethod() {
+
+        Method onMessageMethod = null;
+        try {
+            Class msgListenerClass = connector.MyMessageListener.class;
+            Class[] paramTypes = { java.lang.String.class };
+            onMessageMethod = msgListenerClass.getMethod("onMessage",
+                    paramTypes);
+
+        } catch (NoSuchMethodException ex) {
+            ex.printStackTrace();
+        }
+        return onMessageMethod;
+    }
+
+    private void debug(String mesg) {
+        System.out.println("MyWork[" + name + "] --> " + mesg);
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/SimpleActivationSpec.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/SimpleActivationSpec.java
new file mode 100644
index 0000000..4f4840e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/SimpleActivationSpec.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+import javax.resource.spi.ActivationSpec;
+import javax.resource.spi.ResourceAdapter;
+
+/**
+ * This class is supposed to implemented as a JavaBean so that the app server
+ * can instantiate and configure it at the runtime.
+ * 
+ * @author Qingqing Ouyang
+ */
+public class SimpleActivationSpec implements ActivationSpec,
+        java.io.Serializable {
+
+    private String destinationName;
+    private String destinationType;
+    private String testProp;
+    private ResourceAdapter resourceadapter;
+
+    /**
+     * Default constructor.
+     */
+    public SimpleActivationSpec() {
+    }
+
+    public String getDestinationName() {
+        return this.destinationName;
+    }
+
+    public void setDestinationName(String name) {
+        debug("setDestinationName() called... name = " + name);
+        this.destinationName = name;
+    }
+
+    public String getDestinationType() {
+        return this.destinationType;
+    }
+
+    public void setDestinationType(String type) {
+        debug("setDestinationType () called... type = " + type);
+        this.destinationType = type;
+    }
+
+    public String getTestProp() {
+        return this.testProp;
+    }
+
+    public void setTestProp(String testProp) {
+        debug("setTestProp () called... testProp = " + testProp);
+        this.testProp = testProp;
+    }
+
+    public ResourceAdapter getResourceAdapter() {
+        debug("getResourceAdapter() called... ");
+        return this.resourceadapter;
+    }
+
+    public void setResourceAdapter(ResourceAdapter ra) {
+        debug("setResourceAdapter() called... ra = " + ra);
+        this.resourceadapter = ra;
+    }
+
+    public void validate() {
+    }
+
+    private void debug(String message) {
+        System.out.println("[SimpleActivationSpec] ==> " + message);
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/SimpleResourceAdapterImpl.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/SimpleResourceAdapterImpl.java
new file mode 100644
index 0000000..11bfe89
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/SimpleResourceAdapterImpl.java
@@ -0,0 +1,224 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+import java.util.Timer;
+
+import javax.resource.NotSupportedException;
+import javax.resource.ResourceException;
+import javax.resource.spi.ActivationSpec;
+import javax.resource.spi.BootstrapContext;
+import javax.resource.spi.ResourceAdapter;
+import javax.resource.spi.ResourceAdapterInternalException;
+import javax.resource.spi.UnavailableException;
+import javax.resource.spi.XATerminator;
+import javax.resource.spi.endpoint.MessageEndpointFactory;
+import javax.resource.spi.work.ExecutionContext;
+import javax.resource.spi.work.Work;
+import javax.resource.spi.work.WorkManager;
+import javax.transaction.xa.XAResource;
+import javax.transaction.xa.Xid;
+
+/**
+ * This is a sample resource adapter
+ * 
+ * @author Qingqing Ouyang
+ */
+public class SimpleResourceAdapterImpl implements ResourceAdapter,
+        java.io.Serializable {
+
+    private BootstrapContext ctx;
+    private WorkManager wm;
+    private String testName;
+
+    private boolean debug = true;
+    private Work work;
+
+    public SimpleResourceAdapterImpl() {
+        debug("constructor...");
+    }
+
+    public void start(BootstrapContext ctx)
+            throws ResourceAdapterInternalException {
+
+        debug("001. Simple RA start...");
+
+        this.ctx = ctx;
+        debug("002. Simple RA start...");
+        this.wm = ctx.getWorkManager();
+        debug("003. Simple RA start...");
+
+        // testing creat timer
+        Timer timer = null;
+        try {
+            timer = ctx.createTimer();
+        } catch (UnavailableException ue) {
+            System.out.println("Error");
+            throw new ResourceAdapterInternalException("Error form bootstrap");
+        }
+        debug("004. Simple RA start...");
+
+        try {
+
+            XATerminator xa = ctx.getXATerminator();
+
+            Xid xid1 = new XID();
+            System.out.println(" XID1 = " + xid1);
+
+            ExecutionContext ec = new ExecutionContext();
+            ec.setXid(xid1);
+            ec.setTransactionTimeout(5 * 1000); // 5 seconds
+            TestWMWork outw = new TestWMWork(1000, false, true, ec);
+            outw.setWorkManager(wm);
+            try {
+                wm.doWork(outw, 1 * 1000, ec, null);
+                xa.commit(xid1, true);
+            } catch (Exception ex) {
+
+                System.out.println(" ex = " + ex.getMessage());
+                xa.rollback(xid1);
+            }
+
+            Xid xid2 = new XID();
+            System.out.println(" XID2 = " + xid2);
+
+            ec = new ExecutionContext();
+            ec.setXid(xid2);
+            ec.setTransactionTimeout(5 * 1000); // 5 seconds
+            TestWMWork anotherw = new TestWMWork(3000, false);
+            anotherw.setWorkManager(wm);
+            try {
+                wm.doWork(anotherw, 1 * 1000, ec, null);
+                xa.commit(xid2, true);
+            } catch (Exception ex) {
+                xa.rollback(xid2);
+            }
+
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+
+        for (int i = 0; i < 3; i++) {
+            TestWMWork w = new TestWMWork(i, false);
+            try {
+                wm.doWork(w, 1, null, null);
+            } catch (Exception ex) {
+                System.out.println("FAIL: CAUGHT exception : i = " + i);
+                ex.printStackTrace();
+            }
+        }
+
+        for (int i = 3; i < 6; i++) {
+            TestWMWork w = new TestWMWork(i, true);
+            boolean pass = false;
+            try {
+                wm.doWork(w, 1, null, null);
+            } catch (Exception ex) {
+                pass = true;
+                System.out.println("PASS: CAUGHT EXPECTED exception : i = "
+                        + i);
+                ex.printStackTrace();
+            } finally {
+                if (!pass) {
+                    System.out
+                            .println("FAIL: DID NOT GET EXPECTED exception :");
+                }
+            }
+        }
+
+        for (int i = 6; i < 9; i++) {
+            TestWMWork w = new TestWMWork(i, false);
+            try {
+                wm.doWork(w, 1, null, null);
+            } catch (Exception ex) {
+                System.out.println("FAIL: CAUGHT exception : i = " + i);
+                ex.printStackTrace();
+            }
+        }
+
+        for (int i = 9; i < 12; i++) {
+            TestWMWork w = new TestWMWork(i, false);
+            try {
+                wm.startWork(w);
+            } catch (Exception ex) {
+                System.out.println("FAIL: CAUGHT exception : i = " + i);
+                ex.printStackTrace();
+            }
+        }
+
+        for (int i = 12; i < 15; i++) {
+            TestWMWork w = new TestWMWork(i, false);
+            try {
+                wm.scheduleWork(w);
+            } catch (Exception ex) {
+                System.out.println("FAIL: CAUGHT exception : i = " + i);
+                ex.printStackTrace();
+            }
+        }
+
+        debug("005. Simple RA start...");
+    }
+
+    public void stop() {
+        debug("999. Simple RA stop...");
+        if (work != null) {
+            ((WorkDispatcher) work).stop();
+
+            synchronized (Controls.readyLock) {
+                Controls.readyLock.notify();
+            }
+
+        }
+    }
+
+    public void endpointActivation(MessageEndpointFactory factory,
+            ActivationSpec spec) throws NotSupportedException {
+        try {
+            debug("B.000. Create and schedule Dispatcher");
+            work = new WorkDispatcher("DISPATCHER", ctx, factory, spec);
+            wm.scheduleWork(work, 4 * 1000, null, null);
+            debug("B.001. Scheduled Dispatcher");
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    public void endpointDeactivation(MessageEndpointFactory endpointFactory,
+            ActivationSpec spec) {
+        debug("endpointDeactivation called...");
+        ((WorkDispatcher) work).stop();
+    }
+
+    public String getTestName() {
+        return testName;
+    }
+
+    public void setTestName(String name) {
+        debug("setTestName called... name = " + name);
+        testName = name;
+    }
+
+    public void debug(String message) {
+        if (debug)
+            System.out.println("[SimpleResourceAdapterImpl] ==> " + message);
+    }
+
+    public XAResource[] getXAResources(ActivationSpec[] specs)
+            throws ResourceException {
+        throw new UnsupportedOperationException();
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/TestCDIBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/TestCDIBean.java
new file mode 100644
index 0000000..c4ec82d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/TestCDIBean.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+//A test CDI bean that is bundled along with an embedded RAR
+public class TestCDIBean {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/TestWMWork.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/TestWMWork.java
new file mode 100644
index 0000000..9458496
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/TestWMWork.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+import javax.resource.spi.work.ExecutionContext;
+import javax.resource.spi.work.Work;
+import javax.resource.spi.work.WorkException;
+import javax.resource.spi.work.WorkManager;
+
+/**
+ * 
+ * @author Qingqing Ouyang
+ */
+public class TestWMWork implements Work {
+
+    private boolean stop = false;
+    private int id;
+    private boolean isRogue;
+    private boolean doNest;
+    private WorkManager wm;
+    private ExecutionContext ctx;
+    
+    public TestWMWork(int id, boolean isRogue) {
+        this(id, isRogue, false, null);
+    }
+
+    public TestWMWork(int id, boolean isRogue, boolean doNest,
+            ExecutionContext ctx) {
+        this.id = id;
+        this.isRogue = isRogue;
+        this.doNest = doNest;
+        this.ctx = ctx;
+    }
+
+    public void setWorkManager(WorkManager wm) {
+        this.wm = wm;
+    }
+
+    public void run() {
+
+        System.out.println("TestWMWork[" + id + "].start running");
+        if (!isRogue) {
+            try {
+                Thread.currentThread().sleep(1000);
+            } catch (Exception ex) {
+                System.out.println("TestWMWork[" + id + "].interrupted = ");
+                ex.printStackTrace();
+            }
+        } else {
+            System.out
+                    .println("TestWMWork: Simulating rogue RA's Work: Expected Arithmetic Exception - divide by Zero");
+            int j = 100 / 0;
+        }
+
+        if (doNest && (wm != null)) {
+            Work nestedWork = new TestWMWork(8888, false);
+            try {
+                wm.doWork(nestedWork, 1 * 1000, ctx, null);
+            } catch (WorkException ex) {
+                if (ex.getErrorCode().equals(
+                        WorkException.TX_CONCURRENT_WORK_DISALLOWED)) {
+                    System.out.println("TestWMWork[" + id + "] "
+                            + "PASS: CAUGHT EXPECTED = " + ex.getErrorCode());
+                } else {
+                    System.out.println("TestWMWork[" + id + "] "
+                            + "FAIL: CAUGHT UNEXPECTED = "
+                            + ex.getErrorCode());
+                }
+            }
+
+            nestedWork = new TestWMWork(9999, false);
+            try {
+                ExecutionContext ec = new ExecutionContext();
+                ec.setXid(new XID());
+                ec.setTransactionTimeout(5 * 1000); // 5 seconds
+                wm.doWork(nestedWork, 1 * 1000, ec, null);
+            } catch (Exception ex) {
+                System.out.println("TestWMWork[" + id + "] "
+                        + "FAIL: CAUGHT UNEXPECTED = " + ex.getMessage());
+            }
+        }
+
+        System.out.println("TestWMWork[" + id + "].stop running");
+    }
+
+    public void release() {
+    }
+
+    public void stop() {
+        this.stop = true;
+    }
+
+    public String toString() {
+        return String.valueOf(id);
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/WorkDispatcher.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/WorkDispatcher.java
new file mode 100644
index 0000000..febd104
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/WorkDispatcher.java
@@ -0,0 +1,323 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+import java.lang.reflect.Method;
+
+import javax.resource.spi.ActivationSpec;
+import javax.resource.spi.BootstrapContext;
+import javax.resource.spi.UnavailableException;
+import javax.resource.spi.XATerminator;
+import javax.resource.spi.endpoint.MessageEndpoint;
+import javax.resource.spi.endpoint.MessageEndpointFactory;
+import javax.resource.spi.work.ExecutionContext;
+import javax.resource.spi.work.Work;
+import javax.resource.spi.work.WorkManager;
+import javax.transaction.xa.XAException;
+import javax.transaction.xa.XAResource;
+import javax.transaction.xa.Xid;
+
+/**
+ * 
+ * @author Qingqing Ouyang
+ */
+public class WorkDispatcher implements Work {
+
+    private boolean stop = false;
+    private String id;
+    private MessageEndpointFactory factory;
+    private BootstrapContext ctx;
+    private ActivationSpec spec;
+    private WorkManager wm;
+    private XATerminator xa;
+
+    public WorkDispatcher(String id, BootstrapContext ctx,
+            MessageEndpointFactory factory, ActivationSpec spec) {
+        this.id = id;
+        this.ctx = ctx;
+        this.factory = factory;
+        this.spec = spec;
+        this.wm = ctx.getWorkManager();
+        this.xa = ctx.getXATerminator();
+    }
+
+    public void run() {
+
+        debug("ENTER...");
+
+        try {
+            synchronized (Controls.readyLock) {
+                debug("WAIT...");
+                Controls.readyLock.wait();
+
+                if (stop) {
+                    return;
+                }
+            }
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+
+        debug("Running...");
+
+        // try 3 times to create endpoint (in case of failure)
+        for (int i = 0; i < 3; i++) {
+
+            try {
+
+                Method onMessage = getOnMessageMethod();
+                System.out.println("isDeliveryTransacted = "
+                        + factory.isDeliveryTransacted(onMessage));
+
+                if (!factory.isDeliveryTransacted(onMessage)) {
+                    // MessageEndpoint ep = factory.createEndpoint(null);
+                    // DeliveryWork d = new DeliveryWork("NO_TX", ep);
+                    // wm.doWork(d, 0, null, null);
+                } else {
+
+                    // MessageEndpoint ep = factory.createEndpoint(null);
+                    MessageEndpoint ep = factory
+                            .createEndpoint(new FakeXAResource());
+                    int numOfMessages = 5;
+
+                    // importing transaction
+
+                    // write/commit
+                    ExecutionContext ec = startTx();
+                    debug("Start TX - " + ec.getXid());
+
+                    DeliveryWork w = new DeliveryWork(ep, numOfMessages,
+                            "WRITE");
+                    wm.doWork(w, 0, ec, null);
+                    xa.commit(ec.getXid(), true);
+
+                    debug("DONE WRITE TO DB");
+                    Controls.expectedResults = numOfMessages;
+                    notifyAndWait();
+
+                    // delete/rollback
+                    ec = startTx();
+                    debug("Start TX - " + ec.getXid());
+
+                    w = new DeliveryWork(ep, numOfMessages, "DELETE");
+                    wm.doWork(w, 0, ec, null);
+                    xa.rollback(ec.getXid());
+
+                    debug("DONE ROLLBACK FROM DB");
+                    Controls.expectedResults = numOfMessages;
+                    notifyAndWait();
+
+                    // delete/commit
+                    ec = startTx();
+                    debug("Start TX - " + ec.getXid());
+
+                    w = new DeliveryWork(ep, numOfMessages, "DELETE");
+                    wm.doWork(w, 0, ec, null);
+                    xa.commit(ec.getXid(), true);
+
+                    debug("DONE DELETE FROM DB");
+                    Controls.expectedResults = 0;
+                    notifyAndWait();
+
+                    // write/commit
+                    ec = startTx();
+                    debug("Start TX - " + ec.getXid());
+
+                    w = new DeliveryWork(ep, numOfMessages, "WRITE");
+                    wm.doWork(w, 0, ec, null);
+                    xa.commit(ec.getXid(), true);
+
+                    debug("DONE WRITE TO DB");
+                    Controls.expectedResults = numOfMessages;
+                    notifyAndWait();
+
+                    // delete/commit
+                    ec = startTx();
+                    debug("Start TX - " + ec.getXid());
+
+                    w = new DeliveryWork(ep, numOfMessages, "DELETE");
+                    wm.doWork(w, 0, ec, null);
+                    xa.commit(ec.getXid(), true);
+
+                    debug("DONE DELETE FROM DB");
+                    Controls.expectedResults = 0;
+                    notifyAndWait();
+
+                    // write multiple times using doWork/commit
+                    ec = startTx();
+                    debug("Start TX - " + ec.getXid());
+
+                    w = new DeliveryWork(ep, 1, "WRITE", true);
+                    wm.doWork(w, 0, ec, null);
+                    wm.doWork(w, 0, ec, null);
+                    wm.doWork(w, 0, ec, null);
+                    xa.commit(ec.getXid(), true);
+
+                    debug("DONE WRITE TO DB");
+                    Controls.expectedResults = 3;
+                    notifyAndWait();
+
+                    // write multiple times using doWork/rollback
+                    ec = startTx();
+                    debug("Start TX - " + ec.getXid());
+
+                    w = new DeliveryWork(ep, 1, "WRITE", true);
+                    wm.doWork(w, 0, ec, null);
+                    wm.doWork(w, 0, ec, null);
+                    wm.doWork(w, 0, ec, null);
+                    xa.rollback(ec.getXid());
+
+                    debug("DONE WRITE TO DB");
+                    Controls.expectedResults = 3;
+                    notifyAndWait();
+
+                    ec = startTx();
+                    debug("Start TX - " + ec.getXid());
+
+                    // write multiple times using doWork/rollback
+                    w = new DeliveryWork(ep, 2, "WRITE", true);
+                    wm.doWork(w, 0, ec, null);
+                    wm.doWork(w, 0, ec, null);
+                    wm.doWork(w, 0, ec, null);
+
+                    if (XAResource.XA_OK == xa.prepare(ec.getXid())) {
+                        xa.commit(ec.getXid(), false);
+                        debug("XA PREPARE/COMMIT. DONE WRITE TO DB ");
+                        Controls.expectedResults = 9;
+                        notifyAndWait();
+                    } else {
+                        xa.rollback(ec.getXid());
+                        debug("XA PREPARE UNSUCCESSFUL. DONE ROLLBACK");
+                        Controls.expectedResults = 3;
+                        notifyAndWait();
+                    }
+
+                    // delete all.
+                    ec = startTx();
+                    debug("Start TX - " + ec.getXid());
+
+                    w = new DeliveryWork(ep, 1, "DELETE_ALL");
+                    wm.doWork(w, 0, ec, null);
+                    xa.commit(ec.getXid(), true);
+
+                    debug("DONE DELETE ALL FROM DB");
+                    Controls.expectedResults = 0;
+                    notifyAndWait();
+
+                    done();
+                }
+
+                break;
+            } catch (UnavailableException ex) {
+                // ex.printStackTrace();
+                System.out.println("WorkDispatcher[" + id
+                        + "] Endpoint Unavailable");
+                try {
+                    Thread.currentThread().sleep(3 * 1000); // 3 seconds
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            } catch (XAException ex) {
+                ex.printStackTrace();
+                System.out.println("ERROR CODE = " + ex.errorCode);
+                done();
+                break;
+            } catch (Exception ex) {
+                ex.printStackTrace();
+                done();
+                break;
+            }
+        }
+
+        debug("LEAVE...");
+    }
+
+    public void release() {
+    }
+
+    public void stop() {
+        this.stop = true;
+    }
+
+    public String toString() {
+        return id;
+    }
+
+    public Method getOnMessageMethod() {
+
+        Method onMessageMethod = null;
+        try {
+            Class msgListenerClass = connector.MyMessageListener.class;
+            Class[] paramTypes = { java.lang.String.class };
+            onMessageMethod = msgListenerClass.getMethod("onMessage",
+                    paramTypes);
+
+        } catch (NoSuchMethodException ex) {
+            ex.printStackTrace();
+        }
+        return onMessageMethod;
+    }
+
+    private ExecutionContext startTx() {
+        ExecutionContext ec = new ExecutionContext();
+        try {
+            Xid xid = new XID();
+            ec.setXid(xid);
+            ec.setTransactionTimeout(5 * 1000); // 5 seconds
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        return ec;
+    }
+
+    private void notifyAndWait() {
+        try {
+            // Sleep for 5 seconds
+            // Thread.currentThread().sleep(5*1000);
+
+            synchronized (Controls.readyLock) {
+                // Notify the client to check the results
+                Controls.readyLock.notify();
+
+                // Wait until results are verified by the client
+                Controls.readyLock.wait();
+
+                if (stop) {
+                    return;
+                }
+            }
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    private void done() {
+        try {
+            Controls.done = true;
+            synchronized (Controls.readyLock) {
+                // Notify the client to check the results
+                Controls.readyLock.notify();
+            }
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    private void debug(String mesg) {
+        System.out.println("Dispatcher[" + id + "] --> " + mesg);
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/XID.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/XID.java
new file mode 100644
index 0000000..191b904
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/embedded-resource-adapter-as-bean-archive/ra/src/connector/XID.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+import javax.transaction.xa.Xid;
+
+/**
+ * The XID class provides an implementation of the X/Open transaction identifier
+ * it implements the javax.transaction.xa.Xid interface.
+ */
+public class XID implements Xid {
+
+    private static int ID = initializeID();
+
+    private static int initializeID() {
+        return (int) (Math.random() * 100000);
+    }
+
+    public int formatID; // Format identifier
+    // (-1) means that the XID is null
+    public int branchQualifier;
+    public int globalTxID;
+
+    static public final int MAXGTRIDSIZE = 64;
+    static public final int MAXBQUALSIZE = 64;
+
+    public XID() {
+        int foo = ID++;
+        formatID = foo;
+        branchQualifier = foo;
+        globalTxID = foo;
+    }
+
+    public boolean equals(Object o) {
+        XID other; // The "other" XID
+        int L; // Combined gtrid_length + bqual_length
+        int i;
+
+        if (!(o instanceof XID)) // If the other XID isn't an XID
+        {
+            return false; // It can't be equal
+        }
+
+        other = (XID) o; // The other XID, now properly cast
+
+        if (this.formatID == other.formatID
+                && this.branchQualifier == other.branchQualifier
+                && this.globalTxID == other.globalTxID) {
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Compute the hash code.
+     * 
+     * @return the computed hashcode
+     */
+    public int hashCode() {
+        if (formatID == (-1)) {
+            return (-1);
+        }
+
+        return formatID + branchQualifier + globalTxID;
+
+    }
+
+    /*
+     * Convert to String
+     * 
+     * <p> This is normally used to display the XID when debugging.
+     */
+
+    /**
+     * Return a string representing this XID.
+     * 
+     * @return the string representation of this XID
+     */
+    public String toString() {
+
+        String s = new String("{XID: " + "formatID(" + formatID + "), "
+                + "branchQualifier (" + branchQualifier + "), "
+                + "globalTxID(" + globalTxID + ")}");
+
+        return s;
+    }
+
+    /*
+     * Return branch qualifier
+     */
+
+    /**
+     * Returns the branch qualifier for this XID.
+     * 
+     * @return the branch qualifier
+     */
+    public byte[] getBranchQualifier() {
+        String foo = (new Integer(branchQualifier)).toString();
+        return foo.getBytes();
+    }
+
+    public int getFormatId() {
+        return formatID;
+    }
+
+    public byte[] getGlobalTransactionId() {
+        String foo = (new Integer(globalTxID)).toString();
+        return foo.getBytes();
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/README
new file mode 100644
index 0000000..4d99b31
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/README
@@ -0,0 +1,3 @@
+Test
+- Test whether the proxy to a no-interface local EJB is serializable
+Issue 12599 
\ No newline at end of file
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/build.properties
new file mode 100644
index 0000000..706d46a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/build.properties
@@ -0,0 +1,25 @@
+<!--
+
+    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}-no-interface-local-view-proxy-serializable"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
+<property name="persistence.xml" value="descriptor/persistence.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/build.xml
new file mode 100644
index 0000000..295d086
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/build.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,create-resources,deploy,run,undeploy,delete-resources" />
+
+	<target name="clean" depends="init-common">
+		<antcall target="clean-common" />
+		<delete>
+			<fileset dir="." includes="*.class" />
+			<fileset dir="client/test/client" includes="*.class" />
+		</delete>
+	</target>
+
+	<target name="compile" depends="clean">
+		<antcall target="compile-common">
+			<param name="src" value="servlet" />
+		</antcall>
+	</target>
+
+	<target name="build" depends="compile">
+		<property name="hasWebclient" value="yes" />
+		<antcall target="webclient-war-common">
+			<param name="hasWebclient" value="yes" />
+			<param name="webclient.war.classes" value="**/*.class" />
+		</antcall>
+
+		<javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar" includes="test/client/WebTest.java" />
+
+	</target>
+
+	<target name="build-publish-war" depends="build, publish-war-common" />
+
+	<target name="deploy" depends="init-common">
+		<antcall target="deploy-war-common" />
+	</target>
+
+	<target name="create-resources" depends="init-common">
+		<antcall target="create-jdbc-connpool-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+		</antcall>
+		<antcall target="create-jdbc-resource-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+			<param name="jdbc.resource.name" value="jdbc/jdbc-dev-test-resource" />
+		</antcall>
+	</target>
+
+
+	<target name="run" depends="init-common">
+		<java classname="test.client.WebTest">
+			<arg value="${http.host}" />
+			<arg value="${http.port}" />
+			<arg value="${contextroot}" />
+			<classpath>
+				<pathelement location="${env.APS_HOME}/lib/reportbuilder.jar" />
+				<pathelement location="client" />
+			</classpath>
+		</java>
+	</target>
+
+	<target name="undeploy" depends="init-common">
+		<antcall target="undeploy-war-common" />
+	</target>
+
+	<target name="delete-resources" depends="init-common">
+		<antcall target="delete-jdbc-resource-common">
+			<param name="jdbc.resource.name" value="jdbc/jdbc-dev-test-resource" />
+		</antcall>
+
+		<antcall target="delete-jdbc-connpool-common">
+			<param name="jdbc.connpool.name" value="jdbc-dev-test-pool" />
+		</antcall>
+	</target>
+
+	<target name="usage">
+		<antcall target="usage-common" />
+	</target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/client/test/client/WebTest.java
new file mode 100644
index 0000000..08ed734
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/client/test/client/WebTest.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+@SuppressWarnings("deprecation")
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+    private static final String TEST_NAME = "no-interface-local-view-proxy-serializable";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for Java EE resource injection");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, SimpleReporterAdapter.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, SimpleReporterAdapter.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, SimpleReporterAdapter.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: "
+                        + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, SimpleReporterAdapter.FAIL);
+            }
+        }
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/descriptor/beans.xml
new file mode 100644
index 0000000..1d355f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/descriptor/beans.xml
@@ -0,0 +1,25 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/descriptor/persistence.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/descriptor/persistence.xml
new file mode 100644
index 0000000..82f2d7b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/descriptor/persistence.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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
+
+-->
+
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
+  <persistence-unit name="pu1" transaction-type="JTA">
+    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+    <jta-data-source>jdbc/__default</jta-data-source>
+    <non-jta-data-source>jdbc/__default</non-jta-data-source>
+    <class>myapp.Department</class>
+    <class>myapp.Employee</class>
+    <properties>
+       <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
+       <property name="eclipselink.logging.level" value="INFO"/>
+    </properties>
+  </persistence-unit>
+</persistence>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/servlet/test/beans/TestBeanInterface.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/servlet/test/beans/TestBeanInterface.java
new file mode 100644
index 0000000..47668a4
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/servlet/test/beans/TestBeanInterface.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public interface TestBeanInterface {
+    public void setState(String s);
+    public String getState();
+    
+    public void method1();
+}
+    
+ 
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/servlet/test/beans/nonmock/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/servlet/test/beans/nonmock/TestBean.java
new file mode 100644
index 0000000..5099e36
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/servlet/test/beans/nonmock/TestBean.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+import java.io.Serializable;
+
+import javax.enterprise.context.SessionScoped;
+import javax.inject.Inject;
+
+import test.beans.TestBeanInterface;
+import test.ejb.HelloNoInterfaceLocalViewSfulEJB;
+import test.ejb.HelloNoInterfaceLocalViewSlessEJB;
+
+
+@SessionScoped
+public class TestBean implements TestBeanInterface, Serializable{
+    public static boolean testBeanInvoked = false;
+    
+    @Inject
+    HelloNoInterfaceLocalViewSfulEJB sfulEJB;
+
+    @Inject
+    HelloNoInterfaceLocalViewSlessEJB slessEJB;
+    
+    @Override
+    public void setState(String s) {
+        testBeanInvoked = true;
+        System.out.println("TestBean::m1 called");
+        sfulEJB.setState(s);
+    }
+
+    @Override
+    public String getState() {
+        System.out.println("TestBean::m2 called");
+        return sfulEJB.getState();
+    }
+
+    @Override
+    public String toString(){
+        return "TestBean::ejb=" + sfulEJB;
+    }
+
+    @Override
+    public void method1() {
+        slessEJB.method1("World");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/servlet/test/ejb/HelloNoInterfaceLocalViewSfulEJB.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/servlet/test/ejb/HelloNoInterfaceLocalViewSfulEJB.java
new file mode 100644
index 0000000..0abcba6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/servlet/test/ejb/HelloNoInterfaceLocalViewSfulEJB.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 javax.ejb.Stateful;
+
+@Stateful
+public class HelloNoInterfaceLocalViewSfulEJB {
+    
+    private String message;
+    public void setState(String msg){
+        this.message = msg;
+        
+    }
+    public String getState() {
+        return this.message;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/servlet/test/ejb/HelloNoInterfaceLocalViewSlessEJB.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/servlet/test/ejb/HelloNoInterfaceLocalViewSlessEJB.java
new file mode 100644
index 0000000..4818e1f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/servlet/test/ejb/HelloNoInterfaceLocalViewSlessEJB.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 javax.ejb.Stateful;
+
+@Stateful
+public class HelloNoInterfaceLocalViewSlessEJB {
+    public void method1(String msg) {
+        System.out.println("Hello" + msg);
+    }
+    
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/servlet/test/servlet/NoInterfaceProxySerializableEJBTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/servlet/test/servlet/NoInterfaceProxySerializableEJBTestServlet.java
new file mode 100644
index 0000000..13a603b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/no-interface-local-view-proxy-serializable/servlet/test/servlet/NoInterfaceProxySerializableEJBTestServlet.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.TestBeanInterface;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class NoInterfaceProxySerializableEJBTestServlet extends HttpServlet {
+
+    @Inject
+    TestBeanInterface tbi;
+
+    protected void doGet(HttpServletRequest request,
+            HttpServletResponse response) throws ServletException,
+            IOException {
+        PrintWriter writer = response.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        // set state
+        tbi.setState("TEST");
+
+        // Test serializability of EJB in TestBean.
+        try {
+            File tmpFile = File.createTempFile("SerializableProxyTest", null);
+            FileOutputStream fout = new FileOutputStream(tmpFile);
+            ObjectOutputStream oos = new ObjectOutputStream(fout);
+            System.out.println("Writing " + tbi + " to file-" + tmpFile);
+            oos.writeObject(tbi);
+            oos.close();
+
+            FileInputStream fin = new FileInputStream(tmpFile);
+            ObjectInputStream ois = new ObjectInputStream(fin);
+            System.out.println("Attempting to read " + tbi + " from file-"
+                    + tmpFile);
+
+            TestBeanInterface tb = (TestBeanInterface) ois.readObject();
+            // check if we have access to the same stateful session bean
+            System.out.println(tb.getState().equals("TEST"));
+            if (!tb.getState().equals("TEST"))
+                msg += "Failed to serialize stateful bean";
+            //check if we can invoke stateless EJB
+            tb.method1();
+            ois.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg += "Failed to serialize/deserialize proxy to EJB";
+        }
+
+        writer.write(msg + "\n");
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/README
new file mode 100644
index 0000000..b98ee72
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/README
@@ -0,0 +1,3 @@
+A simple field injection of a session scoped Bean into a Servlet that is bundled in an EAR.
+Related GlassFish issue: https://glassfish.dev.java.net/issues/show_bug.cgi?id=14832
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/build.properties
new file mode 100644
index 0000000..e8ca782
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/build.properties
@@ -0,0 +1,28 @@
+<!--
+
+    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-full-ear"/>
+<property name="appname" value="${module}"/>         
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="se.client" value="com.acme.Client"/>
+<property name="app.type" value="application"/>
+<property name="sun-application.xml" value="descriptor/sun-application.xml"/>
+<property name="application.xml" value="descriptor/application.xml"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
+<property name="contextroot" value="${module}"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/build.xml
new file mode 100644
index 0000000..5cb4fe7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/build.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="cdi-full-ear-App" default="usage" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+
+    <target name="all" depends="clean,build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+      <antcall  target="clean-common"/>
+    </target>
+ 
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="war"/>
+        </antcall>
+        <antcall target="webclient-war-common">
+          <param name="hasWebclient" value="true"/>
+        </antcall>
+        <antcall target="compile-common">
+            <param name="src" value="ejb"/>
+        </antcall>
+
+	<javac classpath="${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/modules/gf-client.jar:${build.classes.dir}:${env.APS_HOME}/lib/reporter.jar" srcdir="client" destdir="${build.classes.dir}" debug="on" failonerror="true">
+          <compilerarg line="-endorseddirs ${env.S1AS_HOME}/modules/endorsed"/>
+	 
+        </javac>
+<!--
+        <antcall target="compile-common">
+            <param name="src" value="client"/>
+        </antcall>
+-->
+    </target>
+
+    <target name="build" depends="compile">
+        <mkdir dir="${assemble.dir}"/>
+        <antcall target="ejb-jar-common">
+          <param name="ejbjar.classes" value="**/Foo.class,**/Hello.class,**/HelloRemote.class,**/Singleton*.class,**/HelloStateless.class,**/HelloSingleton.class,**/FooManagedBean.class,**/BarManagedBean.class, **/FooBarManagedBean.class, **/ManagedSuper.class"/>
+        </antcall>
+        <antcall target="ear-common"/>
+    </target> 
+    
+    <target name="deploy" 
+            depends="init-common">
+        <antcall target="deploy-common"/>
+    </target>
+
+    <target name="run" depends="init-common">
+       <java  fork="on" 
+              failonerror="true"
+              classpath="${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/modules/gf-client.jar:${build.classes.dir}:${env.APS_HOME}/lib/reporter.jar"
+              classname="${se.client}">
+           <arg line="${contextroot}"/>
+           <arg line="${http.host}"/>
+           <arg line="${http.port}"/>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/client/com/acme/Client.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/client/com/acme/Client.java
new file mode 100644
index 0000000..4271f2a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/client/com/acme/Client.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import javax.annotation.Resource;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+public class Client {
+
+    private static final String TEST_NAME = "normal-lookup-in-ear";
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+
+    private static String appName;
+    private String host;
+    private String port;
+
+    @Resource(lookup = "java:app/env/value1")
+    private static Integer appLevelViaLookup;
+
+    public static void main(String args[]) {
+        appName = args[0];
+        stat.addDescription(appName);
+        Client client = new Client(args);
+        client.doTest();
+        stat.printSummary(appName + "ID");
+        System.out.println("appLevelViaLookup = '" + appLevelViaLookup + "'");
+    }
+
+    public Client(String[] args) {
+        host = args[1];
+        port = args[2];
+    }
+
+    public void doTest() {
+
+        try {
+
+            String url = "http://" + host + ":" + port + "/" + appName
+                    + "/HelloServlet";
+
+            System.out.println("invoking webclient servlet at " + 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.out.println("<response>:" + line);
+                if (line.trim().length() > 0) {
+                    stat.addStatus(TEST_NAME, stat.FAIL);
+                    return;
+                }
+            }
+            if (code != 200) {
+                stat.addStatus(TEST_NAME, stat.FAIL);
+                return;
+            }
+            stat.addStatus(TEST_NAME, stat.PASS);
+
+        } catch (Exception e) {
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            e.printStackTrace();
+        }
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/descriptor/application.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/descriptor/application.xml
new file mode 100644
index 0000000..d9378e7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/descriptor/application.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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">
+  <display-name>ejb-ejb30-hello-session3App</display-name>
+  <module>
+    <ejb>cdi-full-ear-ejb.jar</ejb>
+  </module>
+  <module>
+    <web>
+      <web-uri>cdi-full-ear-web.war</web-uri>
+      <context-root>cdi-full-ear</context-root>
+    </web>
+  </module>
+  <env-entry>
+     <env-entry-name>java:app/env/value1</env-entry-name>
+     <env-entry-type>java.lang.Integer</env-entry-type>
+     <env-entry-value>18338</env-entry-value>
+  </env-entry>
+  <env-entry>
+    <env-entry-name>java:app/env/myString</env-entry-name>
+    <env-entry-type>java.lang.String</env-entry-type>
+    <env-entry-value>myString</env-entry-value>
+  </env-entry>
+</application>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/ejb/com/acme/Hello.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/ejb/com/acme/Hello.java
new file mode 100644
index 0000000..2ad0681
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/ejb/com/acme/Hello.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+
+
+public interface Hello {
+
+    public String hello();
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/ejb/com/acme/HelloSingleton.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/ejb/com/acme/HelloSingleton.java
new file mode 100644
index 0000000..4a9b9bf
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/ejb/com/acme/HelloSingleton.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.annotation.Resource;
+import javax.ejb.EJB;
+import javax.ejb.SessionContext;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+
+@Singleton
+@Startup
+public class HelloSingleton implements Hello {
+
+    @Resource
+    SessionContext sessionCtx;
+
+    @Resource(name = "java:app/env/myString")
+    protected String myString;
+
+    @EJB(name = "java:app/env/appLevelEjbRef")
+    private Hello hello;
+
+    String appName;
+    String moduleName;
+
+    @PostConstruct
+    private void init() {
+        System.out.println("HelloSingleton::init()");
+
+        System.out.println("myString = '" + myString + "'");
+        if ((myString == null) || !(myString.equals("myString"))) {
+            throw new RuntimeException("Invalid value " + myString
+                    + " for myString");
+        }
+
+        appName = (String) sessionCtx.lookup("java:app/AppName");
+        moduleName = (String) sessionCtx.lookup("java:module/ModuleName");
+
+        System.out.println("AppName = " + appName);
+        System.out.println("ModuleName = " + moduleName);
+
+    }
+
+    public String hello() {
+
+        System.out.println("HelloSingleton::hello()");
+
+        return "hello, world!\n";
+    }
+
+    @PreDestroy
+    private void destroy() {
+        System.out.println("HelloSingleton::destroy()");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/manifest.mf b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/manifest.mf
new file mode 100644
index 0000000..328e8e5
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/manifest.mf
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+X-COMMENT: Main-Class will be added automatically by build
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/war/com/acme/Hello.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/war/com/acme/Hello.java
new file mode 100644
index 0000000..2ad0681
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/war/com/acme/Hello.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+
+
+public interface Hello {
+
+    public String hello();
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/war/com/acme/NormalLookupInEARServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/war/com/acme/NormalLookupInEARServlet.java
new file mode 100644
index 0000000..d0ed24f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/war/com/acme/NormalLookupInEARServlet.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.annotation.Resource;
+import javax.ejb.EJB;
+import javax.enterprise.inject.Instance;
+import javax.inject.Inject;
+import javax.naming.InitialContext;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@SuppressWarnings("serial")
+@WebServlet(urlPatterns = "/HelloServlet", loadOnStartup = 1)
+@EJB(name = "java:module/m1", beanName = "HelloSingleton", beanInterface = Hello.class)
+public class NormalLookupInEARServlet extends HttpServlet {
+
+    @Resource(name = "java:app/env/myString")
+    protected String myString;
+
+    private Hello singleton1;
+    
+    @Inject 
+    TestBean tw;
+
+    private String msg = "";
+
+    @Override
+    public void init(ServletConfig config) throws ServletException {
+        super.init(config);
+
+        System.out.println("In HelloServlet::init");
+        System.out.println("myString = '" + myString + "'");
+        if ((myString == null) || !(myString.equals("myString"))) {
+            msg += "@Resource lookup of myString failed";
+            throw new RuntimeException("Invalid value " + myString
+                    + " for myString");
+        }
+
+    }
+
+    @Override
+    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+            throws ServletException, IOException {
+        System.out.println("In HelloServlet::doGet");
+        resp.setContentType("text/html");
+
+        PrintWriter out = resp.getWriter();
+        try {
+            InitialContext ic = new InitialContext();
+            String appName = (String) ic.lookup("java:app/AppName");
+            String moduleName = (String) ic.lookup("java:module/ModuleName");
+            checkForNull(appName, "AppName lookup returned null");
+            checkForNull(moduleName, "ModuleName lookup returned null");
+
+            singleton1 = (Hello) ic.lookup("java:module/m1");
+            checkForNull(singleton1,
+                    "programmatic lookup of module-level singleton EJB failed");
+
+            System.out.println("My AppName = "
+                    + ic.lookup("java:app/AppName"));
+
+            System.out.println("My ModuleName = "
+                    + ic.lookup("java:module/ModuleName"));
+
+        } catch (Exception e) {
+            msg += "Exception occurred during test Exception: "
+                    + e.getMessage();
+            e.printStackTrace();
+        }
+
+        singleton1.hello();
+        
+        checkForNull(tw, "normal lookup of session scoped bean in war failed");
+
+        out.println(msg);
+
+    }
+
+    protected void checkForNull(Object o, String errorMessage) {
+        if (o == null)
+            msg += " " + errorMessage;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/war/com/acme/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/war/com/acme/TestBean.java
new file mode 100644
index 0000000..f0092d7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/war/com/acme/TestBean.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+public interface TestBean {
+    public void m1();
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/war/com/acme/TestBeanWARImpl.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/war/com/acme/TestBeanWARImpl.java
new file mode 100644
index 0000000..8b45c02
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/normal-bean-injection-ear/war/com/acme/TestBeanWARImpl.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import javax.enterprise.context.SessionScoped;
+
+
+@SessionScoped
+public class TestBeanWARImpl implements TestBean,java.io.Serializable {
+    @Override
+    public void m1() {
+        System.out.println("TestBean::m1");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/README
new file mode 100644
index 0000000..e3888d0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/README
@@ -0,0 +1,4 @@
+A variant of the normal-bean-injection-ear testcase that uses programmatic lookup
+
+Related GlassFish issue: https://glassfish.dev.java.net/issues/show_bug.cgi?id=14832
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/build.properties
new file mode 100644
index 0000000..e8ca782
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/build.properties
@@ -0,0 +1,28 @@
+<!--
+
+    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-full-ear"/>
+<property name="appname" value="${module}"/>         
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="se.client" value="com.acme.Client"/>
+<property name="app.type" value="application"/>
+<property name="sun-application.xml" value="descriptor/sun-application.xml"/>
+<property name="application.xml" value="descriptor/application.xml"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
+<property name="contextroot" value="${module}"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/build.xml
new file mode 100644
index 0000000..5cb4fe7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/build.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="cdi-full-ear-App" default="usage" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+
+    <target name="all" depends="clean,build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+      <antcall  target="clean-common"/>
+    </target>
+ 
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="war"/>
+        </antcall>
+        <antcall target="webclient-war-common">
+          <param name="hasWebclient" value="true"/>
+        </antcall>
+        <antcall target="compile-common">
+            <param name="src" value="ejb"/>
+        </antcall>
+
+	<javac classpath="${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/modules/gf-client.jar:${build.classes.dir}:${env.APS_HOME}/lib/reporter.jar" srcdir="client" destdir="${build.classes.dir}" debug="on" failonerror="true">
+          <compilerarg line="-endorseddirs ${env.S1AS_HOME}/modules/endorsed"/>
+	 
+        </javac>
+<!--
+        <antcall target="compile-common">
+            <param name="src" value="client"/>
+        </antcall>
+-->
+    </target>
+
+    <target name="build" depends="compile">
+        <mkdir dir="${assemble.dir}"/>
+        <antcall target="ejb-jar-common">
+          <param name="ejbjar.classes" value="**/Foo.class,**/Hello.class,**/HelloRemote.class,**/Singleton*.class,**/HelloStateless.class,**/HelloSingleton.class,**/FooManagedBean.class,**/BarManagedBean.class, **/FooBarManagedBean.class, **/ManagedSuper.class"/>
+        </antcall>
+        <antcall target="ear-common"/>
+    </target> 
+    
+    <target name="deploy" 
+            depends="init-common">
+        <antcall target="deploy-common"/>
+    </target>
+
+    <target name="run" depends="init-common">
+       <java  fork="on" 
+              failonerror="true"
+              classpath="${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/modules/gf-client.jar:${build.classes.dir}:${env.APS_HOME}/lib/reporter.jar"
+              classname="${se.client}">
+           <arg line="${contextroot}"/>
+           <arg line="${http.host}"/>
+           <arg line="${http.port}"/>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/client/com/acme/Client.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/client/com/acme/Client.java
new file mode 100644
index 0000000..1cb4a84
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/client/com/acme/Client.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import javax.annotation.Resource;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+public class Client {
+
+    private static final String TEST_NAME = "programmatic-lookup-in-ear";
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+
+    private static String appName;
+    private String host;
+    private String port;
+
+    @Resource(lookup = "java:app/env/value1")
+    private static Integer appLevelViaLookup;
+
+    public static void main(String args[]) {
+        appName = args[0];
+        stat.addDescription(appName);
+        Client client = new Client(args);
+        client.doTest();
+        stat.printSummary(appName + "ID");
+        System.out.println("appLevelViaLookup = '" + appLevelViaLookup + "'");
+    }
+
+    public Client(String[] args) {
+        host = args[1];
+        port = args[2];
+    }
+
+    public void doTest() {
+
+        try {
+
+            String url = "http://" + host + ":" + port + "/" + appName
+                    + "/HelloServlet";
+
+            System.out.println("invoking webclient servlet at " + 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.out.println("<response>:" + line);
+                if (line.trim().length() > 0) {
+                    stat.addStatus(TEST_NAME, stat.FAIL);
+                    return;
+                }
+            }
+            if (code != 200) {
+                stat.addStatus(TEST_NAME, stat.FAIL);
+                return;
+            }
+            stat.addStatus(TEST_NAME, stat.PASS);
+
+        } catch (Exception e) {
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            e.printStackTrace();
+        }
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/descriptor/application.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/descriptor/application.xml
new file mode 100644
index 0000000..d9378e7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/descriptor/application.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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">
+  <display-name>ejb-ejb30-hello-session3App</display-name>
+  <module>
+    <ejb>cdi-full-ear-ejb.jar</ejb>
+  </module>
+  <module>
+    <web>
+      <web-uri>cdi-full-ear-web.war</web-uri>
+      <context-root>cdi-full-ear</context-root>
+    </web>
+  </module>
+  <env-entry>
+     <env-entry-name>java:app/env/value1</env-entry-name>
+     <env-entry-type>java.lang.Integer</env-entry-type>
+     <env-entry-value>18338</env-entry-value>
+  </env-entry>
+  <env-entry>
+    <env-entry-name>java:app/env/myString</env-entry-name>
+    <env-entry-type>java.lang.String</env-entry-type>
+    <env-entry-value>myString</env-entry-value>
+  </env-entry>
+</application>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/ejb/com/acme/Hello.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/ejb/com/acme/Hello.java
new file mode 100644
index 0000000..2ad0681
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/ejb/com/acme/Hello.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+
+
+public interface Hello {
+
+    public String hello();
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/ejb/com/acme/HelloSingleton.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/ejb/com/acme/HelloSingleton.java
new file mode 100644
index 0000000..4a9b9bf
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/ejb/com/acme/HelloSingleton.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.annotation.Resource;
+import javax.ejb.EJB;
+import javax.ejb.SessionContext;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+
+@Singleton
+@Startup
+public class HelloSingleton implements Hello {
+
+    @Resource
+    SessionContext sessionCtx;
+
+    @Resource(name = "java:app/env/myString")
+    protected String myString;
+
+    @EJB(name = "java:app/env/appLevelEjbRef")
+    private Hello hello;
+
+    String appName;
+    String moduleName;
+
+    @PostConstruct
+    private void init() {
+        System.out.println("HelloSingleton::init()");
+
+        System.out.println("myString = '" + myString + "'");
+        if ((myString == null) || !(myString.equals("myString"))) {
+            throw new RuntimeException("Invalid value " + myString
+                    + " for myString");
+        }
+
+        appName = (String) sessionCtx.lookup("java:app/AppName");
+        moduleName = (String) sessionCtx.lookup("java:module/ModuleName");
+
+        System.out.println("AppName = " + appName);
+        System.out.println("ModuleName = " + moduleName);
+
+    }
+
+    public String hello() {
+
+        System.out.println("HelloSingleton::hello()");
+
+        return "hello, world!\n";
+    }
+
+    @PreDestroy
+    private void destroy() {
+        System.out.println("HelloSingleton::destroy()");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/manifest.mf b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/manifest.mf
new file mode 100644
index 0000000..328e8e5
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/manifest.mf
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+X-COMMENT: Main-Class will be added automatically by build
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/war/com/acme/Hello.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/war/com/acme/Hello.java
new file mode 100644
index 0000000..2ad0681
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/war/com/acme/Hello.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+
+
+public interface Hello {
+
+    public String hello();
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/war/com/acme/ProgrammaticLookupInEARServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/war/com/acme/ProgrammaticLookupInEARServlet.java
new file mode 100644
index 0000000..ed75d76
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/war/com/acme/ProgrammaticLookupInEARServlet.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.annotation.Resource;
+import javax.ejb.EJB;
+import javax.enterprise.inject.Instance;
+import javax.inject.Inject;
+import javax.naming.InitialContext;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@SuppressWarnings("serial")
+@WebServlet(urlPatterns = "/HelloServlet", loadOnStartup = 1)
+@EJB(name = "java:module/m1", beanName = "HelloSingleton", beanInterface = Hello.class)
+public class ProgrammaticLookupInEARServlet extends HttpServlet {
+
+    @Resource(name = "java:app/env/myString")
+    protected String myString;
+
+    private Hello singleton1;
+    
+    @Inject 
+    Instance<TestBean> programmaticLookup;
+
+    private String msg = "";
+
+    @Override
+    public void init(ServletConfig config) throws ServletException {
+        super.init(config);
+
+        System.out.println("In HelloServlet::init");
+        System.out.println("myString = '" + myString + "'");
+        if ((myString == null) || !(myString.equals("myString"))) {
+            msg += "@Resource lookup of myString failed";
+            throw new RuntimeException("Invalid value " + myString
+                    + " for myString");
+        }
+
+    }
+
+    @Override
+    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+            throws ServletException, IOException {
+        System.out.println("In HelloServlet::doGet");
+        resp.setContentType("text/html");
+
+        PrintWriter out = resp.getWriter();
+        try {
+            InitialContext ic = new InitialContext();
+            String appName = (String) ic.lookup("java:app/AppName");
+            String moduleName = (String) ic.lookup("java:module/ModuleName");
+            checkForNull(appName, "AppName lookup returned null");
+            checkForNull(moduleName, "ModuleName lookup returned null");
+
+            singleton1 = (Hello) ic.lookup("java:module/m1");
+            checkForNull(singleton1,
+                    "programmatic lookup of module-level singleton EJB failed");
+
+            System.out.println("My AppName = "
+                    + ic.lookup("java:app/AppName"));
+
+            System.out.println("My ModuleName = "
+                    + ic.lookup("java:module/ModuleName"));
+
+        } catch (Exception e) {
+            msg += "Exception occurred during test Exception: "
+                    + e.getMessage();
+            e.printStackTrace();
+        }
+
+        singleton1.hello();
+        
+        checkForNull(programmaticLookup.get(), "programmatic lookup of session scoped bean in war failed");
+
+        out.println(msg);
+
+    }
+
+    protected void checkForNull(Object o, String errorMessage) {
+        if (o == null)
+            msg += " " + errorMessage;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/war/com/acme/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/war/com/acme/TestBean.java
new file mode 100644
index 0000000..f0092d7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/war/com/acme/TestBean.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+public interface TestBean {
+    public void m1();
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/war/com/acme/TestBeanWARImpl.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/war/com/acme/TestBeanWARImpl.java
new file mode 100644
index 0000000..05f6914
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/programmatic-lookup-ear/war/com/acme/TestBeanWARImpl.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import java.io.Serializable;
+
+import javax.enterprise.context.SessionScoped;
+
+
+@SessionScoped
+public class TestBeanWARImpl implements TestBean, Serializable {
+    @Override
+    public void m1() {
+        System.out.println("TestBean::m1");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/README
new file mode 100644
index 0000000..2be7b7d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/README
@@ -0,0 +1,5 @@
+Test
+    - Injection of ServletContext into a Servlet. As CDI does not allow injection of ServletContext, a Bridge 
+ServletContextListener is used to fire events during the initialization  and destruction of ServletContext as suggested in 
+http://seamframework.org/Community/InjectServletContextIntoManagedBean#comment111596
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/WebTest.java
new file mode 100644
index 0000000..7f47426
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/WebTest.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "servlet-context-injection-in-cdi";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0. initParams: n1=v1, n2=v2 Servlet context: /cdi-servlet-context-injection";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for @WebServlet");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/build.properties
new file mode 100644
index 0000000..ca2edae
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-servlet-context-injection"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/build.xml
new file mode 100644
index 0000000..83ad666
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/build.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/servlet/tests/cdi/artifacts/Destroyed.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/servlet/tests/cdi/artifacts/Destroyed.java
new file mode 100644
index 0000000..38d4216
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/servlet/tests/cdi/artifacts/Destroyed.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 tests.cdi.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({TYPE, METHOD, PARAMETER, FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Destroyed {
+
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/servlet/tests/cdi/artifacts/Initialized.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/servlet/tests/cdi/artifacts/Initialized.java
new file mode 100644
index 0000000..59788c2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/servlet/tests/cdi/artifacts/Initialized.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 tests.cdi.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({TYPE, METHOD, PARAMETER, FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Initialized {
+
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/servlet/tests/cdi/artifacts/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/servlet/tests/cdi/artifacts/Preferred.java
new file mode 100644
index 0000000..d10f685
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/servlet/tests/cdi/artifacts/Preferred.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 tests.cdi.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({TYPE, METHOD, PARAMETER, FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/servlet/tests/cdi/context/ServletContextBridge.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/servlet/tests/cdi/context/ServletContextBridge.java
new file mode 100644
index 0000000..c978a9b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/servlet/tests/cdi/context/ServletContextBridge.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 tests.cdi.context;
+
+import java.lang.annotation.Annotation;
+
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.util.AnnotationLiteral;
+import javax.inject.Inject;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+import javax.servlet.annotation.WebListener;
+
+import tests.cdi.artifacts.Destroyed;
+import tests.cdi.artifacts.Initialized;
+
+@WebListener
+public class ServletContextBridge implements ServletContextListener {
+    @Inject
+    private BeanManager beanManager;
+
+    public ServletContextBridge() {
+    }
+
+    /**
+     * Servlet context initialized / destroyed events
+     */
+
+    public void contextDestroyed(final ServletContextEvent e) {
+        fireEvent(e, DESTROYED);
+    }
+
+    public void contextInitialized(final ServletContextEvent e) {
+        fireEvent(e, INITIALIZED);
+    }
+
+    private void fireEvent(final Object payload,
+            final Annotation... qualifiers) {
+        System.out.println("Firing event #0 with qualifiers #1" + payload
+                + qualifiers);
+        beanManager.fireEvent(payload, qualifiers);
+    }
+
+    private static final AnnotationLiteral<Destroyed> DESTROYED = new AnnotationLiteral<Destroyed>() {
+        private static final long serialVersionUID = -1610281796509557441L;
+    };
+
+    private static final AnnotationLiteral<Initialized> INITIALIZED = new AnnotationLiteral<Initialized>() {
+        private static final long serialVersionUID = -1610281796509557441L;
+    };
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/servlet/tests/cdi/context/ServletContextProducer.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/servlet/tests/cdi/context/ServletContextProducer.java
new file mode 100644
index 0000000..964aac0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/servlet/tests/cdi/context/ServletContextProducer.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 tests.cdi.context;
+
+//JJS: With cdi 1.1 the ServletContext is produced by Weld (2.0) and so producing one creates an ambiguous dependency.
+//import javax.enterprise.context.ApplicationScoped;
+//import javax.enterprise.event.Observes;
+//import javax.enterprise.inject.Produces;
+//import javax.enterprise.inject.spi.BeanManager;
+//import javax.inject.Inject;
+//import javax.servlet.ServletContext;
+//import javax.servlet.ServletContextEvent;
+//
+//import tests.cdi.artifacts.Destroyed;
+//import tests.cdi.artifacts.Initialized;
+//
+//@ApplicationScoped
+public class ServletContextProducer {
+//    private ServletContext servletContext;
+//
+////    @Inject
+////    private BeanManager beanManager;
+//
+//    protected void contextInitialized(
+//            @Observes @Initialized ServletContextEvent e) {
+//        System.out.println("Servlet context initialized with event -" + e);
+//        servletContext = e.getServletContext();
+////        servletContext.setAttribute(BeanManager.class.getName(), beanManager);
+//    }
+//
+//    protected void contextDestroyed(@Observes @Destroyed ServletContextEvent e) {
+//        System.out.println("Servlet context destroyed with event #0" + e);
+//        servletContext = null;
+//    }
+//
+//    @Produces
+//    @ApplicationScoped
+//    public ServletContext getServletContext() {
+//        return servletContext;
+//    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/servlet/tests/cdi/servlet/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/servlet/tests/cdi/servlet/TestBean.java
new file mode 100644
index 0000000..182be84
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/servlet/tests/cdi/servlet/TestBean.java
@@ -0,0 +1,33 @@
+/*
+ * 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 tests.cdi.servlet;
+
+import javax.inject.Inject;
+import javax.servlet.ServletContext;
+
+//Simple TestBean to test CDI. 
+public class TestBean
+{
+    @Inject
+    ServletContext sc;
+    
+    public String m1(){
+        System.out.println("**********SC = " + sc.getContextPath());
+        return sc.getContextPath();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/servlet/tests/cdi/servlet/TestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/servlet/tests/cdi/servlet/TestServlet.java
new file mode 100644
index 0000000..8c70b32
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/servlet-context-injection-cdi/servlet/tests/cdi/servlet/TestServlet.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 tests.cdi.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.enterprise.inject.spi.BeanManager;
+import javax.inject.Inject;
+import javax.naming.InitialContext;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" }, initParams = {
+        @WebInitParam(name = "n1", value = "v1"),
+        @WebInitParam(name = "n2", value = "v2") })
+public class TestServlet extends HttpServlet {
+    @Inject
+    TestBean tb;
+    @Inject
+    BeanManager bm;
+    
+    BeanManager bm1;
+    
+    @Inject
+    ServletContext sc;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0. ");
+        String msg = "n1=" + getInitParameter("n1") + ", n2="
+                + getInitParameter("n2");
+        if (tb == null)
+            msg += "Bean injection into Servlet failed";
+        if (bm == null)
+            msg += "BeanManager Injection via @Inject failed";
+        if (sc == null)
+            msg += "ServletContext Injection via @Inject failed";
+        String servletContext = tb.m1();
+        try {
+            bm1 = (BeanManager) ((new InitialContext())
+                    .lookup("java:comp/BeanManager"));
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            msg += "BeanManager Injection via component environment lookup failed";
+        }
+        if (bm1 == null)
+            msg += "BeanManager Injection via component environment lookup failed";
+
+        System.out.println("BeanManager is " + bm);
+        System.out.println("BeanManager via lookup is " + bm1);
+
+        msg = "initParams: " + msg + " Servlet context: " + servletContext + "\n";
+        writer.write(msg);
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/README
new file mode 100644
index 0000000..e77c086
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/README
@@ -0,0 +1 @@
+- modification of the simple-managed-bean-interceptor test with non-null package for the managed bean and no no-arg constructor. Though the managed bean spec requires a no-arg constructor, it allows CDI specificaiton and implementations to support ManagedBeans with no no-arg constructor. Deployment would succeed on Weld 1.1 and above.
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/WebTest.java
new file mode 100644
index 0000000..d2c69a6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/WebTest.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "simple-managed-bean-interceptor-non-null-package-noarg-constructor-missing";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0. initParams: n1=v1, n2=v2";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for @WebServlet");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code == 404|| code == 500) {
+            stat.addStatus(TEST_NAME, stat.PASS);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/build.properties
new file mode 100644
index 0000000..4809e75
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-simple-managed-bean-interceptor"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/build.xml
new file mode 100644
index 0000000..c25e17e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/build.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="WebTest.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/descriptor/beans.xml
new file mode 100644
index 0000000..6264a41
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/descriptor/beans.xml
@@ -0,0 +1,24 @@
+<!--
+
+    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
+
+-->
+
+<beans 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/beans_1_0.xsd">
+   <interceptors>
+      <class>test.interceptors.TestAroundInvokeInterceptor</class>
+   </interceptors>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/servlet/test/beans/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/servlet/test/beans/TestBean.java
new file mode 100644
index 0000000..4a7146e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/servlet/test/beans/TestBean.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+//Simple Bean to test injection into ManagedBeans
+public class TestBean {
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/servlet/test/beans/TestManagedBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/servlet/test/beans/TestManagedBean.java
new file mode 100644
index 0000000..f631ae8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/servlet/test/beans/TestManagedBean.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+//Simple TestBean to test CDI. 
+//This bean implements Serializable as it needs to be placed into a Stateful Bean
+@javax.annotation.ManagedBean
+public class TestManagedBean {
+    TestBean tb;
+    boolean postConstructCalled = false;
+
+    //a ManagedBean needs to have a no-arg constructor
+/*
+    public TestManagedBean(){
+    }
+*/
+
+    @javax.inject.Inject //Constructor based Injection
+    public TestManagedBean(TestBean tb){
+        this.tb = tb;
+    }
+
+
+    @javax.annotation.PostConstruct
+    public void init(){
+        System.out.println("In ManagedBean:: PostConstruct");
+        postConstructCalled = true;
+    }
+
+    @Tester
+    public void foo(){
+        System.out.println("foo called");
+    }
+
+    public boolean testPostConstructCalled(){
+        return this.postConstructCalled;
+    }
+
+    public boolean testInjection(){
+        System.out.println("In ManagedBean:: tb=" + tb);
+        postConstructCalled = true;
+        return this.tb != null;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/servlet/test/beans/Tester.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/servlet/test/beans/Tester.java
new file mode 100644
index 0000000..779d213
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/servlet/test/beans/Tester.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.interceptor.*;
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+
+@InterceptorBinding
+@Target({METHOD, TYPE})
+@Retention(RUNTIME)
+public @interface Tester {}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/servlet/test/interceptors/TestAroundInvokeInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/servlet/test/interceptors/TestAroundInvokeInterceptor.java
new file mode 100644
index 0000000..700bf69
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/servlet/test/interceptors/TestAroundInvokeInterceptor.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.interceptors;
+
+import javax.interceptor.*;
+
+import test.beans.Tester;
+
+@Tester @Interceptor
+public class TestAroundInvokeInterceptor {
+    public static int aroundInvokeCount = 0;
+
+    public static void reset(){
+        aroundInvokeCount = 0;
+    }
+
+   @AroundInvoke 
+   public Object testMethod(InvocationContext ctx) throws Exception {
+        System.out.println("TestAroundInvokeIntercetpr:: aroundInvoke called - target:" + ctx.getTarget() + " , params:"+ ctx.getParameters());
+        aroundInvokeCount ++;
+        ctx.proceed();
+        return null;
+   }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/servlet/test/servlet/TestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/servlet/test/servlet/TestServlet.java
new file mode 100644
index 0000000..58feb50
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-noargconstructor-missing/servlet/test/servlet/TestServlet.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Enumeration;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.TestManagedBean;
+import test.interceptors.TestAroundInvokeInterceptor;
+
+@WebServlet(name="mytest",
+        urlPatterns={"/myurl"},
+        initParams={ @WebInitParam(name="n1", value="v1"), @WebInitParam(name="n2", value="v2") } )
+public class TestServlet extends HttpServlet {
+    @javax.inject.Inject TestManagedBean tb1;
+    @javax.annotation.Resource TestManagedBean tb;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0. ");
+        String msg = "n1=" + getInitParameter("n1") +
+            ", n2=" + getInitParameter("n2");
+
+        //ManagedBean testing .. add additional messages in the "msg" string, so that the test will FAIL in the client
+        msg += testManagedBean(tb, " | TestManagedBean injected via @Resource");
+        msg += testManagedBean(tb1, " | TestManagedBean injected via @Inject");
+        msg += testInterceptors();
+
+        writer.write("initParams: " + msg + "\n");
+    }
+
+    private String testManagedBean(TestManagedBean tb, String info) {
+        String msg = "";
+        if (tb == null) msg += info + " is null!";
+        if (tb != null && !tb.testPostConstructCalled()) msg += info + " postConstruct not called";
+        if (tb != null && !tb.testInjection()) msg += info + "Bean Injection into ManagedBean failed";
+        return msg;
+    }
+
+    private String testInterceptors(){
+        System.out.println("calling foo on an @Resource injected Managed Bean");
+        tb.foo();
+        System.out.println("calling foo on an @Inject Managed Bean");
+        tb1.foo(); //TestAroundInvokeInterceptor is not called in this case
+
+        int count = TestAroundInvokeInterceptor.aroundInvokeCount;
+        System.out.println("TestAroundInvokeInterceptor called " + count + " times");
+        TestAroundInvokeInterceptor.reset();
+        if (count == 1) return ""; 
+            else return "Interceptor invocation count" + count + " invalid";
+   }
+
+ 
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/README
new file mode 100644
index 0000000..6f3f094
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/README
@@ -0,0 +1 @@
+- modification of the simple-managed-bean-interceptor test with non-null package for the managed bean
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/WebTest.java
new file mode 100644
index 0000000..cbd3be2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/WebTest.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "simple-managed-bean-interceptor-non-null-package";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0. initParams: n1=v1, n2=v2";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for @WebServlet");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/build.properties
new file mode 100644
index 0000000..4809e75
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-simple-managed-bean-interceptor"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/build.xml
new file mode 100644
index 0000000..83ad666
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/build.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/descriptor/beans.xml
new file mode 100644
index 0000000..6264a41
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/descriptor/beans.xml
@@ -0,0 +1,24 @@
+<!--
+
+    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
+
+-->
+
+<beans 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/beans_1_0.xsd">
+   <interceptors>
+      <class>test.interceptors.TestAroundInvokeInterceptor</class>
+   </interceptors>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/servlet/test/beans/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/servlet/test/beans/TestBean.java
new file mode 100644
index 0000000..4a7146e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/servlet/test/beans/TestBean.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+//Simple Bean to test injection into ManagedBeans
+public class TestBean {
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/servlet/test/beans/TestManagedBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/servlet/test/beans/TestManagedBean.java
new file mode 100644
index 0000000..2bc9acc
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/servlet/test/beans/TestManagedBean.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+//Simple TestBean to test CDI. 
+//This bean implements Serializable as it needs to be placed into a Stateful Bean
+@javax.annotation.ManagedBean
+public class TestManagedBean {
+    TestBean tb;
+    boolean postConstructCalled = false;
+
+    //a ManagedBean needs to have a no-arg constructor
+    public TestManagedBean(){
+    }
+
+    @javax.inject.Inject //Constructor based Injection
+    public TestManagedBean(TestBean tb){
+        this.tb = tb;
+    }
+
+
+    @javax.annotation.PostConstruct
+    public void init(){
+        System.out.println("In ManagedBean:: PostConstruct");
+        postConstructCalled = true;
+    }
+
+    @Tester
+    public void foo(){
+        System.out.println("foo called");
+    }
+
+    public boolean testPostConstructCalled(){
+        return this.postConstructCalled;
+    }
+
+    public boolean testInjection(){
+        System.out.println("In ManagedBean:: tb=" + tb);
+        postConstructCalled = true;
+        return this.tb != null;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/servlet/test/beans/Tester.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/servlet/test/beans/Tester.java
new file mode 100644
index 0000000..779d213
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/servlet/test/beans/Tester.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.interceptor.*;
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+
+@InterceptorBinding
+@Target({METHOD, TYPE})
+@Retention(RUNTIME)
+public @interface Tester {}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/servlet/test/interceptors/TestAroundInvokeInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/servlet/test/interceptors/TestAroundInvokeInterceptor.java
new file mode 100644
index 0000000..700bf69
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/servlet/test/interceptors/TestAroundInvokeInterceptor.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.interceptors;
+
+import javax.interceptor.*;
+
+import test.beans.Tester;
+
+@Tester @Interceptor
+public class TestAroundInvokeInterceptor {
+    public static int aroundInvokeCount = 0;
+
+    public static void reset(){
+        aroundInvokeCount = 0;
+    }
+
+   @AroundInvoke 
+   public Object testMethod(InvocationContext ctx) throws Exception {
+        System.out.println("TestAroundInvokeIntercetpr:: aroundInvoke called - target:" + ctx.getTarget() + " , params:"+ ctx.getParameters());
+        aroundInvokeCount ++;
+        ctx.proceed();
+        return null;
+   }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/servlet/test/servlet/TestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/servlet/test/servlet/TestServlet.java
new file mode 100644
index 0000000..917a0fe
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/simple-managed-bean-interceptor-nonnull-package/servlet/test/servlet/TestServlet.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Enumeration;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.TestManagedBean;
+import test.interceptors.TestAroundInvokeInterceptor;
+
+@WebServlet(name="mytest",
+        urlPatterns={"/myurl"},
+        initParams={ @WebInitParam(name="n1", value="v1"), @WebInitParam(name="n2", value="v2") } )
+public class TestServlet extends HttpServlet {
+    @javax.inject.Inject TestManagedBean tb1;
+    @javax.annotation.Resource TestManagedBean tb;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0. ");
+        String msg = "n1=" + getInitParameter("n1") +
+            ", n2=" + getInitParameter("n2");
+
+        //ManagedBean testing .. add additional messages in the "msg" string, so that the test will FAIL in the client
+        msg += testManagedBean(tb, " | TestManagedBean injected via @Resource");
+        msg += testManagedBean(tb1, " | TestManagedBean injected via @Inject");
+        msg += testInterceptors();
+
+        writer.write("initParams: " + msg + "\n");
+    }
+
+    private String testManagedBean(TestManagedBean tb, String info) {
+        String msg = "";
+        if (tb == null) msg += info + " is null!";
+        if (tb != null && !tb.testPostConstructCalled()) msg += info + " postConstruct not called";
+        if (tb != null && !tb.testInjection()) msg += info + "Bean Injection into ManagedBean failed";
+        return msg;
+    }
+
+    private String testInterceptors(){
+        System.out.println("calling foo on an @Resource injected Managed Bean");
+        tb.foo();
+        System.out.println("calling foo on an @Inject Managed Bean");
+        tb1.foo(); //TestAroundInvokeInterceptor is not called in this case
+
+        int count = TestAroundInvokeInterceptor.aroundInvokeCount;
+        System.out.println("TestAroundInvokeInterceptor called " + count + " times");
+        TestAroundInvokeInterceptor.reset();
+        if (count == 2) return "";
+            else return "Interceptor invocation count" + count + " invalid";
+   }
+
+ 
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/README b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/README
new file mode 100644
index 0000000..633f9b5
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/README
@@ -0,0 +1,12 @@
+- Test support for enabled beans' classes deployed as a standalone RAR
+[test originally from connector1.5 test in Connectors developer tests]
+section 12.1. Bean archives of JSR 299 spec:
+
+"Bean classes of enabled beans must be deployed in bean archives.
+• A library jar, EJB jar, application client jar or rar archive is a
+bean archive if it has a file named beans.xml in the META-INF
+directory."
+
+In this test, a standalone RAR has a TestCDIBean Bean class. This is injected into a MDB in another ejb-jar in the EAR.
+
+[Note: This test doesn't seem to work now -- need to investigate]
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/META-INF/application.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/META-INF/application.xml
new file mode 100644
index 0000000..fe9b32e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/META-INF/application.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE application PUBLIC '-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN' 'http://java.sun.com/dtd/application_1_3.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
+
+-->
+
+<application>
+  <display-name>GenericMessageDrivenBean</display-name>
+  <description>Application description</description>
+  <module>
+    <ejb>simplemdb-ejb.jar</ejb>
+  </module>
+  <module>
+    <java>simplemdb-client.jar</java>
+  </module>
+</application>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/build.xml
new file mode 100644
index 0000000..210abae
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/build.xml
@@ -0,0 +1,85 @@
+<!--
+
+    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 common SYSTEM "../../../../../config/common.xml">
+  <!ENTITY testcommon SYSTEM "../../../../../config/properties.xml">
+  <!ENTITY database SYSTEM "../../../config/database.xml">
+]>
+
+<project name="connector1.5 MDB" default="all" basedir=".">
+
+  <property name="j2ee.home" value="../../.."/>
+  <property name="earfile" value="simplemdb.ear"/>
+
+
+  <!-- include common.xml and testcommon.xml -->
+  &database;
+  &common;
+  &testcommon;
+
+  <target name="all" depends="init-common, clean-common">
+   <ant dir="src" inheritAll="false" target="all"/>
+   <antcall target="ear-common">
+	<param name="appname" value="simplemdb"/>
+	<param name="application.xml" value="META-INF/application.xml"/>
+   </antcall>
+  </target>
+
+  <target name="setupJdbc" depends="init-common">
+      <antcall target="create-jdbc-conpool-connector">
+        <param name="db.class" value="org.apache.derby.jdbc.ClientXADataSource"/>
+        <param name="jdbc.conpool.name" value="jdbc-pointbase-pool1"/>
+        <param name="jdbc.resource.type" value="javax.sql.XADataSource"/>
+      </antcall>
+
+      <antcall target="create-jdbc-resource-common">
+        <param name="jdbc.conpool.name" value="jdbc-pointbase-pool1"/>
+        <param name="jdbc.resource.name" value="jdbc/XAPointbase"/>
+      </antcall>
+
+      <antcall target="execute-sql-connector">
+        <param name="sql.file" value="createdb.sql"/>
+      </antcall>	
+  </target>
+
+  <target name="unsetJdbc" depends="init-common">
+      <antcall target="delete-jdbc-resource-common">
+        <param name="jdbc.resource.name" value="jdbc/XAPointbase"/>
+      </antcall>
+     <antcall target="delete-jdbc-connpool-common">
+        <param name="jdbc.conpool.name" value="jdbc-pointbase-pool1"/>
+      </antcall>
+  </target>
+
+  <target name="deploy-ear" depends="init-common">
+    <antcall target="deploy-common">
+      <param name="appname" value="simplemdb"/>
+    </antcall>
+  </target>
+
+  <target name="undeploy" depends="init-common">
+    <antcall target="undeploy-common">
+      <param name="appname" value="simplemdb"/>
+    </antcall>
+  </target>
+
+  <target name="clean">
+    <antcall target="clean-common"/>
+  </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/createdb.sql b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/createdb.sql
new file mode 100644
index 0000000..7d93610
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/createdb.sql
@@ -0,0 +1,2 @@
+drop table MESSAGES;
+create table MESSAGES (messageId CHAR(50), message varchar(80));
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/META-INF/application-client.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/META-INF/application-client.xml
new file mode 100644
index 0000000..75d2e9a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/META-INF/application-client.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE application-client PUBLIC '-//Sun Microsystems, Inc.//DTD J2EE Application Client 1.3//EN' 'http://java.sun.com/dtd/application-client_1_3.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
+
+-->
+
+<application-client>
+  <display-name>simplemdbClient</display-name>
+</application-client>
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/META-INF/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/META-INF/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/META-INF/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/META-INF/ejb-jar.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/META-INF/ejb-jar.xml
new file mode 100644
index 0000000..4bdcc6f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/META-INF/ejb-jar.xml
@@ -0,0 +1,122 @@
+<?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"
+         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"
+         version="2.1">
+  <display-name>Ejb1</display-name>
+  <enterprise-beans>
+    <message-driven>
+      <display-name>Generic_Message_Bean</display-name>
+      <ejb-name>GenericMessageBean</ejb-name>
+      <ejb-class>mdb.MyMessageBean</ejb-class>
+      <messaging-type>connector.MyMessageListener</messaging-type>
+      <transaction-type>Container</transaction-type>
+      <activation-config>
+        <activation-config-property>
+          <activation-config-property-name>
+            DestinationType
+          </activation-config-property-name>
+          <activation-config-property-value>
+            java.lang.String
+          </activation-config-property-value>
+        </activation-config-property>
+        <activation-config-property>
+          <activation-config-property-name>
+            TestProp
+          </activation-config-property-name>
+          <activation-config-property-value>
+            WrongValue
+          </activation-config-property-value>
+        </activation-config-property>
+        <!-- non-String activation spec property -->
+        <activation-config-property>
+          <activation-config-property-name>
+            TestIntegerProp
+          </activation-config-property-name>
+          <activation-config-property-value>
+            1
+          </activation-config-property-value>
+        </activation-config-property>
+
+      </activation-config>
+      <resource-ref>
+        <description>description</description>
+        <res-ref-name>MyDB</res-ref-name>
+        <res-type>javax.sql.DataSource</res-type>
+        <res-auth>Container</res-auth>
+        <res-sharing-scope>Shareable</res-sharing-scope>
+      </resource-ref>
+    </message-driven>
+    <session>
+      <display-name>MyMessageChecker</display-name>
+      <ejb-name>MyMessageChecker</ejb-name>
+      <home>beans.MessageCheckerHome</home>
+      <remote>beans.MessageChecker</remote>
+      <ejb-class>beans.MessageCheckerEJB</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>PBPUBLIC</env-entry-value>
+      </env-entry>
+      <env-entry>
+        <env-entry-name>password</env-entry-name>
+        <env-entry-type>java.lang.String</env-entry-type>
+        <env-entry-value>PBPUBLIC</env-entry-value>
+      </env-entry>
+      <resource-ref>
+        <res-ref-name>MyDB</res-ref-name>
+        <res-type>javax.sql.DataSource</res-type>
+        <res-auth>Container</res-auth>
+        <res-sharing-scope>Shareable</res-sharing-scope>
+      </resource-ref>
+      <resource-env-ref>
+	<resource-env-ref-name>eis/testAdmin</resource-env-ref-name>
+	<resource-env-ref-type>connector.MyAdminObject</resource-env-ref-type>
+      </resource-env-ref>
+      <security-identity>
+        <use-caller-identity/>
+      </security-identity>
+    </session>
+  </enterprise-beans>
+  <assembly-descriptor>
+    <container-transaction>
+      <method>
+        <ejb-name>GenericMessageBean</ejb-name>
+        <method-name>onMessage</method-name>
+        <method-params>
+          <method-param>java.lang.String</method-param>
+        </method-params>
+      </method>
+      <trans-attribute>Required</trans-attribute>
+    </container-transaction>
+    <container-transaction>
+      <method>
+        <ejb-name>MyMessageChecker</ejb-name>
+        <method-intf>Remote</method-intf>
+        <method-name>getMessageCount</method-name>
+      </method>
+      <trans-attribute>Required</trans-attribute>
+    </container-transaction>
+  </assembly-descriptor>
+</ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/META-INF/sun-application-client.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/META-INF/sun-application-client.xml
new file mode 100644
index 0000000..2b9166a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/META-INF/sun-application-client.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE sun-application-client PUBLIC "-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 7.0 Application Client 1.3//EN" "http://www.sun.com/software/sunone/appserver/dtds/sun-application-client_1_3-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>
+</sun-application-client>
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/META-INF/sun-ejb-jar.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/META-INF/sun-ejb-jar.xml
new file mode 100644
index 0000000..42cd604
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/META-INF/sun-ejb-jar.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 7.0 EJB 2.0//EN" "http://www.sun.com/software/sun
+<!--
+
+    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
+
+-->
+
+one/appserver/dtds/sun-ejb-jar_2_0-0.dtd">
+
+
+<sun-ejb-jar>
+  <enterprise-beans>
+    <module-name>ejb.jar</module-name>
+    <unique-id>1</unique-id>
+    <ejb>
+      <ejb-name>GenericMessageBean</ejb-name>
+      <mdb-resource-adapter>
+        <resource-adapter-mid>generic-ra</resource-adapter-mid>
+        <activation-config>
+         <!-- override prop value -->
+        <activation-config-property>
+          <activation-config-property-name>
+            TestIntegerProp
+          </activation-config-property-name>
+          <activation-config-property-value>
+            2 
+          </activation-config-property-value>
+        </activation-config-property>
+        </activation-config>
+      </mdb-resource-adapter>
+      <ior-security-config>
+        <transport-config>
+          <integrity>supported</integrity>
+          <confidentiality>supported</confidentiality>
+          <establish-trust-in-target>supported</establish-trust-in-target>
+          <establish-trust-in-client>supported</establish-trust-in-client>
+        </transport-config>
+        <as-context>
+          <auth-method>username_password</auth-method>
+          <realm>default</realm>
+          <required>true</required>
+        </as-context>
+        <sas-context>
+          <caller-propagation>supported</caller-propagation>
+        </sas-context>
+      </ior-security-config>
+      <resource-ref>
+        <res-ref-name>MyDB</res-ref-name>
+        <jndi-name>jdbc/XAPointbase</jndi-name>
+      </resource-ref>
+      <gen-classes />
+    </ejb>
+    <ejb>
+      <ejb-name>MyMessageChecker</ejb-name>
+      <jndi-name>MyMessageChecker</jndi-name>
+      <ior-security-config>
+        <transport-config>
+          <integrity>supported</integrity>
+          <confidentiality>supported</confidentiality>
+          <establish-trust-in-target>supported</establish-trust-in-target>
+          <establish-trust-in-client>supported</establish-trust-in-client>
+        </transport-config>
+        <as-context>
+          <auth-method>username_password</auth-method>
+          <realm>default</realm>
+          <required>false</required>
+        </as-context>
+        <sas-context>
+          <caller-propagation>supported</caller-propagation>
+        </sas-context>
+      </ior-security-config>
+      <resource-ref>
+        <res-ref-name>MyDB</res-ref-name>
+        <jndi-name>jdbc/XAPointbase</jndi-name>
+      </resource-ref>
+      <resource-env-ref>
+        <resource-env-ref-name>eis/testAdmin</resource-env-ref-name>
+	<jndi-name>eis/testAdmin</jndi-name>
+      </resource-env-ref>
+      <gen-classes/>
+    </ejb>
+  </enterprise-beans>
+</sun-ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/beans/MessageChecker.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/beans/MessageChecker.java
new file mode 100644
index 0000000..48573f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/beans/MessageChecker.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 beans;
+
+import javax.ejb.EJBObject;
+import java.rmi.RemoteException;
+import java.sql.SQLException;
+
+public interface MessageChecker extends EJBObject {
+    int getMessageCount() throws RemoteException;
+    boolean done() throws RemoteException;
+    int expectedResults() throws RemoteException;
+    void notifyAndWait() throws RemoteException;
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/beans/MessageCheckerEJB.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/beans/MessageCheckerEJB.java
new file mode 100644
index 0000000..bdc3f62
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/beans/MessageCheckerEJB.java
@@ -0,0 +1,188 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 beans;
+
+import connector.MyAdminObject;
+import javax.rmi.PortableRemoteObject;
+import javax.ejb.SessionBean;
+import javax.ejb.SessionContext;
+import javax.ejb.EJBException;
+import javax.ejb.CreateException;
+import java.util.Properties;
+import java.util.Vector;
+import java.sql.*;
+import java.rmi.RemoteException;
+
+import javax.transaction.UserTransaction;
+import javax.naming.*;
+import javax.sql.*;
+
+public class MessageCheckerEJB implements SessionBean {
+
+    private int WAIT_TIME = 15;
+    private String user = "j2ee";
+    private String password = "j2ee";
+    private Properties beanProps = null;
+    private SessionContext sessionContext = null;
+    private Connection heldCon = null;
+    private MyAdminObject Controls;
+
+    public MessageCheckerEJB() {}
+
+    public void ejbCreate() 
+        throws CreateException {
+        System.out.println("bean removed");
+        heldCon = null;
+        /*
+          if (holdConnection) {
+          try {
+          heldCon = getDBConnection();
+          } catch (Exception ex) {
+          ex.printStackTrace();
+          throw new CreateException("Error in ejbCreate");
+          }
+          }
+        */
+    }
+
+    public boolean done() {
+        return Controls.done();
+    }
+
+    public int expectedResults() {
+        return Controls.expectedResults();
+    }
+
+    public void notifyAndWait() {
+        try {
+            synchronized (Controls.getLockObject()) {
+                //Tell the resource adapter the client is ready to run
+                Controls.getLockObject().notifyAll(); 
+                
+                debug("NOTIFIED... START WAITING");
+                //Wait until being told to read from the database
+                Controls.getLockObject().wait(); 
+            }
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    public int getMessageCount() {
+	try {
+            Connection con = getFreshConnection();
+            int count1 = getCount(con);
+            con.close();
+            
+	    /*
+            synchronized(Controls.getLockObject()) {
+                Controls.getLockObject().notify();
+            }
+	    */
+                
+            return count1;
+        } catch (Exception e) {
+            e.printStackTrace(System.out);
+            throw new EJBException(e);
+	}
+    }
+
+    private int getCount(Connection con) throws SQLException {
+        Statement stmt = con.createStatement();
+        int count = 0;
+        String messages = "";
+        ResultSet result = stmt.executeQuery(
+                "SELECT messageId, message "+ "FROM messages");
+        while (result.next()) {
+            count++;
+            messages = messages + " - " + result.getString("messageId")+" "+
+                result.getString("message") + "\n";
+        }
+        messages = messages + "count = " + count;
+        System.out.println(messages);
+        stmt.close();
+        return count;
+    }
+
+    public void setSessionContext(SessionContext context) {
+        sessionContext = context;
+        try {
+            Context ic = new InitialContext();
+            user = (String) ic.lookup("java:comp/env/user");
+            password = (String) ic.lookup("java:comp/env/password");
+	    Controls = (MyAdminObject) ic.lookup("java:comp/env/eis/testAdmin");
+	    System.out.println("CALLING INITILIZE ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]");
+	    Controls.initialize();
+	    System.out.println("CALLED INITILIZE ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]");
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    public void ejbRemove() {
+        System.out.println("bean removed");
+    }
+
+    public void ejbActivate() {
+        System.out.println("bean activated");
+    }
+
+    public void ejbPassivate() {
+        System.out.println("bean passivated");
+    }
+
+    private Connection getFreshConnection() throws Exception {
+        Connection oldHeldCon = heldCon;
+        heldCon = null;
+        Connection result = getDBConnection();
+        heldCon = oldHeldCon;
+        return result;
+    }
+
+    private Connection getDBConnection() throws Exception {
+        if (heldCon != null) return heldCon;
+        Connection con = null;
+        try {
+            Context ic = new InitialContext();
+            DataSource ds = (DataSource) ic.lookup("java:comp/env/MyDB");
+            debug("Looked up Datasource\n");
+            debug("Get JDBC connection, auto sign on");
+            con = ds.getConnection();
+            
+            if (con != null) {
+                return con;
+            } else {
+                throw new Exception("Unable to get database connection ");
+            }
+        } catch (SQLException ex1) {
+            //ex1.printStackTrace();
+            throw ex1;
+        }
+    }
+    
+    private void closeConnection(Connection con) throws SQLException {
+        if (heldCon != null) {
+            return;
+        } else {
+            con.close();
+        }
+    }
+
+    private void debug(String msg) {
+        System.out.println("[MessageCheckerEJB]:: -> " + msg);
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/beans/MessageCheckerHome.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/beans/MessageCheckerHome.java
new file mode 100644
index 0000000..4bcc578
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/beans/MessageCheckerHome.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 beans;
+
+import java.rmi.RemoteException;
+import javax.ejb.EJBHome;
+import javax.ejb.CreateException;
+
+public interface MessageCheckerHome extends EJBHome {
+    MessageChecker create() throws RemoteException, CreateException;
+    boolean done() throws RemoteException, CreateException;
+    int expectedResults() throws RemoteException, CreateException;
+    void notifyAndWait() throws RemoteException, CreateException;
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/build.properties b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/build.properties
new file mode 100644
index 0000000..dad207b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/build.properties
@@ -0,0 +1,21 @@
+<!--
+
+    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
+
+-->
+ 
+
+ejb-jar.xml=META-INF/ejb-jar.xml
+sun-ejb-jar.xml=META-INF/sun-ejb-jar.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/build.xml
new file mode 100644
index 0000000..24e1832
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/build.xml
@@ -0,0 +1,68 @@
+<!--
+
+    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 common SYSTEM "../../../../../../config/common.xml">
+  <!ENTITY testcommon SYSTEM "../../../../../../config/properties.xml">
+]>
+
+<project name="connector1.5 MDB" default="all" basedir=".">
+
+  <property name="j2ee.home" value="../../../.."/>
+
+  <!-- include common.xml and testcommon.xml -->
+  &common;
+  &testcommon;
+
+  <target name="all" depends="init-common">
+   <antcall target="compile-common">
+        <param name="src" value="." />
+        <param name="s1astest.classpath" value="${s1astest.classpath}:../../ra/src/classes" />
+    </antcall>
+
+    <antcall target="ejb-jar-common">
+        <param name="ejb-jar.xml" value="META-INF/ejb-jar.xml" />
+        <param name="ejbjar.classes" value="mdb/*.class, beans/*.class, connector/*.class" />
+        <param name="beans.xml" value="META-INF/beans.xml" />
+        <param name="sun-ejb-jar.xml" value="META-INF/sun-ejb-jar.xml" />
+        <param name="appname" value="simplemdb" />
+    </antcall>
+
+    <antcall target="appclient-jar-common">
+        <param name="appname" value="simplemdb" />
+        <param name="application-client.xml" value="META-INF/application-client.xml" />
+        <param name="appclientjar.classes" value="mdb/*.class, beans/*.class, connector/*.class, client/Client.class" />
+        <param name="sun-application-client.xml" value="META-INF/sun-application-client.xml" />
+    </antcall>
+<!--
+    <jar jarfile="../ejb.jar" basedir="classes"
+         includes="mdb/*.class, beans/*.class, connector/*.class" >
+                <metainf dir="META-INF">
+                        <include name="ejb-jar.xml"/>
+                        <include name="sun-ejb-jar.xml"/>
+                </metainf>
+    </jar>
+-->
+  </target>
+
+  <target name="clean">
+    <antcall target="clean-classes-common">
+        <param name="build.classes.dir" value="classes" />
+    </antcall>
+  </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/client/Client.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/client/Client.java
new file mode 100644
index 0000000..f551ce1
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/client/Client.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 client;
+
+import beans.*;
+import connector.*;
+import java.io.*;
+import java.util.*;
+import javax.naming.*;
+import javax.rmi.PortableRemoteObject;
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+public class Client   {
+
+    private static SimpleReporterAdapter stat =
+            new SimpleReporterAdapter("appserv-tests");
+    
+    public Client (String[] args) {
+        //super(args);
+    }
+    
+    public static void main(String[] args) {
+        Client client = new Client(args);
+        client.doTest();
+    }
+    
+    public String doTest() {
+        stat.addDescription("This is to test connector 1.5 "+
+	             "contracts.");
+        
+        String res = "NOT RUN";
+	debug("doTest() ENTER...");
+        boolean pass = false;
+        try {
+            res  = "ALL TESTS PASSED";
+	    int testCount = 1;
+            while (!done()) {
+                
+                notifyAndWait();
+                if (!done()) {
+                    debug("Running...");
+                    pass = checkResults(expectedResults());
+                    debug("Got expected results = " + pass);
+                    
+                    //do not continue if one test failed
+                    if (!pass) {
+                        res = "SOME TESTS FAILED";
+                        stat.addStatus("ID Connector 1.5 test - " + testCount, stat.FAIL);
+                    } else {
+                        stat.addStatus("ID Connector 1.5 test - " + testCount, stat.PASS);
+		    }
+                } else {
+                    break;
+                }
+		testCount ++;
+            }
+
+        } catch (Exception ex) {
+            System.out.println("Importing transaction test failed.");
+            ex.printStackTrace();
+            res = "TEST FAILED";
+        }
+        stat.printSummary("connector1.5ID");
+
+        
+        debug("EXITING... STATUS = " + res);
+        return res;
+    }
+    
+    private boolean checkResults(int num) throws Exception {
+        Object o = (new InitialContext()).lookup("MyMessageChecker");
+        MessageCheckerHome  home = (MessageCheckerHome) 
+            PortableRemoteObject.narrow(o, MessageCheckerHome.class);
+        MessageChecker checker = home.create();
+        int result = checker.getMessageCount();
+        return result == num;
+    }
+
+    private boolean done() throws Exception {
+        Object o = (new InitialContext()).lookup("MyMessageChecker");
+        MessageCheckerHome  home = (MessageCheckerHome) 
+            PortableRemoteObject.narrow(o, MessageCheckerHome.class);
+        MessageChecker checker = home.create();
+        return checker.done();
+    }
+
+    private int expectedResults() throws Exception {
+        Object o = (new InitialContext()).lookup("MyMessageChecker");
+        MessageCheckerHome  home = (MessageCheckerHome) 
+            PortableRemoteObject.narrow(o, MessageCheckerHome.class);
+        MessageChecker checker = home.create();
+        return checker.expectedResults();
+    }
+
+    private void notifyAndWait() throws Exception {
+        Object o = (new InitialContext()).lookup("MyMessageChecker");
+        MessageCheckerHome  home = (MessageCheckerHome) 
+            PortableRemoteObject.narrow(o, MessageCheckerHome.class);
+        MessageChecker checker = home.create();
+        checker.notifyAndWait();
+    }
+
+
+    private void debug(String msg) {
+        System.out.println("[CLIENT]:: --> " + msg);
+    }
+}
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/client/MANIFEST.MF b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/client/MANIFEST.MF
new file mode 100644
index 0000000..179cd4d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/client/MANIFEST.MF
@@ -0,0 +1,4 @@
+Manifest-Version: 1.0
+Created-By: 1.4.0 (Sun Microsystems Inc.)
+Main-Class: client.Client
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/connector/MyMessageListener.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/connector/MyMessageListener.java
new file mode 100644
index 0000000..a3928d3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/connector/MyMessageListener.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+public interface MyMessageListener {
+  public void onMessage (String message);
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/mdb/MyMessageBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/mdb/MyMessageBean.java
new file mode 100644
index 0000000..3af505b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/app/src/mdb/MyMessageBean.java
@@ -0,0 +1,247 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 mdb;
+
+import java.sql.Statement;
+
+import javax.ejb.MessageDrivenBean;
+import javax.ejb.MessageDrivenContext;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.sql.DataSource;
+
+import connector.MyMessageListener;
+import javax.ejb.*;
+import javax.naming.*;
+import java.io.*;
+import java.rmi.RemoteException;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import java.sql.*;
+import javax.sql.*;
+import javax.jms.*;
+import javax.transaction.*;
+
+
+/**
+ */
+public class MyMessageBean implements MessageDrivenBean, 
+        MyMessageListener {
+
+    private transient MessageDrivenContext mdc = null;
+    private Context context;
+    
+    @javax.inject.Inject
+    private connector.TestCDIBean tb;
+
+    /**
+     * Constructor, which is public and takes no arguments.
+     */
+    public MyMessageBean() {}
+
+    /**
+     * setMessageDrivenContext method, declared as public (but 
+     * not final or static), with a return type of void, and 
+     * with one argument of type javax.ejb.MessageDrivenContext.
+     *
+     * @param mdc    the context to set
+     */
+    public void setMessageDrivenContext(MessageDrivenContext mdc) {
+	this.mdc = mdc;
+    }
+
+    /**
+     * ejbCreate method, declared as public (but not final or 
+     * static), with a return type of void, and with no 
+     * arguments.
+     */
+    public void ejbCreate() { }
+
+    /**
+     * onMessage method, declared as public (but not final or 
+     * static), with a return type of void, and with one argument
+     * of type javax.jms.Message.
+     *
+     * Casts the incoming Message to a TextMessage and displays 
+     * the text.
+     *
+     * @param inMessage    the incoming message
+     */
+    public void onMessage(String inMessage) {
+
+        debug("onMessage:: RECEIVED [" + inMessage + "]");
+        debug("TestCDIBean injected:" + tb);
+
+        if (tb == null)
+            throw new RuntimeException("Injection of enabled Bean "
+                    + "in RAR into a MDB injection point failed");
+
+        try {
+            if (inMessage.endsWith("WRITE")) {
+                doDbStuff("WRITE", 
+                        inMessage.substring(0, inMessage.lastIndexOf(":")));
+            } else if (inMessage.endsWith("DELETE")) {
+                doDbStuff("DELETE",
+                        inMessage.substring(0, inMessage.lastIndexOf(":")));
+            } else if (inMessage.endsWith("DELETE_ALL")) {
+                doDbStuff("DELETE_ALL", "::");
+            } else {
+                //unsupported op.
+            }
+        } catch (Exception ex) {
+            debug("UH OH...");
+            ex.printStackTrace();
+        }
+
+    }
+    
+    /**
+     * ejbRemove method, declared as public (but not final or 
+     * static), with a return type of void, and with no 
+     * arguments.
+     */
+    public void ejbRemove() {}
+
+
+    private void doDbStuff(String op, String message) throws Exception {
+
+        java.sql.Connection dbConnection = null;
+        String id    = message.substring(0, message.indexOf(":"));
+        String body  = message.substring(message.indexOf(":")+1); 
+        try {
+            Context ic = new InitialContext();
+            
+            if ("READ".equals(op)) {
+                
+                debug("Reading row from database...");
+                
+                // Creating a database connection
+                /*
+                  DataSource ds = (DataSource) ic.lookup("java:comp/env/MyDB");
+                  debug("Looked up Datasource\n");
+                  debug("Get JDBC connection, auto sign on");
+                  dbConnection = ds.getConnection();
+                  
+                  Statement stmt = dbConnection.createStatement();
+                  String query = 
+                  "SELECT id from messages where id = 'QQ'";
+                  ResultSet results = stmt.executeQuery(query);
+                  results.next();
+                  System.out.println("QQ has balance " + 
+                  results.getInt("balance") + " dollars");
+                  results.close();
+                  stmt.close();
+                  
+                  System.out.println("Read one account\n");
+                */
+
+            } else if ("WRITE".equals(op)) {
+
+                debug("Inserting one message in the database\n");
+            
+                // Creating a database connection
+                DataSource ds = (DataSource) ic.lookup("java:comp/env/MyDB");
+                //debug("Looked up Datasource\n");
+                //debug("Get JDBC connection, auto sign on");
+                dbConnection = ds.getConnection();
+                
+                createRow(id, body, dbConnection);
+                System.out.println("Created one message\n");
+                
+            } else if ("DELETE".equals(op)) {
+                
+                debug("Deleting one message from the database\n");
+                
+                // Creating a database connection
+                DataSource ds = (DataSource) ic.lookup("java:comp/env/MyDB");
+                //debug("Looked up Datasource\n");
+                //debug("Get JDBC connection, auto sign on");
+                dbConnection = ds.getConnection();
+                
+                deleteRow(id, dbConnection);
+                System.out.println("Deleted one message\n");
+            } else if ("DELETE_ALL".equals(op)) {
+                
+                debug("Deleting all messages from the database\n");
+                
+                // Creating a database connection
+                DataSource ds = (DataSource) ic.lookup("java:comp/env/MyDB");
+                //debug("Looked up Datasource\n");
+                //debug("Get JDBC connection, auto sign on");
+                dbConnection = ds.getConnection();
+                deleteAll(dbConnection);
+                System.out.println("Deleted all messages\n");
+            } else {
+                //unsupported op
+            }
+            
+        }finally{
+            try{
+                dbConnection.close();
+            }catch(Exception ex){
+                debug("Exception occured while closing database con nection.");
+            }
+        }
+    }
+    
+    private void createRow(String id, String body, 
+            java.sql.Connection dbConnection) 
+        throws Exception {
+
+        // Create row for this message
+        debug("CreateRow with ID = " + id + ", BODY = " + body);
+        Statement stmt = dbConnection.createStatement();
+        String query = "INSERT INTO messages (messageId, message)" +
+            "VALUES ('" + id + "', '" + body + "')";
+        int resultCount = stmt.executeUpdate(query);
+        if ( resultCount != 1 ) {
+            throw new Exception(
+                    "ERROR in INSERT !! resultCount = "+resultCount);
+        }
+        stmt.close();
+    }
+
+    private void deleteRow(String id, java.sql.Connection dbConnection) 
+        throws Exception {
+        
+        // Delete row for this message
+        debug("DeleteRow with ID = " + id);
+        Statement stmt = dbConnection.createStatement();
+        String query = "DELETE FROM messages WHERE messageId = '" + id + "'";
+        int resultCount = stmt.executeUpdate(query);
+        if ( resultCount != 1 ) {
+            throw new Exception(
+                    "ERROR in INSERT !! resultCount = "+resultCount);
+        }
+        stmt.close();
+    }
+
+    private void deleteAll(java.sql.Connection dbConnection) 
+        throws Exception {
+        
+        // Delete row for this message
+        Statement stmt = dbConnection.createStatement();
+        String query = "DELETE FROM messages";
+        int resultCount = stmt.executeUpdate(query);
+        debug("Delete all rows from messages... count = " + resultCount);
+        stmt.close();
+    }
+
+    private void debug(String msg) {
+        System.out.println("[MyMessageBean] --> " + msg);
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/build.xml
new file mode 100644
index 0000000..645f1c9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/build.xml
@@ -0,0 +1,98 @@
+<!--
+
+    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 common SYSTEM "../../../../config/common.xml">
+  <!ENTITY testcommon SYSTEM "../../../../config/properties.xml">
+]>
+
+<project name="connector1.5 TEST" default="all" basedir=".">
+<property name="j2ee.home" value="../.."/>
+<property name="client.class" value="client/Client"/>
+
+  <!-- include common.xml and testcommon.xml -->
+  &common;
+  &testcommon;
+
+  <target name="all" depends="init-common, build, setup, runtest, unset"/>
+  <target name="run-dp-test" depends="init-common, build, setup-dp, deploy-dp, runtest, unset-dp, undeploy-dp"/>
+  <target name="build" depends="init-common">
+   <ant dir="ra" inheritAll="false" target="all"/>
+   <ant dir="app" inheritAll="false" target="all"/>
+  </target>
+
+  <target name="setup">
+    <ant dir="app" inheritAll="false" target="setupJdbc"/>
+    <ant dir="." inheritAll="false" target="deploy"/>
+  </target>
+
+  <target name="setup-dp">
+    <ant dir="app" inheritAll="false" target="setupJdbc"/>
+  </target>
+
+  <target name="deploy">
+    <ant dir="ra" inheritAll="false" target="deploy"/>
+    <ant dir="ra" inheritAll="false" target="testAddAdmin"/>
+    <ant dir="app" inheritAll="false" target="deploy-ear"/>
+    <ant dir="." inheritAll="false" target="restart"/>
+  </target>
+
+  <target name="deploy-dp">
+    <ant dir="ra" inheritAll="false" target="testAddAdmin"/>
+    <ant dir="app" inheritAll="false" target="deploy-ear"/>
+    <ant dir="." inheritAll="false" target="restart"/>
+  </target>
+
+  <target name="runtest" depends="init-common">
+    <antcall target="runclient-common">
+	<param name="appname" value="simplemdb" />
+    </antcall>
+  </target>
+
+  <target name="unset">
+    <ant dir="app" inheritAll="false" target="unsetJdbc"/>
+    <ant dir="." inheritAll="false" target="undeploy"/>
+    <ant dir="." inheritAll="false" target="restart"/>
+  </target>
+
+  <target name="unset-dp">
+    <ant dir="app" inheritAll="false" target="unsetJdbc"/>
+    <ant dir="." inheritAll="false" target="restart"/>
+  </target>
+
+  <target name="undeploy">
+    <ant dir="app" inheritAll="false" target="undeploy"/>
+    <ant dir="ra" inheritAll="false" target="testDelAdmin"/>
+    <ant dir="ra" inheritAll="false" target="undeploy"/>
+  </target>
+
+  <target name="undeploy-dp">
+    <ant dir="app" inheritAll="false" target="undeploy"/>
+    <ant dir="ra" inheritAll="false" target="testDelAdmin"/>
+  </target>
+
+  <target name="restart" depends="init-common">
+    <echo message="Not required to restart"/>
+  </target>
+
+  <target name="clean">
+    <ant dir="ra" inheritAll="false" target="clean"/>
+    <ant dir="app" inheritAll="false" target="clean"/>
+  </target>
+
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/createdb.sql b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/createdb.sql
new file mode 100644
index 0000000..19f3324
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/createdb.sql
@@ -0,0 +1,2 @@
+drop table messages;
+create table messages (messageId CHAR(50), message varchar(80));
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/META-INF/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/META-INF/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/META-INF/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/META-INF/ra.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/META-INF/ra.xml
new file mode 100644
index 0000000..2ca2ebc
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/META-INF/ra.xml
@@ -0,0 +1,76 @@
+<?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
+
+-->
+
+<!--
+<!DOCTYPE connector PUBLIC '-//Sun Microsystems, Inc.//DTD Connector 1.5//EN' 'http://java.sun.com/dtd/connector_1_5.dtd'>
+-->
+<connector 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/connector_1_5.xsd"
+           version="1.5">
+    <display-name>Simple Resource Adapter</display-name>
+    <vendor-name>Java Software</vendor-name>
+    <eis-type>Generic Type</eis-type>
+    <resourceadapter-version>1.0Alpha</resourceadapter-version>
+    <resourceadapter>
+        <resourceadapter-class>
+            connector.SimpleResourceAdapterImpl
+        </resourceadapter-class>
+        <config-property>
+            <config-property-name>
+                TestName
+            </config-property-name>
+            <config-property-type>
+                java.lang.String
+            </config-property-type>
+            <config-property-value>
+                ConfigPropertyForRA
+            </config-property-value>
+        </config-property>
+        <inbound-resourceadapter>
+            <messageadapter>          
+                <messagelistener>
+                    <messagelistener-type>
+                        connector.MyMessageListener
+                    </messagelistener-type>
+                    <activationspec>
+                        <activationspec-class>
+                            connector.SimpleActivationSpec
+                        </activationspec-class>
+                    </activationspec>
+                </messagelistener>
+            </messageadapter>          
+        </inbound-resourceadapter>
+        <adminobject>
+          <adminobject-interface>connector.MyAdminObject</adminobject-interface>
+          <adminobject-class>connector.MyAdminObject</adminobject-class>
+          <config-property>
+            <config-property-name>ResetControl</config-property-name>
+            <config-property-type>java.lang.String</config-property-type>
+            <config-property-value>NORESET</config-property-value>
+          </config-property>
+          <config-property>
+            <config-property-name>ExpectedResult</config-property-name>
+            <config-property-type>java.lang.Integer</config-property-type>
+            <config-property-value>88</config-property-value>
+          </config-property>
+        </adminobject>
+    </resourceadapter>
+</connector>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/build.xml
new file mode 100644
index 0000000..5267dc3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/build.xml
@@ -0,0 +1,81 @@
+<!--
+
+    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 common SYSTEM "../../../../../config/common.xml">
+  <!ENTITY props SYSTEM "../../../../../config/properties.xml">
+]>
+
+<project name="connector1.5 RA" default="all" basedir=".">
+
+  <property name="j2ee.home" value="../../.."/>
+  <property name="earfile" value="generic-ra.rar"/>
+
+  <!-- include common.xml and testcommon.xml -->
+  &common;
+  &props;
+
+  <target name="all">
+    <ant dir="src" inheritAll="false" target="all"/>
+
+    <jar jarfile="generic-ra.rar" basedir="."
+         includes="generic-ra.jar, META-INF/ra.xml, META-INF/beans.xml" />
+  </target>
+
+  <target name="deploy" depends="init-common">
+    <antcall target="deploy-rar-common">
+      <param name="rarfile" value="generic-ra.rar"/>
+    </antcall>
+  </target>
+
+  <target name="undeploy" depends="init-common">
+    <antcall target="undeploy-rar-common">
+      <param name="undeployrar" value="generic-ra"/>
+    </antcall>
+  </target>
+
+  <target name="testAddAdmin" depends="init-common">
+    <antcall target="asadmin-common">
+      <param name="admin.command" value="create-admin-object --target ${appserver.instance.name} --restype connector.MyAdminObject --raname generic-ra --property ResetControl=BEGINNING"/>
+      <param name="operand.props" value="eis/testAdmin"/>
+    </antcall>
+  </target>
+
+  <target name="testDelAdmin" depends="init-common">
+    <antcall target="asadmin-common">
+      <param name="admin.command" value="delete-admin-object"/>
+      <param name="operand.props" value="--target ${appserver.instance.name} eis/testAdmin"/>
+    </antcall>
+  </target>
+
+  <target name="sendMessage" depends="init-common">
+    <echo message="Class path is ${s1astest.classpath}"/>
+    <java fork="true" classname="connector.Messages" failonerror="true">
+      <arg line="add Foo TestMessage"/>
+      <classpath>
+        <pathelement location="${s1astest.classpath}"/>
+        <pathelement location="generic-ra.jar"/>
+      </classpath>
+    </java>
+  </target>
+
+  <target name="clean">
+    <ant dir="src" inheritAll="false" target="clean"/>
+  </target>
+
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/build.xml b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/build.xml
new file mode 100644
index 0000000..fad2edb
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/build.xml
@@ -0,0 +1,49 @@
+<!--
+
+    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 common SYSTEM "../../../../../../config/common.xml">
+  <!ENTITY props SYSTEM "../../../../../../config/properties.xml">
+]>
+
+<project name="connector1.5 RA SRC" default="all" basedir=".">
+
+
+  <!-- include common.xml and testcommon.xml -->
+  &common;
+  &props;
+
+  <target name="all" depends="init-common" >
+    <antcall target="compile-common">
+	    <param name="build.classes.dir" value="classes" />
+    	<param name="src" value="connector" />
+    </antcall>
+    <jar jarfile="../generic-ra.jar" basedir="classes"
+         includes="connector/*.class" />
+  </target>
+
+
+  <target name="clean">
+    <antcall target="clean-classes-common">
+        <param name="build.classes.dir" value="classes" />
+    </antcall>
+    <delete file="../generic-ra.jar"/>
+    <delete file="../generic-ra.rar"/>
+  </target>
+
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/Controls.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/Controls.java
new file mode 100644
index 0000000..42188a6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/Controls.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+/**
+ *
+ * @author	Qingqing Ouyang
+ */
+public class Controls {
+    public static Object readyLock = new Object();
+    public static int expectedResults;
+    public static boolean done = false;
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/DeliveryWork.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/DeliveryWork.java
new file mode 100644
index 0000000..43377e8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/DeliveryWork.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+import java.lang.reflect.Method;
+import java.util.Iterator;
+import javax.resource.spi.endpoint.MessageEndpoint;
+import javax.resource.spi.endpoint.MessageEndpointFactory;
+import javax.resource.spi.UnavailableException;
+import javax.resource.spi.work.Work;
+import javax.resource.spi.work.WorkManager;
+import javax.resource.spi.work.ExecutionContext;
+
+/**
+ *
+ * @author	Qingqing Ouyang
+ */
+public class DeliveryWork implements Work {
+
+    private MessageEndpoint ep;
+    private int num;
+    private String op;
+    private boolean keepCount;
+    private static int counter = 0;
+    
+    public DeliveryWork(MessageEndpoint ep, int numOfMessages, String op) {
+        this.ep = ep;
+        this.num = numOfMessages;
+        this.op = op;
+        this.keepCount = false;
+    }
+
+    public DeliveryWork(MessageEndpoint ep, int numOfMessages, 
+            String op, boolean keepCount) {
+        this.ep = ep;
+        this.num = numOfMessages;
+        this.op = op;
+        this.keepCount = keepCount;
+    }
+
+    public void run() {
+
+        debug("ENTER...");
+        
+        try {
+            //Method onMessage = getOnMessageMethod();
+            //ep.beforeDelivery(onMessage);
+
+            if (!keepCount) {
+                for (int i = 0; i < num; i++) {
+                    String msgId   = String.valueOf(i);
+                    String msgBody = "This is message " + msgId;
+                    String msg     = msgId + ":" + msgBody + ":" + op;
+                    ((MyMessageListener) ep).onMessage(msg);
+                }
+            } else {
+                for (int i = 0; i < num; i++) {
+                    String msgId   = String.valueOf(i+counter);
+                    String msgBody = "This is message " + msgId;
+                    String msg     = msgId + ":" + msgBody + ":" + op;
+                    ((MyMessageListener) ep).onMessage(msg);
+                }
+                counter = counter + num;
+            }
+
+            //ep.afterDelivery();
+            
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        
+        debug("LEAVE...");
+    }
+
+    public void release() {}
+
+    public String toString() {
+       return op;
+    }
+
+    private Method getOnMessageMethod() {
+        
+        Method onMessageMethod = null;
+        try {
+            Class msgListenerClass = connector.MyMessageListener.class;
+            Class[] paramTypes = { java.lang.String.class };
+            onMessageMethod = 
+                msgListenerClass.getMethod("onMessage", paramTypes);
+            
+        } catch (NoSuchMethodException ex) {
+            ex.printStackTrace();
+        }
+        return onMessageMethod;
+    }
+
+    private void debug(String mesg) {
+        System.out.println("DeliveryWork[" + op + "] --> " + mesg);
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/FakeXAResource.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/FakeXAResource.java
new file mode 100644
index 0000000..97ed09e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/FakeXAResource.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+import javax.transaction.xa.*;
+
+/**
+ * This is class is used for debugging. It prints out
+ * trace information on TM calls to XAResource before
+ * directing the call to the actual XAResource object
+ */
+public class FakeXAResource implements XAResource {
+
+    public FakeXAResource() {}
+
+    public void commit(Xid xid, boolean onePhase) throws XAException {
+        print("FakeXAResource.commit: " + xidToString(xid) + "," + onePhase);
+    }
+
+    public void end(Xid xid, int flags) throws XAException {
+        print("FakeXAResource.end: " + xidToString(xid) + "," +
+              flagToString(flags));
+    }
+
+    
+    public void forget(Xid xid) throws XAException {
+        print("FakeXAResource.forget: " + xidToString(xid));
+    }
+
+    public int getTransactionTimeout() throws XAException {
+        return 60*1000;
+    }
+
+    public boolean isSameRM(XAResource xares) throws XAException {
+        return false;
+    }
+
+    public int prepare(Xid xid) throws XAException {
+        print("FakeXAResource.prepare: " + xidToString(xid));
+        return XAResource.XA_OK;
+    }
+    
+    public Xid[] recover(int flag) throws XAException {
+        print("FakeXAResource.recover: " + flagToString(flag));
+        return null;
+    }
+
+    public void rollback(Xid xid) throws XAException {
+        print("FakeXAResource.rollback: " + xidToString(xid));
+    }
+
+    public boolean setTransactionTimeout(int seconds) throws XAException {
+        return false;
+    }
+    
+    public void start(Xid xid, int flags) throws XAException {
+        print("FakeXAResource.start: " + xidToString(xid) + "," +
+                flagToString(flags));
+        throw new XAException();
+    }
+
+    private void print(String s) {
+        System.out.println(s);
+    }
+
+    static public String xidToString(Xid xid) {
+        return String.valueOf((new String(xid.getGlobalTransactionId()) +
+                               new String(xid.getBranchQualifier())).hashCode());
+    }
+
+    static public String flagToString(int flag) {
+        switch (flag) {
+        case TMFAIL:
+            return "TMFAIL";
+        case TMJOIN:
+            return "TMJOIN";
+        case TMNOFLAGS:
+            return "TMNOFLAGS";
+        case TMONEPHASE:
+            return "TMONEPHASE";
+        case TMRESUME:
+            return "TMRESUME";
+        case TMSTARTRSCAN:
+            return "TMSTARTRSCAN";
+        case TMENDRSCAN:
+            return "TMENDRSCAN";
+        case TMSUCCESS:
+            return "TMSUCCESS";
+        case TMSUSPEND:
+            return "TMSUSPEND";
+        case XA_RDONLY:
+            return "XA_RDONLY";
+        default:
+            return "" + Integer.toHexString(flag);
+        }
+    }
+
+    public boolean equals(Object obj) {
+        return false;
+    }
+
+    public int hashCode() {
+        return 1;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/Messages.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/Messages.java
new file mode 100644
index 0000000..84e1c71
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/Messages.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+import java.util.*;
+
+/**
+ * collection of messages.
+ *
+ * @author	Qingqing Ouyang
+ */
+public class Messages {
+
+    private static Hashtable messages = new Hashtable();
+
+    public static void sendMessage (String destName, String message) {
+        if (messages.get(destName) != null) {
+            ((ArrayList) messages.get(destName)).add(message);
+        } else {
+            ArrayList list = new ArrayList();
+            list.add(message);
+            messages.put(destName, list);
+        }
+        System.out.println("sendMessage. message at foo is " + Messages.hasMessages("Foo"));
+    }
+
+    public static boolean hasMessages (String destName) {
+        return messages.get(destName) != null;
+    }
+
+    public static ArrayList getMessages (String destName) {
+        return (ArrayList) messages.get(destName);
+    }
+
+    public static void main (String[] args) {
+       if (args.length != 3) {
+           System.exit(1);
+       }
+
+       String command  = args[0];
+       String destName = args[1];
+       String message  = args[2];
+   
+       if (!"add".equals(command)) {
+           System.exit(1);
+       }
+
+       sendMessage(destName, message);
+       System.out.println("Message : " + message + " sent to " + destName);
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/MyAdminObject.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/MyAdminObject.java
new file mode 100644
index 0000000..f33a711
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/MyAdminObject.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+public class MyAdminObject implements java.io.Serializable {
+
+    private String resetControl="NORESET";
+    private Integer expectedResults;
+
+    public void setResetControl (String value) {
+        resetControl = value;
+    }
+
+    public String getResetControl () {
+        return resetControl;
+    }
+
+    public void setExpectedResults (Integer value) {
+        expectedResults = value;
+    }
+
+    public Integer getExpectedResults () {
+        return expectedResults;
+    }
+
+    public void initialize() {
+	System.out.println("[MyAdminObject] Initializing the Controls to false:"+resetControl);
+        if (resetControl.equals("BEGINNING")) {
+           Controls.done=false;
+	   System.out.println("[MyAdminObject] Initialized the Controls to false");
+	}
+    }
+
+    public boolean done() {
+         return Controls.done;
+    }
+
+    public int expectedResults(){
+        return Controls.expectedResults;
+    }
+
+    public Object getLockObject(){
+        return Controls.readyLock;
+    }
+
+}
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/MyMessageListener.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/MyMessageListener.java
new file mode 100644
index 0000000..a3928d3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/MyMessageListener.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+public interface MyMessageListener {
+  public void onMessage (String message);
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/MyWork.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/MyWork.java
new file mode 100644
index 0000000..0513628
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/MyWork.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+import java.lang.reflect.Method;
+import java.util.Iterator;
+import javax.resource.spi.endpoint.MessageEndpoint;
+import javax.resource.spi.endpoint.MessageEndpointFactory;
+import javax.resource.spi.UnavailableException;
+import javax.resource.spi.work.Work;
+import javax.resource.spi.work.WorkManager;
+import javax.resource.spi.work.ExecutionContext;
+
+/**
+ *
+ * @author	Qingqing Ouyang
+ */
+public class MyWork implements Work {
+
+    private String name;
+    private boolean stop = false;
+    private MessageEndpointFactory factory;
+    private WorkManager wm;
+    
+    public MyWork(
+            String name, MessageEndpointFactory factory, WorkManager wm) {
+        this.factory = factory;
+        this.name = name;
+        this.wm = wm;
+    }
+
+    public void run() {
+
+        debug("ENTER...");
+
+        //try 3 times to create endpoint (in case of failure)
+        for (int i = 0; i < 3; i++) {
+
+            try {
+
+                Method onMessage = getOnMessageMethod();
+                System.out.println("isDeliveryTransacted = " + 
+                                      factory.isDeliveryTransacted(onMessage));
+
+                /*
+                  MessageEndpoint ep = factory.createEndpoint(null);
+                  ep.beforeDelivery(onMessage);
+                  ((MyMessageListener) ep).onMessage(name + ": TEST MSG ONE");
+                  ((MyMessageListener) ep).onMessage(name + ": TEST MSG TWO");
+                  ((MyMessageListener) ep).onMessage(name + ": TEST MSG THREE");
+                  ep.afterDelivery();
+                  break;
+                */
+
+            } catch (Exception ex) {
+                ex.printStackTrace();
+            }
+        }
+        
+        debug("LEAVE...");
+    }
+
+    public void release() {}
+
+    public void stop() {
+        this.stop = true;
+    }
+
+    public String toString() {
+       return name;
+    }
+
+    public Method getOnMessageMethod() {
+        
+        Method onMessageMethod = null;
+        try {
+            Class msgListenerClass = connector.MyMessageListener.class;
+            Class[] paramTypes = { java.lang.String.class };
+            onMessageMethod = 
+                msgListenerClass.getMethod("onMessage", paramTypes);
+            
+        } catch (NoSuchMethodException ex) {
+            ex.printStackTrace();
+        }
+        return onMessageMethod;
+    }
+
+    private void debug(String mesg) {
+        System.out.println("MyWork[" + name + "] --> " + mesg);
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/SimpleActivationSpec.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/SimpleActivationSpec.java
new file mode 100644
index 0000000..fc14e69
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/SimpleActivationSpec.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+import javax.resource.spi.ActivationSpec;
+import javax.resource.spi.ResourceAdapter;
+
+/**
+ * This class is supposed to implemented as a JavaBean
+ * so that the app server can instantiate and configure
+ * it at the runtime.
+ *
+ * @author	Qingqing Ouyang
+ */
+public class SimpleActivationSpec 
+    implements ActivationSpec, java.io.Serializable {
+
+    private String destinationName;
+    private String destinationType;
+    private String testProp;
+    private Integer testIntegerProp;
+    private ResourceAdapter resourceadapter;
+
+    /**
+     * Default constructor.
+     */
+    public SimpleActivationSpec () {}
+
+    public String getDestinationName () {
+        return this.destinationName;
+    }
+    
+    public void setDestinationName (String name) {
+        debug("setDestinationName() called... name = " + name);
+        this.destinationName = name;
+    }
+
+    public String getDestinationType() {
+        return this.destinationType;
+    }
+    
+    public void setDestinationType (String type) {
+        debug("setDestinationType () called... type = " + type);
+        this.destinationType= type;
+    }
+
+    public String getTestProp() {
+        return this.testProp;
+    }
+    
+    public void setTestProp (String testProp) {
+        debug("setTestProp () called... testProp = " + testProp);
+        this.testProp = testProp;
+    }
+
+    public Integer getTestIntegerProp() {
+        return this.testIntegerProp;
+    }
+                                                                                                                                              
+    public void setTestIntegerProp (Integer testProp1) {
+        debug("setTestIntegerProp () called... testIntegerProp = " + testProp1);
+        this.testIntegerProp = testProp1;
+    }
+
+    public ResourceAdapter getResourceAdapter () {
+        debug("getResourceAdapter() called... ");
+        return this.resourceadapter;
+    }
+
+    public void setResourceAdapter (ResourceAdapter ra) {
+        debug("setResourceAdapter() called... ra = " + ra);
+        this.resourceadapter = ra;
+    }
+
+    public void validate() {
+      if (this.testIntegerProp.intValue() == 2 && this.testProp.equals("WrongValue")) {
+        //valid
+      } else {
+        throw new RuntimeException("Invalid Configuration testIntegerProp: " + this.testIntegerProp.intValue() + " testProp " + this.testProp);
+
+      }
+
+   } 
+
+    private void debug (String message)
+    {
+        System.out.println("[SimpleActivationSpec] ==> " + message);
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/SimpleResourceAdapterImpl.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/SimpleResourceAdapterImpl.java
new file mode 100644
index 0000000..4d4d6c4
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/SimpleResourceAdapterImpl.java
@@ -0,0 +1,235 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+import java.util.*;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Properties;
+import javax.resource.NotSupportedException;
+import javax.resource.ResourceException;
+import javax.resource.spi.ActivationSpec;
+import javax.resource.spi.ActivationSpec;
+import javax.resource.spi.BootstrapContext;
+import javax.resource.spi.ResourceAdapter;
+import javax.resource.spi.XATerminator;
+import javax.resource.spi.endpoint.MessageEndpoint;
+import javax.resource.spi.endpoint.MessageEndpointFactory;
+import javax.resource.spi.UnavailableException;
+import javax.resource.spi.ResourceAdapterInternalException;
+import javax.resource.spi.work.ExecutionContext;
+import javax.resource.spi.work.Work;
+import javax.resource.spi.work.WorkManager;
+import javax.transaction.xa.XAResource;
+import javax.transaction.xa.Xid;
+
+/**
+ * This is a sample resource adapter
+ *
+ * @author	Qingqing Ouyang
+ */
+public class SimpleResourceAdapterImpl 
+implements ResourceAdapter, java.io.Serializable {
+
+    private BootstrapContext ctx;
+    private WorkManager wm;
+    private String testName;
+
+    private boolean debug = true;
+    private Work work;
+
+    public SimpleResourceAdapterImpl () {
+        debug ("constructor...");
+    }
+
+    public void
+    start(BootstrapContext ctx) throws ResourceAdapterInternalException{
+        
+        debug("001. Simple RA start...");
+
+        this.ctx = ctx;
+        debug("002. Simple RA start...");
+        this.wm  = ctx.getWorkManager();
+        debug("003. Simple RA start...");
+
+        //testing creat timer
+        Timer timer = null;
+	  try{
+	      timer = ctx.createTimer();
+	  } catch(UnavailableException ue) {
+	      System.out.println("Error");
+	      throw new ResourceAdapterInternalException("Error form bootstrap");
+	  }
+        debug("004. Simple RA start...");
+
+          try {
+          
+          XATerminator xa = ctx.getXATerminator();
+          
+          Xid xid1 = new XID();
+          System.out.println(" XID1 = " + xid1);
+          
+          ExecutionContext ec = new ExecutionContext();
+          ec.setXid(xid1);
+          ec.setTransactionTimeout(5*1000); //5 seconds
+          TestWMWork outw = new TestWMWork(1000, false, true, ec);
+          outw.setWorkManager(wm);
+          try {
+          wm.doWork(outw, 1*1000, ec, null);
+          xa.commit(xid1, true);
+          } catch (Exception ex) {
+          
+          System.out.println(" ex = " + ex.getMessage());
+          xa.rollback(xid1);
+          }
+          
+          Xid xid2 = new XID();
+          System.out.println(" XID2 = " + xid2);
+          
+          ec = new ExecutionContext();
+          ec.setXid(xid2);
+          ec.setTransactionTimeout(5*1000); //5 seconds
+          TestWMWork anotherw = new TestWMWork(3000, false);
+          anotherw.setWorkManager(wm);
+          try {
+          wm.doWork(anotherw, 1*1000, ec, null);
+          xa.commit(xid2, true);
+          } catch (Exception ex) {
+          xa.rollback(xid2);
+          }
+
+          } catch (Exception ex) {
+          ex.printStackTrace();
+          }
+
+        
+          for (int i = 0 ; i < 3; i++) {
+          TestWMWork w = new TestWMWork(i, false);
+          try {
+          wm.doWork(w, 1, null, null);
+          } catch (Exception ex) {
+          System.out.println("FAIL: CAUGHT exception : i = " + i);
+          ex.printStackTrace();
+          } 
+          }
+
+          for (int i = 3 ; i < 6; i++) {
+          TestWMWork w = new TestWMWork(i, true);
+          boolean pass = false;
+          try {
+          wm.doWork(w, 1, null, null);
+          } catch (Exception ex) {
+          pass = true;
+          System.out.println("PASS: CAUGHT EXPECTED exception : i = " + i);
+          ex.printStackTrace();
+          } finally {
+          if (!pass) {
+          System.out.println("FAIL: DID NOT GET EXPECTED exception :");
+          }
+          }
+          }
+
+          for (int i = 6 ; i < 9; i++) {
+          TestWMWork w = new TestWMWork(i, false);
+          try {
+          wm.doWork(w, 1, null, null);
+          } catch (Exception ex) {
+          System.out.println("FAIL: CAUGHT exception : i = " + i);
+          ex.printStackTrace();
+          }
+          }
+
+          for (int i = 9 ; i < 12; i++) {
+          TestWMWork w = new TestWMWork(i, false);
+          try {
+          wm.startWork(w);
+          } catch (Exception ex) {
+          System.out.println("FAIL: CAUGHT exception : i = " + i);
+          ex.printStackTrace();
+          }
+          }
+
+          for (int i = 12 ; i < 15; i++) {
+          TestWMWork w = new TestWMWork(i, false);
+          try {
+          wm.scheduleWork(w);
+          } catch (Exception ex) {
+          System.out.println("FAIL: CAUGHT exception : i = " + i);
+          ex.printStackTrace();
+          }
+          }
+        
+        debug("005. Simple RA start...");
+    }
+
+    public void
+    stop() {
+        debug("999. Simple RA stop...");
+        if (work != null) {
+            ((WorkDispatcher) work).stop();
+
+            synchronized (Controls.readyLock) {
+                Controls.readyLock.notify();
+            }
+
+        }
+    }
+
+    public void
+    endpointActivation ( MessageEndpointFactory factory, ActivationSpec spec)
+        throws NotSupportedException {
+        try {
+            debug("B.000. Create and schedule Dispatcher");
+            spec.validate();
+            work = new WorkDispatcher("DISPATCHER", ctx, factory, spec);
+            wm.scheduleWork(work, 4*1000, null, null);
+            debug("B.001. Scheduled Dispatcher");
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new RuntimeException(ex);
+        }
+    }
+
+    public void
+    endpointDeactivation (
+            MessageEndpointFactory endpointFactory, 
+            ActivationSpec spec) {
+        debug ("endpointDeactivation called...");
+        
+        ((WorkDispatcher) work).stop();
+    }
+  
+    public String getTestName() {
+        return testName;
+    }
+
+    public void setTestName(String name) {
+        debug("setTestName called... name = " + name);
+        testName = name;
+    }
+
+    public void
+    debug (String message) {
+        if (debug)
+            System.out.println("[SimpleResourceAdapterImpl] ==> " + message);
+    }
+
+    public XAResource[] getXAResources(ActivationSpec[] specs) 
+        throws ResourceException {
+        throw new UnsupportedOperationException();
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/TestCDIBean.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/TestCDIBean.java
new file mode 100644
index 0000000..c4ec82d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/TestCDIBean.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+//A test CDI bean that is bundled along with an embedded RAR
+public class TestCDIBean {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/TestWMWork.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/TestWMWork.java
new file mode 100644
index 0000000..f132758
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/TestWMWork.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+import java.lang.reflect.Method;
+import java.util.Iterator;
+import javax.resource.spi.endpoint.MessageEndpoint;
+import javax.resource.spi.endpoint.MessageEndpointFactory;
+import javax.resource.spi.UnavailableException;
+import javax.resource.spi.work.ExecutionContext;
+import javax.resource.spi.work.Work;
+import javax.resource.spi.work.WorkManager;
+import javax.resource.spi.work.WorkException;
+
+/**
+ *
+ * @author	Qingqing Ouyang
+ */
+public class TestWMWork implements Work {
+
+    private boolean stop = false;
+    private int id;
+    private boolean isRogue;
+    private boolean doNest;
+    private WorkManager wm;
+    private ExecutionContext ctx;
+
+    public TestWMWork(int id, boolean isRogue) {
+        this(id, isRogue, false, null);
+    }
+    
+    public TestWMWork(int id, boolean isRogue, 
+            boolean doNest, ExecutionContext ctx) {
+        this.id = id;
+        this.isRogue = isRogue;
+        this.doNest = doNest;
+        this.ctx = ctx;
+    }
+
+    public void setWorkManager (WorkManager wm) {
+        this.wm = wm;
+    }
+
+    public void run() {
+
+        System.out.println("TestWMWork[" + id + "].start running");
+        if (!isRogue) {
+            try {
+                Thread.currentThread().sleep(1000);
+            } catch (Exception ex) {
+                System.out.println("TestWMWork[" + id + "].interrupted = ");
+                ex.printStackTrace();
+            }
+        } else {
+           System.out.println("TestWMWork: Simulating rogue RA's Work: Expected Arithmetic Exception - divide by Zero");
+           int j = 100/0;
+        }
+
+        if (doNest && (wm != null)) {
+            Work nestedWork = new TestWMWork(8888, false);
+            try {
+                wm.doWork(nestedWork, 1*1000, ctx, null);
+            } catch (WorkException ex) {
+                if (ex.getErrorCode().equals(
+                            WorkException.TX_CONCURRENT_WORK_DISALLOWED)) {
+                    System.out.println("TestWMWork[" + id + "] " + 
+                            "PASS: CAUGHT EXPECTED = " + ex.getErrorCode());
+                } else {
+                    System.out.println("TestWMWork[" + id + "] " + 
+                            "FAIL: CAUGHT UNEXPECTED = " + ex.getErrorCode());
+                }
+            }
+
+            nestedWork = new TestWMWork(9999, false);
+            try {
+                ExecutionContext ec = new ExecutionContext();
+                ec.setXid(new XID());
+                ec.setTransactionTimeout(5*1000); //5 seconds
+                wm.doWork(nestedWork, 1*1000, ec, null);
+            } catch (Exception ex) {
+                System.out.println("TestWMWork[" + id + "] " + 
+                        "FAIL: CAUGHT UNEXPECTED = " + ex.getMessage());
+            }
+        }
+
+        System.out.println("TestWMWork[" + id + "].stop running");
+    }
+
+    public void release() {}
+
+    public void stop() {
+        this.stop = true;
+    }
+
+    public String toString() {
+       return String.valueOf(id);
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/WorkDispatcher.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/WorkDispatcher.java
new file mode 100644
index 0000000..5aa436c
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/WorkDispatcher.java
@@ -0,0 +1,323 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+import java.lang.reflect.Method;
+import java.util.Iterator;
+import javax.resource.spi.ActivationSpec;
+import javax.resource.spi.BootstrapContext;
+import javax.resource.spi.XATerminator;
+import javax.resource.spi.endpoint.MessageEndpoint;
+import javax.resource.spi.endpoint.MessageEndpointFactory;
+import javax.resource.spi.UnavailableException;
+import javax.resource.spi.work.Work;
+import javax.resource.spi.work.WorkManager;
+import javax.resource.spi.work.ExecutionContext;
+import javax.transaction.xa.Xid;
+import javax.transaction.xa.XAException;
+import javax.transaction.xa.XAResource;
+
+/**
+ *
+ * @author	Qingqing Ouyang
+ */
+public class WorkDispatcher implements Work {
+
+    private boolean stop = false;
+    private String id;
+    private MessageEndpointFactory factory;
+    private BootstrapContext ctx;
+    private ActivationSpec spec;
+    private WorkManager wm;
+    private XATerminator xa;
+    
+    public WorkDispatcher(
+            String id,
+            BootstrapContext ctx,
+            MessageEndpointFactory factory, 
+            ActivationSpec spec) {
+        this.id      = id;
+        this.ctx     = ctx;
+        this.factory = factory;
+        this.spec    = spec;
+        this.wm      = ctx.getWorkManager();
+        this.xa      = ctx.getXATerminator();
+    }
+
+    public void run() {
+
+        debug("ENTER...");
+        
+        try {
+            synchronized (Controls.readyLock) {
+                debug("WAIT...");
+                Controls.readyLock.wait();
+
+                if (stop) {
+                    return;
+                }
+            }
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+
+        debug("Running...");
+
+        //try 3 times to create endpoint (in case of failure)
+        for (int i = 0; i < 3; i++) {
+
+            try {
+
+                Method onMessage = getOnMessageMethod();
+                System.out.println("isDeliveryTransacted = " + 
+                        factory.isDeliveryTransacted(onMessage));
+
+                if (!factory.isDeliveryTransacted(onMessage)) {
+                    //MessageEndpoint ep = factory.createEndpoint(null);
+                    //DeliveryWork d = new DeliveryWork("NO_TX", ep); 
+                    //wm.doWork(d, 0, null, null);
+                } else {
+                    
+                    //MessageEndpoint ep = factory.createEndpoint(null);
+                    MessageEndpoint ep = factory.createEndpoint(new FakeXAResource());
+                    int numOfMessages = 5;
+                    
+                    //importing transaction
+
+                    //write/commit
+                    ExecutionContext ec = startTx();
+                    debug("Start TX - " + ec.getXid());
+
+                    DeliveryWork w = 
+                        new DeliveryWork(ep, numOfMessages, "WRITE");
+                    wm.doWork(w, 0, ec, null);
+                    xa.commit(ec.getXid(), true);
+
+                    debug("DONE WRITE TO DB");
+                    Controls.expectedResults = numOfMessages;
+                    notifyAndWait();
+                    
+                    //delete/rollback
+                    ec = startTx();
+                    debug("Start TX - " + ec.getXid());
+
+                    w = new DeliveryWork(ep, numOfMessages, "DELETE");
+                    wm.doWork(w, 0, ec, null);
+                    xa.rollback(ec.getXid());
+
+                    debug("DONE ROLLBACK FROM DB");
+                    Controls.expectedResults = numOfMessages;
+                    notifyAndWait();
+
+                    //delete/commit
+                    ec = startTx();
+                    debug("Start TX - " + ec.getXid());
+                    
+                    w = new DeliveryWork(ep, numOfMessages, "DELETE");
+                    wm.doWork(w, 0, ec, null);
+                    xa.commit(ec.getXid(), true);
+
+                    debug("DONE DELETE FROM DB");
+                    Controls.expectedResults = 0;
+                    notifyAndWait();
+
+                    //write/commit
+                    ec = startTx();
+                    debug("Start TX - " + ec.getXid());
+
+                    w = new DeliveryWork(ep, numOfMessages, "WRITE");
+                    wm.doWork(w, 0, ec, null);
+                    xa.commit(ec.getXid(), true);
+
+                    debug("DONE WRITE TO DB");
+                    Controls.expectedResults = numOfMessages;
+                    notifyAndWait();
+
+                    //delete/commit
+                    ec = startTx();
+                    debug("Start TX - " + ec.getXid());
+                    
+                    w = new DeliveryWork(ep, numOfMessages, "DELETE");
+                    wm.doWork(w, 0, ec, null);
+                    xa.commit(ec.getXid(), true);
+
+                    debug("DONE DELETE FROM DB");
+                    Controls.expectedResults = 0;
+                    notifyAndWait();
+
+                    //write multiple times using doWork/commit
+                    ec = startTx();
+                    debug("Start TX - " + ec.getXid());
+
+                    w = new DeliveryWork(ep, 1, "WRITE", true);
+                    wm.doWork(w, 0, ec, null);
+                    wm.doWork(w, 0, ec, null);
+                    wm.doWork(w, 0, ec, null);
+                    xa.commit(ec.getXid(), true);
+
+                    debug("DONE WRITE TO DB");
+                    Controls.expectedResults = 3;
+                    notifyAndWait();
+
+                    //write multiple times using doWork/rollback
+                    ec = startTx();
+                    debug("Start TX - " + ec.getXid());
+
+                    w = new DeliveryWork(ep, 1, "WRITE", true);
+                    wm.doWork(w, 0, ec, null);
+                    wm.doWork(w, 0, ec, null);
+                    wm.doWork(w, 0, ec, null);
+                    xa.rollback(ec.getXid());
+
+                    debug("DONE WRITE TO DB");
+                    Controls.expectedResults = 3;
+                    notifyAndWait();
+
+                    ec = startTx();
+                    debug("Start TX - " + ec.getXid());
+
+                    //write multiple times using doWork/rollback
+                    w = new DeliveryWork(ep, 2, "WRITE", true);
+                    wm.doWork(w, 0, ec, null);
+                    wm.doWork(w, 0, ec, null);
+                    wm.doWork(w, 0, ec, null);
+                    
+                    if (XAResource.XA_OK == xa.prepare(ec.getXid())) {
+                        xa.commit(ec.getXid(), false);
+                        debug("XA PREPARE/COMMIT. DONE WRITE TO DB ");
+                        Controls.expectedResults = 9;
+                        notifyAndWait();
+                    } else {
+                        xa.rollback(ec.getXid());
+                        debug("XA PREPARE UNSUCCESSFUL. DONE ROLLBACK");
+                        Controls.expectedResults = 3;
+                        notifyAndWait();
+                    }
+                    
+                    //delete all.
+                    ec = startTx();
+                    debug("Start TX - " + ec.getXid());
+                    
+                    w = new DeliveryWork(ep, 1, "DELETE_ALL");
+                    wm.doWork(w, 0, ec, null);
+                    xa.commit(ec.getXid(), true);
+                    
+                    debug("DONE DELETE ALL FROM DB");
+                    Controls.expectedResults = 0;
+                    notifyAndWait();
+                    
+                    done();
+                }
+
+                break;
+            } catch (UnavailableException ex) {
+                //ex.printStackTrace();
+                System.out.println("WorkDispatcher["+id+"] Endpoint Unavailable");
+                try {
+                    Thread.currentThread().sleep(3*1000); //3 seconds
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            } catch (XAException ex) {
+                ex.printStackTrace();
+                System.out.println("ERROR CODE = " + ex.errorCode);
+                done();
+                break;
+            }  catch (Exception ex) {
+                ex.printStackTrace();
+                done();
+                break;
+            }
+        }
+        
+        debug("LEAVE...");
+    }
+
+    public void release() {}
+
+    public void stop() {
+        this.stop = true;
+    }
+
+    public String toString() {
+       return id;
+    }
+
+    public Method getOnMessageMethod() {
+        
+        Method onMessageMethod = null;
+        try {
+            Class msgListenerClass = connector.MyMessageListener.class;
+            Class[] paramTypes = { java.lang.String.class };
+            onMessageMethod = 
+                msgListenerClass.getMethod("onMessage", paramTypes);
+            
+        } catch (NoSuchMethodException ex) {
+            ex.printStackTrace();
+        }
+        return onMessageMethod;
+    }
+
+    private ExecutionContext startTx() {
+        ExecutionContext ec = new ExecutionContext();
+        try {
+            Xid xid = new XID();
+            ec.setXid(xid);
+            ec.setTransactionTimeout(5*1000); //5 seconds
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        return ec;
+    }
+
+    private void notifyAndWait() {
+        try {
+            //Sleep for 5 seconds
+            //Thread.currentThread().sleep(5*1000);
+            
+            synchronized(Controls.readyLock) {
+                //Notify the client to check the results
+                Controls.readyLock.notify(); 
+                
+                //Wait until results are verified by the client
+                Controls.readyLock.wait(); 
+
+                if (stop) {
+                    return;
+                }
+            }
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    private void done() {
+        try {
+            Controls.done = true;
+            synchronized(Controls.readyLock) {
+                //Notify the client to check the results
+                Controls.readyLock.notify(); 
+            }
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    private void debug(String mesg) {
+        System.out.println("Dispatcher[" + id + "] --> " + mesg);
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/XID.java b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/XID.java
new file mode 100644
index 0000000..138e91b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/javaee-integration/standalone-resource-adapter-as-bean-archive/ra/src/connector/XID.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 connector;
+
+import javax.transaction.xa.Xid;
+
+/**
+ * The XID class provides an implementation of the X/Open
+ * transaction identifier it implements the javax.transaction.xa.Xid interface.
+ */
+public class XID implements Xid {
+
+
+ private static int ID = initializeID();
+
+    private static int initializeID() {
+        return  (int)(Math.random()*100000);
+    }
+
+    public int formatID;   // Format identifier
+                           // (-1) means that the XID is null
+    public int branchQualifier;
+    public int globalTxID;
+
+    static public  final int MAXGTRIDSIZE= 64; 
+    static public  final int MAXBQUALSIZE= 64; 
+
+    public XID() {
+        int foo = ID++;
+        formatID = foo;
+        branchQualifier = foo;
+        globalTxID = foo;
+    }
+
+    public boolean equals(Object o) {
+        XID               other;   // The "other" XID
+        int               L;       // Combined gtrid_length + bqual_length
+        int               i;
+
+        if (!(o instanceof XID))        // If the other XID isn't an XID
+        {
+            return false;                  // It can't be equal
+        }
+        
+        other = (XID)o;                   // The other XID, now properly cast
+        
+        if (this.formatID == other.formatID 
+                && this.branchQualifier == other.branchQualifier
+                && this.globalTxID == other.globalTxID) {
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Compute the hash code.
+     *
+     * @return the computed hashcode
+     */
+    public int hashCode() {
+        if (formatID == (-1)) {
+            return (-1);
+        }
+
+        return formatID + branchQualifier + globalTxID;
+
+    }
+
+    /*
+     * Convert to String
+     *
+     * <p> This is normally used to display the XID when debugging.
+     */
+
+    /**
+     * Return a string representing this XID.
+     *
+     * @return the string representation of this XID
+     */
+    public String toString() {
+
+        String s = new String("{XID: " +
+                "formatID("     + formatID     + "), " +
+                "branchQualifier (" + branchQualifier + "), " +
+                "globalTxID(" + globalTxID + ")}");
+        
+        return s;
+    }
+
+    /*
+     * Return branch qualifier
+     */
+
+    /**
+     * Returns the branch qualifier for this XID.
+     *
+     * @return the branch qualifier
+     */
+    public byte[] getBranchQualifier() {
+        String foo = (new Integer(branchQualifier)).toString();
+        return foo.getBytes();
+    }
+
+    public int getFormatId() {
+        return formatID;
+    }
+
+    public byte[] getGlobalTransactionId() {
+        String foo = (new Integer(globalTxID)).toString();
+        return foo.getBytes();
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/lib/ant-contrib-1.0b3.jar b/appserver/tests/appserv-tests/devtests/cdi/lib/ant-contrib-1.0b3.jar
new file mode 100644
index 0000000..0625376
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/lib/ant-contrib-1.0b3.jar
Binary files differ
diff --git a/appserver/tests/appserv-tests/devtests/cdi/managed-beans/build.xml b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/build.xml
new file mode 100644
index 0000000..5476c34
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/build.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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="managedbeans-test" default="usage" basedir=".">
+
+    <property name="managedbeans-target" value="all"/>
+
+    <target name="run-test">
+        <antcall target="managedbeans">
+        <param name="managedbeans-target" value="run-test"/>
+        </antcall>
+    </target>
+
+    <target name="all">
+        <antcall target="managedbeans">
+        <param name="managedbeans-target" value="all"/>
+        </antcall>
+    </target>
+
+    <target name="clean">
+        <antcall target="managedbeans">
+        <param name="managedbeans-target" value="clean"/>
+        </antcall>
+    </target>
+
+    <target name="build">
+        <antcall target="managedbeans">
+        <param name="managedbeans-target" value="build"/>
+        </antcall>
+    </target>
+
+    <target name="setup">
+        <antcall target="managedbeans">
+        <param name="managedbeans-target" value="setup"/>
+        </antcall>
+    </target>
+
+    <target name="deploy">
+        <antcall target="managedbeans">
+        <param name="managedbeans-target" value="deploy"/>
+        </antcall>
+    </target>
+
+    <target name="undeploy">
+        <antcall target="managedbeans">
+        <param name="managedbeans-target" value="undeploy"/>
+        </antcall>
+    </target>
+
+    <target name="unsetup">
+        <antcall target="managedbeans">
+        <param name="managedbeans-target" value="unsetup"/>
+        </antcall>
+    </target>
+
+    <target name="run">
+        <antcall target="managedbeans">
+        <param name="managedbeans-target" value="run"/>
+        </antcall>
+    </target>
+
+    <target name="managedbeans">
+        <record name="managedbeans.output" action="start" />
+<!--
+        <ant dir="managed-bean-via-resource-injection" target="${managedbeans-target}"/>
+-->
+        <ant dir="managed-bean-lifecycle-polymorphism" target="${managedbeans-target}"/>
+
+        <record name="managedbeans.output" action="stop" />
+    </target>
+
+    <target name="usage">
+	<echo> Usage:
+		ant all (Executes all the managedbeans tests)
+		ant clean (cleans all the managedbeans tests)
+		ant build (builds all the managedbeans tests)
+		ant setup (sets up all resources for managedbeans tests)
+		ant deploy (deploys all the managedbeans apps)
+		ant run (Executes all the managedbeans tests)
+		ant undeploy (undeploys all the  managedbeans apps)
+		ant unsetup (unsets all resources for managedbeans tests)
+	</echo>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/README b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/README
new file mode 100644
index 0000000..c5b2856
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/README
@@ -0,0 +1,3 @@
+GLASSFISH-15148
+
+https://issues.jboss.org/browse/WELD-1225
diff --git a/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/WebTest.java
new file mode 100644
index 0000000..e736b97
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/WebTest.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "managed-bean-lifecycle-inheritance";
+    private static final String EXPECTED_RESPONSE =
+        "Hello from Servlet 3.0. initParams: n1=v1, n2=v2" +
+        " | TestManagedBean injected via @Inject : TestManagedBeanExtension#PostConstruct" +
+        " | pc count = 1";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for @WebServlet");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/build.properties b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/build.properties
new file mode 100644
index 0000000..c0f20bb
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/build.properties
@@ -0,0 +1,25 @@
+<!--
+
+    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}-managed-bean-lifecycle-polymorphism"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/build.xml b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/build.xml
new file mode 100644
index 0000000..0a72e12
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/build.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="managed-bean-lifecyle-polymorphism" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/descriptor/beans.xml
new file mode 100644
index 0000000..5388298
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/descriptor/beans.xml
@@ -0,0 +1,29 @@
+<!--
+
+    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
+
+-->
+
+<beans 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/beans_1_0.xsd">
+<!--
+   <interceptors>
+      <class>com.tests.TestAroundInvokeInterceptor</class>
+   </interceptors>
+-->
+   <alternatives>
+       <class>com.tests.TestManagedBeanExtension</class>
+   </alternatives>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/servlet/com/tests/TestAroundInvokeInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/servlet/com/tests/TestAroundInvokeInterceptor.java
new file mode 100644
index 0000000..099911d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/servlet/com/tests/TestAroundInvokeInterceptor.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.tests;
+
+import javax.interceptor.*;
+
+@Tester @Interceptor
+public class TestAroundInvokeInterceptor {
+    public static int aroundInvokeCount = 0;
+
+    public static void reset(){
+        aroundInvokeCount = 0;
+    }
+
+   @AroundInvoke 
+   public Object testMethod(InvocationContext ctx) throws Exception {
+        System.out.println("TestAroundInvokeInterceptor:: aroundInvoke called - target:" + ctx.getTarget() + " , params:"+ ctx.getParameters());
+        aroundInvokeCount ++;
+        ctx.proceed();
+        return null;
+   }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/servlet/com/tests/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/servlet/com/tests/TestBean.java
new file mode 100644
index 0000000..925a588
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/servlet/com/tests/TestBean.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.tests;
+
+public class TestBean {
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/servlet/com/tests/TestManagedBean.java b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/servlet/com/tests/TestManagedBean.java
new file mode 100644
index 0000000..7ab136d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/servlet/com/tests/TestManagedBean.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.tests;
+
+
+@javax.annotation.ManagedBean
+public class TestManagedBean {
+
+    public static final String TOSTRING = "TestManagedBean";
+
+    protected int postConstructCount = 0;
+
+    protected int preDestroyCount = 0;
+
+    protected String postConstructMessage = "";
+
+    protected String preDestroyMessage = "";
+
+    @javax.annotation.PostConstruct
+    public void init() {
+        postConstructCount++;
+        postConstructMessage += TOSTRING + "#PostConstruct";
+        System.out.println(postConstructMessage);
+    }
+
+    @javax.annotation.PreDestroy
+    public void destroy() {
+        preDestroyCount++;
+        preDestroyMessage += TOSTRING + "#PreDestroy";
+        System.out.println(preDestroyMessage);
+    }
+
+    @Tester
+    public void foo() {
+        System.out.println(toString() + "#foo called");
+    }
+
+    public boolean testPostConstructCalled() {
+        return (postConstructCount > 0);
+    }
+
+    public int getPostConstructCount() {
+        return postConstructCount;
+    }
+
+    public int getPreDestroyCount() {
+        return preDestroyCount;
+    }
+
+    public String getPostConstructMessage() {
+        return postConstructMessage;
+    }
+    
+    public String getPreDestroyMessage() {
+        return preDestroyMessage;
+    }
+
+    @Override
+    public String toString() {
+        return TOSTRING;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/servlet/com/tests/TestManagedBeanExtension.java b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/servlet/com/tests/TestManagedBeanExtension.java
new file mode 100644
index 0000000..19fed61
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/servlet/com/tests/TestManagedBeanExtension.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.tests;
+
+@javax.enterprise.inject.Alternative
+@javax.annotation.ManagedBean
+public class TestManagedBeanExtension extends TestManagedBean {
+
+    public static final String TOSTRING_EXT = "TestManagedBeanExtension";
+
+    @javax.annotation.PostConstruct
+    public void init() {
+        postConstructCount++;
+        postConstructMessage += TOSTRING_EXT + "#PostConstruct";
+        System.out.println(postConstructMessage);
+    }
+
+    @javax.annotation.PreDestroy
+    public void destroy() {
+        preDestroyCount++;
+        preDestroyMessage += TOSTRING_EXT + "#PreDestroy";
+        System.out.println(preDestroyMessage);
+    }
+
+    
+    @Override
+    public String toString() {
+        return TOSTRING_EXT;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/servlet/com/tests/TestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/servlet/com/tests/TestServlet.java
new file mode 100644
index 0000000..94a067b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/servlet/com/tests/TestServlet.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.tests;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.annotation.Generated;
+import javax.annotation.Resource;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@SuppressWarnings("serial")
+@WebServlet(name="mytest",
+        urlPatterns={"/myurl"},
+        initParams={ @WebInitParam(name="n1", value="v1"), @WebInitParam(name="n2", value="v2") } )
+public class TestServlet extends HttpServlet {
+
+    @javax.inject.Inject
+    TestManagedBean testResource;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0. ");
+        String msg = "n1=" + getInitParameter("n1") +
+            ", n2=" + getInitParameter("n2");
+
+        msg += testManagedBean(testResource, " | TestManagedBean injected via @Inject");
+        msg += testOverriddenMethods();
+
+        writer.write("initParams: " + msg + "\n");
+    }
+
+    private String testOverriddenMethods() {
+        return " | pc count = " + String.valueOf(testResource.getPostConstructCount());
+    }
+
+    private String testManagedBean(TestManagedBean tb, String info) {
+        String msg = info;
+        if (tb == null) {
+            msg += " is null!";
+        } else {
+            if (!tb.testPostConstructCalled()) {
+                msg += " postConstruct not called";
+            } else {
+                msg += " : " + tb.getPostConstructMessage();
+            }
+        }
+        return msg;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/servlet/com/tests/Tester.java b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/servlet/com/tests/Tester.java
new file mode 100644
index 0000000..a966727
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-lifecycle-polymorphism/servlet/com/tests/Tester.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.tests;
+
+import javax.interceptor.*;
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+
+@InterceptorBinding
+@Target({METHOD, TYPE})
+@Retention(RUNTIME)
+public @interface Tester {}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/README b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/README
new file mode 100644
index 0000000..a15008e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/README
@@ -0,0 +1,2 @@
+Non-CDI usecase
+Injection of a ManagedBean into a servlet through @Resource and invoking an overridden toString on that ManagedBean reference. [see issue 11528]
diff --git a/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/WebTest.java
new file mode 100644
index 0000000..6a28a08
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/WebTest.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "managed-bean-resource-injection";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0. initParams: n1=v1, n2=v2";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for @WebServlet");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/build.properties b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/build.properties
new file mode 100644
index 0000000..91ab983
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/build.properties
@@ -0,0 +1,26 @@
+<!--
+
+    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}-simple-managed-bean-interceptor"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<!--
+<property name="beans.xml" value="descriptor/beans.xml">
+-->
diff --git a/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/build.xml b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/build.xml
new file mode 100644
index 0000000..83ad666
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/build.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/descriptor/beans.xml
new file mode 100644
index 0000000..a52bc90
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/descriptor/beans.xml
@@ -0,0 +1,24 @@
+<!--
+
+    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
+
+-->
+
+<beans 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/beans_1_0.xsd">
+   <interceptors>
+      <class>com.tests.TestAroundInvokeInterceptor</class>
+   </interceptors>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/servlet/com/tests/TestAroundInvokeInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/servlet/com/tests/TestAroundInvokeInterceptor.java
new file mode 100644
index 0000000..379dfbf
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/servlet/com/tests/TestAroundInvokeInterceptor.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.tests;
+
+import javax.interceptor.*;
+
+@Tester @Interceptor
+public class TestAroundInvokeInterceptor {
+    public static int aroundInvokeCount = 0;
+
+    public static void reset(){
+        aroundInvokeCount = 0;
+    }
+
+   @AroundInvoke 
+   public Object testMethod(InvocationContext ctx) throws Exception {
+        System.out.println("TestAroundInvokeIntercetpr:: aroundInvoke called - target:" + ctx.getTarget() + " , params:"+ ctx.getParameters());
+        aroundInvokeCount ++;
+        ctx.proceed();
+        return null;
+   }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/servlet/com/tests/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/servlet/com/tests/TestBean.java
new file mode 100644
index 0000000..8de8781
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/servlet/com/tests/TestBean.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.tests;
+
+//Simple Bean to test injection into ManagedBeans
+public class TestBean {
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/servlet/com/tests/TestManagedBean.java b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/servlet/com/tests/TestManagedBean.java
new file mode 100644
index 0000000..366e381
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/servlet/com/tests/TestManagedBean.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.tests;
+
+//Simple TestBean to test CDI. 
+//This bean implements Serializable as it needs to be placed into a Stateful Bean
+@javax.annotation.ManagedBean
+public class TestManagedBean {
+    boolean postConstructCalled = false;
+
+    public static final String TOSTRING = "TestManagedBean";
+
+    // A Managed Bean needs to have a no-arg constructor
+    public TestManagedBean() {
+    }
+
+    @javax.annotation.PostConstruct
+    public void init() {
+        System.out.println("In ManagedBean:: PostConstruct");
+        postConstructCalled = true;
+    }
+
+    @Tester
+    public void foo() {
+        System.out.println("foo called");
+    }
+
+    public boolean testPostConstructCalled() {
+        return this.postConstructCalled;
+    }
+
+    @Override
+    public String toString() {
+        return TestManagedBean.TOSTRING;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/servlet/com/tests/TestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/servlet/com/tests/TestServlet.java
new file mode 100644
index 0000000..a55d437
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/servlet/com/tests/TestServlet.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.tests;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@SuppressWarnings("serial")
+@WebServlet(name="mytest",
+        urlPatterns={"/myurl"},
+        initParams={ @WebInitParam(name="n1", value="v1"), @WebInitParam(name="n2", value="v2") } )
+public class TestServlet extends HttpServlet {
+    @javax.annotation.Resource TestManagedBean testResource;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0. ");
+        String msg = "n1=" + getInitParameter("n1") +
+            ", n2=" + getInitParameter("n2");
+
+        msg += testManagedBean(testResource, " | TestManagedBean injected via @Resource");
+        msg += testOverriddenMethods();
+
+        writer.write("initParams: " + msg + "\n");
+    }
+
+    private String testOverriddenMethods() {
+        String s = "";
+        System.out.println("toString returned:" +testResource.toString());
+        if (!testResource.toString().equals(TestManagedBean.TOSTRING)) 
+            s += "TestManagedBean obtained via @Resource toString method invocation failed";
+        return s;
+    }
+
+    private String testManagedBean(TestManagedBean tb, String info) {
+        String msg = "";
+        if (tb == null) msg += info + " is null!";
+        if (tb != null && !tb.testPostConstructCalled()) msg += info + " postConstruct not called";
+        return msg;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/servlet/com/tests/Tester.java b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/servlet/com/tests/Tester.java
new file mode 100644
index 0000000..a966727
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/managed-beans/managed-bean-via-resource-injection/servlet/com/tests/Tester.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.tests;
+
+import javax.interceptor.*;
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+
+@InterceptorBinding
+@Target({METHOD, TYPE})
+@Retention(RUNTIME)
+public @interface Tester {}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/open-issues/build.xml b/appserver/tests/appserv-tests/devtests/cdi/open-issues/build.xml
new file mode 100644
index 0000000..3488ae8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/open-issues/build.xml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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="openissues-test" default="usage" basedir=".">
+
+    <property name="openissues-target" value="all"/>
+
+    <target name="run-test">
+        <antcall target="openissues">
+        <param name="openissues-target" value="run-test"/>
+        </antcall>
+    </target>
+
+    <target name="all">
+        <antcall target="openissues">
+        <param name="openissues-target" value="all"/>
+        </antcall>
+    </target>
+
+    <target name="clean">
+        <antcall target="openissues">
+        <param name="openissues-target" value="clean"/>
+        </antcall>
+    </target>
+
+    <target name="build">
+        <antcall target="openissues">
+        <param name="openissues-target" value="build"/>
+        </antcall>
+    </target>
+
+    <target name="setup">
+        <antcall target="openissues">
+        <param name="openissues-target" value="setup"/>
+        </antcall>
+    </target>
+
+    <target name="deploy">
+        <antcall target="openissues">
+        <param name="openissues-target" value="deploy"/>
+        </antcall>
+    </target>
+
+    <target name="undeploy">
+        <antcall target="openissues">
+        <param name="openissues-target" value="undeploy"/>
+        </antcall>
+    </target>
+
+    <target name="unsetup">
+        <antcall target="openissues">
+        <param name="openissues-target" value="unsetup"/>
+        </antcall>
+    </target>
+
+    <target name="run">
+        <antcall target="openissues">
+        <param name="openissues-target" value="run"/>
+        </antcall>
+    </target>
+
+    <target name="openissues">
+        <record name="openissues.output" action="start" />
+        <ant dir="../smoke-tests/simple-managed-bean-interceptor" target="${openissues-target}"/> <!-- WELD 728 -->
+        <ant dir="../managed-beans/managed-bean-via-resource-injection" target="${openissues-target}"/> <!-- IT 11528 -->
+        <ant dir="../javaee-component-resources/em-resource-injection-extended-transaction-context" target="${openissues-targer"/> <!--IT 11805 -->
+        <ant dir="../smoke-tests/singleton-startup/hello" target="${openissues-target}"/> <!-- IT 13072 -->
+        <record name="openissues.output" action="stop" />
+    </target>
+
+    <target name="usage">
+	<echo> Usage:
+		ant all (Executes all the openissues tests)
+		ant clean (cleans all the openissues tests)
+		ant build (builds all the openissues tests)
+		ant setup (sets up all resources for openissues tests)
+		ant deploy (deploys all the openissues apps)
+		ant run (Executes all the openissues tests)
+		ant undeploy (undeploys all the  openissues apps)
+		ant unsetup (unsets all resources for openissues tests)
+	</echo>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/build.xml b/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/build.xml
new file mode 100644
index 0000000..bc0588f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/build.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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="osgi-cdi-test" default="usage" basedir=".">
+
+    <property name="osgi-cdi-target" value="all"/>
+
+    <target name="run-test">
+        <antcall target="osgi-cdi">
+        <param name="osgi-cdi-target" value="run-test"/>
+        </antcall>
+    </target>
+
+    <target name="all">
+        <antcall target="osgi-cdi">
+        <param name="osgi-cdi-target" value="all"/>
+        </antcall>
+    </target>
+
+    <target name="clean">
+        <antcall target="osgi-cdi">
+        <param name="osgi-cdi-target" value="clean"/>
+        </antcall>
+    </target>
+
+    <target name="build">
+        <antcall target="osgi-cdi">
+        <param name="osgi-cdi-target" value="build"/>
+        </antcall>
+    </target>
+
+    <target name="setup">
+        <antcall target="osgi-cdi">
+        <param name="osgi-cdi-target" value="setup"/>
+        </antcall>
+    </target>
+
+    <target name="deploy">
+        <antcall target="osgi-cdi">
+        <param name="osgi-cdi-target" value="deploy"/>
+        </antcall>
+    </target>
+
+    <target name="undeploy">
+        <antcall target="osgi-cdi">
+        <param name="osgi-cdi-target" value="undeploy"/>
+        </antcall>
+    </target>
+
+    <target name="unsetup">
+        <antcall target="osgi-cdi">
+        <param name="osgi-cdi-target" value="unsetup"/>
+        </antcall>
+    </target>
+
+    <target name="run">
+        <antcall target="osgi-cdi">
+        <param name="osgi-cdi-target" value="run"/>
+        </antcall>
+    </target>
+
+    <target name="osgi-cdi">
+        <record name="osgi-cdi.output" action="start" />
+            <ant dir="simple-wab-with-cdi" target="${osgi-cdi-target}"/>
+        <record name="osgi-cdi.output" action="stop" />
+    </target>
+
+    <target name="usage">
+	<echo> Usage:
+		ant all (Executes all the osgi-cdi tests)
+		ant clean (cleans all the osgi-cdi tests)
+		ant build (builds all the osgi-cdi tests)
+		ant setup (sets up all resources for osgi-cdi tests)
+		ant deploy (deploys all the osgi-cdi apps)
+		ant run (Executes all the osgi-cdi tests)
+		ant undeploy (undeploys all the  osgi-cdi apps)
+		ant unsetup (unsets all resources for osgi-cdi tests)
+	</echo>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/common.xml b/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/common.xml
new file mode 100644
index 0000000..f396e66
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/common.xml
@@ -0,0 +1,1946 @@
+<!--
+
+    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 is the top level build file that should be 
+    imported into all the leaf level build files 
+-->
+
+<!-- ================================================================ -->
+<!-- Targets to clean class files and jars files -->
+<!-- 
+Variables used: 
+    ${build.classes.dir} 
+    ${assemble.dir}
+-->
+<!-- ================================================================ -->
+<target name="clean-classes-common" depends="init-common">
+    <echo message="common.xml: Cleaning test source files: ${build.base.dir}" 
+        level="verbose"/>
+  <delete dir="${build.base.dir}"/>
+</target>
+    
+<target name="clean-jars-common" depends="init-common">
+  <delete dir="${assemble.dir}"/>
+</target>
+
+<target name="clean-common" depends="init-common">
+  <antcall target="clean-classes-common"/>
+  <antcall target="clean-jars-common"/>
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to compile the java source files -->
+<!-- 
+Variables used: 
+    ${build.classes.dir} 
+    ${s1astest.classpath}
+    ${src}
+-->
+<!-- ================================================================ -->
+<target name="compile-common" depends="init-common">
+  <mkdir dir="${build.classes.dir}"/>
+  <echo message="common.xml: Compiling test source files" level="verbose"/>
+  <mkdir dir="${src}"/>
+  <javac srcdir="${src}"
+    destdir="${build.classes.dir}"
+    classpath="${s1astest.classpath}"
+    debug="on"
+    failonerror="true"/>
+</target>
+
+<!-- ================================================================ -->
+<!-- This is the external target war-common to be called up build files
+usage:
+<antcall target="war-common">
+<param name="war.classes" value="MyServlet.class,MyOtherServlet.class"/>
+</antcall>
+Assumption: All the static content is placed in webcontent directory
+
+Variables Used:
+    ${war.file}
+    ${build.classes.dir}
+    ${appname}    
+    ${assemble.dir}
+    ${web.xml}
+    ${beans.xml}
+    ${tlds}
+    ${tagfiles}
+    ${APS_HOME}
+    ${webclient.war.files}
+    ${webclient.war.classes}
+-->
+<!-- ================================================================ -->
+
+<target name="webclient-war-common" if="hasWebclient" depends="init-common">
+  <mkdir dir="${assemble.dir}"/>
+  <antcall target="package-war-common">
+    <param name="war.classes" value="${build.classes.dir}"/>
+    <param name="war.file" value="${assemble.dir}/${appname}-web.war"/>
+  </antcall>
+</target>
+
+<target name="webclient-wab-common" if="hasWebclient" depends="init-common">
+  <mkdir dir="${assemble.dir}"/>
+  <antcall target="package-wab-common">
+    <param name="war.classes" value="${build.classes.dir}"/>
+    <param name="war.file" value="${assemble.dir}/${appname}-web.war"/>
+  </antcall>
+</target>
+
+
+<target name="publish-war-common" depends="init-common">
+  <mkdir dir="${build.webapps.dir}"/>
+  <copy file="${assemble.dir}/${appname}-web.war" 
+        tofile="${build.webapps.dir}/${appname}.war" 
+        overwrite="true" />
+</target>
+
+<target name="clean-webapps-common" depends="init-common">
+    <delete dir="${build.webapps.dir}" quiet="true" />  
+</target>
+
+<target name="clear">
+    <delete file="${war.file}"/>  
+</target>
+
+<target name="copy-tlds" if="tlds-exist" depends="clear,test-tlds-exist">
+  <mkdir dir="${build.classes.dir}/tmp/WEB-INF/tlds"/>
+  <copy todir="${build.classes.dir}/tmp/WEB-INF/tlds" failonerror="false">
+      <fileset dir="${tlds}">
+          <include name="**/*.tld"/>
+      </fileset>
+  </copy>
+</target>
+
+<target name="copy-tagfiles" if="tagfiles-exist" depends="clear,test-tagfiles-exist">
+  <mkdir dir="${build.classes.dir}/tmp/WEB-INF/tags"/>
+  <copy todir="${build.classes.dir}/tmp/WEB-INF/tags" failonerror="false">
+      <fileset dir="${tagfiles}">
+          <include name="**/*.tag"/>
+          <include name="**/*.tagx"/>
+      </fileset>
+  </copy>
+</target>
+
+<target name="package-war-common" depends="copy-tlds,copy-tagfiles">
+  <echo message="my build classes dir is:${build.classes.dir}" level="verbose"/>
+  <mkdir dir="${build.classes.dir}/tmp"/>
+  <mkdir dir="${build.classes.dir}/tmp/WEB-INF"/>
+  <mkdir dir="${build.classes.dir}/tmp/WEB-INF/classes"/>
+  <mkdir dir="${build.classes.dir}/tmp/WEB-INF/lib"/>
+  <mkdir dir="lib"/>
+  <copy file="${glassfish-web.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/glassfish-web.xml" failonerror="false"/>
+  <copy file="${sun-web.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/sun-web.xml" failonerror="false"/>
+  <copy file="${weblogic.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/weblogic.xml" failonerror="false"/>
+  <copy file="${glassfish-resources.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/glassfish-resources.xml" failonerror="false"/>
+  <copy todir="${build.classes.dir}/tmp/WEB-INF/lib" failonerror="false">
+      <fileset dir="lib">
+          <include name="**/*.jar"/>
+          <include name="**/*.zip"/>
+      </fileset>
+  </copy>
+  <copy file="${webservices.xml}" 
+        tofile="${build.classes.dir}/tmp/WEB-INF/webservices.xml"
+        failonerror="false"/>
+  <copy file="${mappingfile.location}/${mappingfile.name}" 
+        tofile="${build.classes.dir}/tmp/${mappingfile.name}"
+        failonerror="false"/>
+  <copy file="${wsdlfile.location}/${wsdlfile.name}" 
+        tofile="${build.classes.dir}/tmp/WEB-INF/wsdl/${wsdlfile.name}"
+        failonerror="false"/>
+  <copy file="${tagPlugins.xml}" 
+        tofile="${build.classes.dir}/tmp/WEB-INF/tagPlugins.xml"
+        failonerror="false"/>
+  <copy file="${web.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/web.xml"
+        failonerror="false"/>
+    <copy file="${persistence.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/classes/META-INF/persistence.xml"
+        failonerror="false"/>
+   <copy file="${beans.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/beans.xml"
+        failonerror="false"/>
+  <copy file="${context.xml}"
+      tofile="${build.classes.dir}/tmp/META-INF/context.xml" failonerror="false"/>
+  <copy file="${cdi-extension.service}"
+      tofile="${build.classes.dir}/tmp/WEB-INF/classes/META-INF/services/javax.enterprise.inject.spi.Extension" failonerror="false"/>
+      
+  <copy todir="${build.classes.dir}/tmp/WEB-INF/classes">
+      <fileset dir="${war.classes}">
+          <include name="**/*.class"/>
+      </fileset>
+  </copy>
+  <echo message="Creating war file ${war.file}" level="verbose"/>
+  <mkdir dir="${basedir}/docroot"/>
+  <jar jarfile="${war.file}" update="true">
+    <fileset dir="${build.classes.dir}/tmp" casesensitive="yes">
+      <include name="**/*class*"/>
+    </fileset>
+    <fileset dir="${basedir}/docroot" casesensitive="yes">
+      <include name="**/*.html"/>
+      <include name="**/*.HTML"/>
+      <include name="**/*.xhtml"/>
+      <include name="**/*.jsp"/>
+      <include name="**/*.jspx"/>
+      <include name="**/*.jspf"/>
+      <include name="**/*.gif"/>
+      <include name="**/*.do"/>
+      <include name="**/*.txt"/>
+      <include name="**/*.shtml"/>
+      <include name="**/*.jar"/>
+      <exclude name="**/*.java,**/*.xml,**/*.properties"/>
+    </fileset>
+    <fileset dir="${build.classes.dir}/tmp/" casesensitive="true">
+      <include name="WEB-INF/web.xml"/>
+      <include name="WEB-INF/glassfish-web.xml"/>
+      <include name="WEB-INF/glassfish-resources.xml"/>
+      <include name="WEB-INF/sun-web.xml"/>
+      <include name="WEB-INF/beans.xml"/>
+      <include name="WEB-INF/weblogic.xml"/>
+      <include name="WEB-INF/webservices.xml"/>
+      <include name="WEB-INF/tagPlugins.xml"/>
+      <include name="WEB-INF/lib/*"/>
+      <include name="WEB-INF/lib/extra/*"/>
+      <include name="WEB-INF/tlds/*"/>
+      <include name="WEB-INF/tags/*"/>
+      <include name="WEB-INF/wsdl/${wsdlfile.name}"/>
+      <include name="${mappingfile.name}"/>
+      <include name="META-INF/context.xml"/>
+      <include name="WEB-INF/classes/META-INF/services/javax.enterprise.inject.spi.Extension"/>
+      <include name="WEB-INF/classes/META-INF/persistence.xml"/>
+    </fileset>
+  </jar>       
+  <echo message="created war file ${war.file}" level="verbose"/>
+  <delete dir="${build.classes.dir}/tmp/WEB-INF" failonerror="false"/> 
+  <echo message="my webclient war classes are:${webclient.war.classes}" 
+      level="verbose"/>
+</target>
+
+<target name="package-wab-common" depends="copy-tlds,copy-tagfiles">
+  <echo message="my build classes dir is:${build.classes.dir}" level="verbose"/>
+  <mkdir dir="${build.classes.dir}/tmp"/>
+  <mkdir dir="${build.classes.dir}/tmp/WEB-INF"/>
+  <mkdir dir="${build.classes.dir}/tmp/WEB-INF/classes"/>
+  <mkdir dir="${build.classes.dir}/tmp/WEB-INF/lib"/>
+  <mkdir dir="${build.classes.dir}/tmp/WEB-INF/META-INF"/>
+  <mkdir dir="lib"/>
+  <copy file="${glassfish-web.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/glassfish-web.xml" failonerror="false"/>
+  <copy file="${sun-web.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/sun-web.xml" failonerror="false"/>
+  <copy file="${weblogic.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/weblogic.xml" failonerror="false"/>
+  <copy file="${glassfish-resources.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/glassfish-resources.xml" failonerror="false"/>
+  <copy todir="${build.classes.dir}/tmp/WEB-INF/lib" failonerror="false">
+      <fileset dir="lib">
+          <include name="**/*.jar"/>
+          <include name="**/*.zip"/>
+      </fileset>
+  </copy>
+  <copy file="${webservices.xml}" 
+        tofile="${build.classes.dir}/tmp/WEB-INF/webservices.xml"
+        failonerror="false"/>
+  <copy file="${mappingfile.location}/${mappingfile.name}" 
+        tofile="${build.classes.dir}/tmp/${mappingfile.name}"
+        failonerror="false"/>
+  <copy file="${wsdlfile.location}/${wsdlfile.name}" 
+        tofile="${build.classes.dir}/tmp/WEB-INF/wsdl/${wsdlfile.name}"
+        failonerror="false"/>
+  <copy file="${tagPlugins.xml}" 
+        tofile="${build.classes.dir}/tmp/WEB-INF/tagPlugins.xml"
+        failonerror="false"/>
+  <copy file="${web.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/web.xml"
+        failonerror="false"/>
+    <copy file="${persistence.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/classes/META-INF/persistence.xml"
+        failonerror="false"/>
+   <copy file="${beans.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/beans.xml"
+        failonerror="false"/>
+
+   <copy file="${bundle.descriptor}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/classes/META-INF/MANIFEST.MF"
+        failonerror="false"/>
+  <copy file="${context.xml}"
+      tofile="${build.classes.dir}/tmp/META-INF/context.xml" failonerror="false"/>
+  <copy file="${cdi-extension.service}"
+      tofile="${build.classes.dir}/tmp/WEB-INF/classes/META-INF/services/javax.enterprise.inject.spi.Extension" failonerror="false"/>
+      
+  <copy todir="${build.classes.dir}/tmp/WEB-INF/classes">
+      <fileset dir="${war.classes}">
+          <include name="**/*.class"/>
+      </fileset>
+  </copy>
+  <echo message="Creating war file ${war.file}" level="verbose"/>
+  <mkdir dir="${basedir}/docroot"/>
+  <jar manifest="${bundle.descriptor}" jarfile="${war.file}" update="true">
+    <fileset dir="${build.classes.dir}/tmp" casesensitive="yes">
+      <include name="**/*class*"/>
+    </fileset>
+    <fileset dir="${basedir}/docroot" casesensitive="yes">
+      <include name="**/*.html"/>
+      <include name="**/*.HTML"/>
+      <include name="**/*.xhtml"/>
+      <include name="**/*.jsp"/>
+      <include name="**/*.jspx"/>
+      <include name="**/*.jspf"/>
+      <include name="**/*.gif"/>
+      <include name="**/*.do"/>
+      <include name="**/*.txt"/>
+      <include name="**/*.shtml"/>
+      <include name="**/*.jar"/>
+      <exclude name="**/*.java,**/*.xml,**/*.properties"/>
+    </fileset>
+    <fileset dir="${build.classes.dir}/tmp/" casesensitive="true">
+      <include name="WEB-INF/web.xml"/>
+      <include name="WEB-INF/glassfish-web.xml"/>
+      <include name="WEB-INF/glassfish-resources.xml"/>
+      <include name="WEB-INF/sun-web.xml"/>
+      <include name="WEB-INF/beans.xml"/>
+      <include name="WEB-INF/weblogic.xml"/>
+      <include name="WEB-INF/webservices.xml"/>
+      <include name="WEB-INF/tagPlugins.xml"/>
+      <include name="WEB-INF/lib/*"/>
+      <include name="WEB-INF/lib/extra/*"/>
+      <include name="WEB-INF/tlds/*"/>
+      <include name="WEB-INF/tags/*"/>
+      <include name="WEB-INF/wsdl/${wsdlfile.name}"/>
+      <include name="${mappingfile.name}"/>
+      <include name="META-INF/context.xml"/>
+      <include name="WEB-INF/classes/META-INF/services/javax.enterprise.inject.spi.Extension"/>
+      <include name="WEB-INF/classes/META-INF/persistence.xml"/>
+    </fileset>
+  </jar>       
+  <echo message="created WAB file ${war.file}" level="verbose"/>
+  <delete dir="${build.classes.dir}/tmp/WEB-INF" failonerror="false"/> 
+  <echo message="my webclient WAB classes are:${webclient.war.classes}" 
+      level="verbose"/>
+</target>
+
+
+<target name="test-tlds-exist">
+  <available file="${tlds}" property="tlds-exist"/>
+</target>
+
+<target name="test-tagfiles-exist">
+  <available file="${tagfiles}" property="tagfiles-exist"/>
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to package the ejb application to jar file -->
+<!--
+Variables Used:
+    ${ejb.jar}
+    ${build.classes.dir}
+    ${ejb-jar.xml}    
+    ${beans.xml}
+    ${persistence-orm.xml}    
+    ${sun-ejb-jar.xml}    
+    ${glassfish-ejb-jar.xml}    
+    ${sun-cmp-mappings.xml}    
+    ${metainf.dir}    
+    ${ejbjar.files}
+    ${dbschema}
+-->
+<!-- ================================================================ -->
+<target name="package-ejbjar-common">
+  <delete file="${ejb.jar}"/>
+  <echo message="common.xml: Generating ejb-jar inside build directory" 
+      level="verbose"/>
+  <mkdir dir="${build.classes.dir}/META-INF"/>
+  <copy file="${ejb-jar.xml}" 
+    tofile="${build.classes.dir}/META-INF/ejb-jar.xml"
+    failonerror="false"/>
+  <copy file="${persistence-orm.xml}" 
+    tofile="${build.classes.dir}/META-INF/persistence-orm.xml"
+    failonerror="false"/>
+  <copy file="${webservices.xml}" 
+    tofile="${build.classes.dir}/META-INF/webservices.xml"
+    failonerror="false"/>
+  <copy file="${sun-ejb-jar.xml}" 
+    tofile="${build.classes.dir}/META-INF/sun-ejb-jar.xml"
+    failonerror="false"/>
+  <copy file="${glassfish-ejb-jar.xml}" 
+    tofile="${build.classes.dir}/META-INF/glassfish-ejb-jar.xml"
+    failonerror="false"/>
+  <copy file="${glassfish-resources.xml}"
+    tofile="${build.classes.dir}/META-INF/glassfish-resources.xml"
+    failonerror="false"/>
+  <copy file="${sun-cmp-mappings.xml}"
+    tofile="${build.classes.dir}/META-INF/sun-cmp-mappings.xml"
+    failonerror="false"/>
+  <copy file="${beans.xml}"
+    tofile="${build.classes.dir}/META-INF/beans.xml"
+    failonerror="false"/>
+  <copy file="${dbschema}" todir="${build.classes.dir}" failonerror="false"/>
+  <jar jarfile="${ejb.jar}" basedir="${ejbjar.files}" update="true"
+    includes ="${ejbjar.classes}">
+    <metainf dir="${build.classes.dir}/META-INF">
+      <include name="ejb-jar.xml"/>
+      <include name="persistence-orm.xml"/>
+      <include name="webservices.xml"/>
+      <include name="sun-ejb-jar.xml"/>
+      <include name="glassfish-resources.xml"/>
+      <include name="glassfish-ejb-jar.xml"/>
+      <include name="sun-cmp-mappings.xml"/>
+      <include name="beans.xml"/>
+    </metainf>
+  </jar>       
+  <delete dir="${build.classes.dir}/META-INF" failonerror="false"/>
+  <delete file="${build.classes.dir}/*.dbschema" failonerror="false"/>
+</target>  
+
+<!-- ================================================================ -->
+<!-- Target to package the appclient application to jar file -->
+<!--
+Variables Used:
+    ${appclient.jar}
+    ${appclientjar.classes}    
+    ${appclientjar.files}    
+    ${build.classes.dir}
+    ${application-client.xml}    
+    ${sun-application-client.xml}    
+-->
+<!-- ================================================================ -->
+<target name="package-appclientjar-common">
+  <delete file="${appclient.jar}"/>
+  <echo message="common.xml: Generating appclient-jar inside build directory" 
+      level="verbose"/>
+  <mkdir dir="${build.classes.dir}/META-INF"/>
+  <copy file="${application-client.xml}"
+        tofile="${build.classes.dir}/META-INF/application-client.xml" 
+        failonerror="false"/>
+  <copy file="${sun-application-client.xml}" tofile="${build.classes.dir}/META-INF/sun-application-client.xml"
+        failonerror="false"/>
+  <jar jarfile="${appclient.jar}" basedir="${appclientjar.files}" 
+    update="true" includes ="${appclientjar.classes}" 
+    manifest="./client/MANIFEST.MF">         
+    <metainf dir="${build.classes.dir}/META-INF">
+      <include name="application-client.xml"/>
+      <include name="sun-application-client.xml"/>
+    </metainf>
+  </jar>       
+</target> 
+
+<!-- ================================================================ -->
+<!-- Target to create the ejb application jar file -->
+<!-- ================================================================ -->
+<target name="ejb-jar-common" depends="init-common">
+  <mkdir dir="${assemble.dir}"/>
+  <antcall target="package-ejbjar-common">
+    <param name="ejbjar.files" value="${build.classes.dir}"/>
+    <param name="ejb.jar" value="${assemble.dir}/${appname}-ejb.jar"/>
+  </antcall>
+</target>     
+
+<!-- ================================================================ -->
+<!-- Target to create the appclient jar file -->
+<!-- ================================================================ -->
+<target name="appclient-jar-common" depends="init-common">
+  <mkdir dir="${assemble.dir}"/>
+  <antcall target="package-appclientjar-common">
+    <param name="appclientjar.files" 
+      value="${build.classes.dir}"/>
+    <param name="appclient.jar" 
+      value="${assemble.dir}/${appname}-client.jar"/>
+  </antcall>
+</target>
+
+<!-- ===== package par ===== -->
+<target name="package-persistence-common" depends="init-common" if="ejb30-persistence">
+    <echo message="CREATING Persistence archive: common.xml: ${build.classes.dir}, ${assemble.dir}"/>
+    <mkdir dir="${assemble.dir}"/>
+    <delete file="${assemble.dir}/${appname}-persistence.jar" failonerror="false"/>
+    <echo message="common.xml: Generating PAR inside build directory"/>
+    <mkdir dir="${build.classes.dir}/META-INF"/>
+    <copy file="${persistence.xml}" tofile="${build.classes.dir}/META-INF/persistence.xml" failonerror="false"/>
+    <copy file="${mapping.xml}" tofile="${build.classes.dir}/META-INF/entity-mapping.xml" failonerror="false"/>
+    <!-- make a jar  -->
+    <jar jarfile="${assemble.dir}/${appname}-persistence.jar" basedir="${build.classes.dir}" update="true" includes ="**/*.class" excludes="**/*Local*.class,**/*Remote*.class,**/*Home*.class,**/*Bean*.class,**/*EJB*.class,**/*Exception.class">
+       <metainf dir="${build.classes.dir}/META-INF">
+           <include name="**/*.xml"/>
+       </metainf>
+    </jar>
+    <delete dir="${build.classes.dir}/META-INF" failonerror="false"/>
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to assemble the ejb application to ear file -->
+<!-- ================================================================ -->
+<target name="build-ear-common" depends="fixFiles,package-persistence-common,ejb-jar-common,appclient-jar-common,webclient-war-common">
+  <delete file="${assemble.dir}/${appname}.ear"/>
+  <mkdir dir="${assemble.dir}"/>
+  <mkdir dir="${build.classes.dir}/META-INF"/>   
+  <copy file="${sun-application.xml}" tofile="${build.classes.dir}/META-INF/sun-application.xml"  	failonerror="false"/> 
+  <copy file="${application.xml}" tofile="${build.classes.dir}/META-INF/application.xml"  	failonerror="false"/> 
+  <copy file="${glassfish-resources-ear.xml}" tofile="${build.classes.dir}/META-INF/glassfish-resources.xml" failonerror="false"  filtering="true"/>
+  <jar jarfile="${assemble.dir}/${appname}App.ear"> 
+    <fileset dir="${assemble.dir}">
+      <include name="*.jar"/>
+      <include name="*.war"/>
+    </fileset>
+    <fileset dir="${build.classes.dir}">
+	<include name="META-INF/sun-application.xml"/>
+	<include name="META-INF/application.xml"/>
+        <include name="META-INF/glassfish-resources.xml"/>
+    </fileset>
+    <fileset dir="${env.APS_HOME}" includes="lib/reporter.jar"/>
+  </jar>        
+</target>
+
+
+<!-- ================================================================ -->
+<!-- Target to assemble the ejb application to ear file -->
+<!-- ================================================================ -->
+<target name="ear-common" depends="fixFiles,init-common">
+  <delete file="${assemble.dir}/${appname}.ear"/>
+  <mkdir dir="${assemble.dir}"/>
+  <mkdir dir="${build.classes.dir}/META-INF"/>    
+  <copy file="${sun-application.xml}" tofile="${build.classes.dir}/META-INF/sun-application.xml"  	failonerror="false"/> 
+  <copy file="${glassfish-resources-ear.xml}" tofile="${build.classes.dir}/META-INF/glassfish-resources.xml" failonerror="false"  filtering="true"/>
+  <ear earfile="${assemble.dir}/${appname}App.ear" 
+    appxml="${application.xml}">
+    <fileset dir="${assemble.dir}">
+      <include name="*.jar"/>
+      <include name="*.war"/>
+    </fileset>
+    <fileset dir="${build.classes.dir}">
+	<include name="META-INF/sun-application.xml"/>
+        <include name="META-INF/glassfish-resources.xml"/>
+    </fileset>
+    <fileset dir="${env.APS_HOME}" includes="lib/reporter.jar"/>
+  </ear>        
+</target>
+
+
+<!-- run Verifier on the ear file -->
+<target name="verifier" depends="init-common">
+    <echo message="Running verifier
+        ear file ${assemble.dir}/${appname}App.ear " level="verbose"/>
+    <antcall target="verifier-common">
+        <param name="verifier.command" value=" -n -rw "/>
+        <param name="operand.props" value="${assemble.dir}/${appname}App.ear"/>
+    </antcall>
+    <echo message="Validate the static check results" level="verbose"/>
+</target>
+
+<target name="verifier-common">
+  <echo message="Operand ${operand.props}"  level="verbose"/>
+    <exec executable="${VERIFIER}" failonerror="true">
+        <arg line="${verifier.command} ${operand.props}" />
+    </exec>
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to execute asadmin commands  -->
+<!-- ================================================================ -->
+<target name="asadmin-common">
+  <echo message="Doing admin task ${admin.command}" level="verbose"/>
+  <echo message="Operand ${operand.props}"  level="verbose"/>
+  <echo message="asadmin ${admin.command} ${as.props} ${operand.props}"/>
+    <exec executable="${ASADMIN}" failonerror="true">
+        <arg line="${admin.command} ${as.props} ${operand.props}" />        
+    </exec>
+</target>
+
+<target name="asadmin-common-ignore-fail">
+  <echo message="Doing admin task ${admin.command} (ignore failures)" 
+      level="verbose"/>
+  <echo message="Operand ${operand.props}"  level="verbose"/>
+  <echo message="asadmin ${admin.command} ${as.props} ${operand.props}"/>
+    <exec executable="${ASADMIN}" failonerror="false">
+        <arg line="${admin.command} ${as.props} ${operand.props}" />        
+    </exec>
+</target>
+
+
+<!-- Target to execute a batchfile of asadmin commands  -->
+<!-- ================================================================ -->
+<target name="asadmin-batch-common">
+  <echo message="Doing admin batch task ${admin.command} --file" 
+      level="verbose"/>
+<property name="user.password.file" value="asadminuserpassword.txt"/>
+<echo file="${user.password.file}" append="false">
+AS_ADMIN_USERPASSWORD=${password}
+AS_ADMIN_PASSWORD=${admin.password}
+AS_ADMIN_ADMINPASSWORD=${admin.password}
+AS_ADMIN_MASTERPASSWORD=${master.password}
+</echo>
+  <exec executable="${ASADMIN}" failonerror="true">
+     <arg line="--user ${admin.user} --passwordfile ${user.password.file} --host ${admin.host} --port ${admin.port} --echo=true --terse=true"/>
+     <arg line="multimode --file ${asadmin.file}" />        
+  </exec>
+  <delete file="${user.password.file}" failonerror="false"/>
+</target>
+ 
+<!-- ================================================================ -->
+
+<!-- ================================================================ -->
+<!-- Target to create the user in file realm the AppServ  -->
+<!-- ================================================================ -->
+<target name="create-user-common" depends="init-common">
+<property name="user.password.file" value="asadminuserpassword.txt"/>
+<echo file="${user.password.file}" append="false">
+AS_ADMIN_USERPASSWORD=${password}
+AS_ADMIN_PASSWORD=${admin.password}
+AS_ADMIN_ADMINPASSWORD=${admin.password}
+AS_ADMIN_MASTERPASSWORD=${master.password}
+</echo>
+  <exec executable="${ASADMIN}">
+    <arg line="create-file-user"/>
+    <arg line="--user ${admin.user} --passwordfile ${user.password.file} --host ${admin.host} --port ${admin.port} --echo=true --terse=true"/>
+    <arg line="--groups ${groups}"/>
+    <arg line="--authrealmname ${authrealmname}"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="${user}"/>
+  </exec>
+  <delete file="${user.password.file}" failonerror="false"/>
+</target>
+     
+<!-- ================================================================ -->
+<!-- Target to delete the user in file realm the AppServ  -->
+<!-- ================================================================ -->
+<target name="delete-user-common" depends="init-common">
+<echo message="Deleting user ${user} in file realm" level="verbose"/>
+<exec executable="${ASADMIN}">
+  <arg line="delete-file-user"/>
+  <arg line="${as.props}"/>
+  <arg line="--authrealmname ${authrealmname}"/>
+  <arg line="--target ${appserver.instance.name}"/>
+  <arg line="${user}"/>
+</exec>
+</target>
+
+<!-- ================================================================ -->
+<!-- J2EE Connector related targets 			     	  -->
+<!-- ================================================================ -->
+
+<target name="create-connector-connpool-common"
+        depends="init-common, create-connector-connpool"/>
+
+<target name="create-connector-connpool" depends="init-common">
+  <property name="failonerror" value="false"/>
+  <property name="extra-params" value=""/>
+  <echo message="asadmin create-connector-connection-pool ${as.props} --raname ${ra.name} --connectiondefinition ${connection.defname} --target ${appserver.instance.name} ${connector.conpool.name}"/>
+  <exec executable="${ASADMIN}" failonerror="${failonerror}">
+    <arg line="create-connector-connection-pool"/>
+    <arg line="${as.props}"/>
+    <arg line="--raname ${ra.name}"/>
+    <arg line="${extra-params}"/>
+    <arg line="--connectiondefinition ${connection.defname}"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="${connector.conpool.name}"/>
+  </exec>
+</target>
+
+<target name="delete-connector-connpool-common" depends="init-common">
+  <echo message="asadmin delete-connector-connection-pool ${as.props} --cascade=true ${connector.conpool.name}"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="delete-connector-connection-pool"/>
+    <arg line="${as.props}"/>
+    <arg line="--cascade=true"/>
+    <arg line="${connector.conpool.name}"/>
+  </exec>
+</target>
+
+<!--  create/delete Connector resource  -->
+<target name="create-connector-resource-common" depends="init-common">
+  <property name="failonerror" value="false"/>
+  <echo message="asadmin create-connector-resource ${as.props} --poolname ${connector.conpool.name} --target ${appserver.instance.name} ${connector.jndi.name}"/>
+  <exec executable="${ASADMIN}" failonerror="${failonerror}">
+    <arg line="create-connector-resource"/>
+    <arg line="${as.props}"/>
+    <arg line="--poolname ${connector.conpool.name}"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="${connector.jndi.name}"/>
+  </exec>
+</target>
+
+<target name="delete-connector-resource-common" depends="init-common">
+  <echo message="asadmin delete-connector-resource ${as.props} ${connector.jndi.name}"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="delete-connector-resource"/>
+    <arg line="${as.props}"/>
+    <arg line="${connector.jndi.name}"/>
+  </exec>
+</target>
+
+<!--  deploy/undeploy RAR files                     -->
+<target name="deploy-rar-common" depends="init-common">
+  <echo message="Deploying ${rarfile}" level="verbose"/>
+  <echo message="asadmin deploy ${as.props} --target ${appserver.instance.name} --force=${force} ${rarfile}"/>
+    <property name="force" value="false"/>
+    <property name="extra-params" value=""/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="deploy"/>
+    <arg line="${as.props}"/>
+    <arg line="${extra-params}"/>
+    <arg line="--force=${force}"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="${rarfile}"/>
+  </exec>
+  <echo message="Deploying ${rarfile} on ${appserver.instance.name}"/>
+</target>
+
+<target name="undeploy-rar-common" depends="init-common">
+  <echo message="Undeploying ${undeployrar}" level="verbose"/>
+  <echo message="asadmin undeploy ${as.props} --target ${appserver.instance.name} --cascade=${cascade} ${undeployrar}"/>
+    <property name="cascade" value="false"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="undeploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--cascade=${cascade}"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="${undeployrar}"/>
+  </exec>
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to create JDBC connection pool  -->
+<!-- ================================================================ -->
+<target name="create-jdbc-connpool-common" depends="init-common">
+<echo message="created jdbc connection pool ${jdbc.conpool.name}" 
+    level="verbose"/>
+    <exec executable="${ASADMIN}" failonerror="false">
+        <arg line="create-jdbc-connection-pool"/>
+        <arg line="--datasourceclassname ${db.class}"/>
+        <arg line="--restype ${jdbc.resource.type}"/>
+        <arg line="--target ${appserver.instance.name}"/>
+        <arg line="${as.props}"/>
+        <arg line="${jdbc.conpool.name}"/>
+    </exec>
+    <antcall target="set-${db.type}-connpool-props"/>
+</target>
+
+<target name="create-jdbc-driver-connpool-common" depends="init-common">
+<echo message="created jdbc connection pool ${jdbc.conpool.name}" 
+    level="verbose"/>
+    <property name="extra-params" value=""/>
+    <exec executable="${ASADMIN}" failonerror="false">
+        <arg line="create-jdbc-connection-pool"/>
+        <arg line="--driverclassname ${db.class}"/>
+        <arg line="--restype ${jdbc.resource.type}"/>
+        <arg line="${extra-params}"/>
+        <arg line="--target ${appserver.instance.name}"/>
+        <arg line="${as.props}"/>
+        <arg line="${jdbc.conpool.name}"/>
+    </exec>
+    <antcall target="set-${db.type}-driver-connpool-props"/>
+</target>
+
+<target name="set-pointbase-connpool-props">
+  <antcall target="asadmin-common-ignore-fail">
+    <param name="admin.command" value="set" />
+    <param name="operand.props"
+      value="${resources.dottedname.prefix}.jdbc-connection-pool.${jdbc.conpool.name}.property.DatabaseName=${db.url}"/>
+  </antcall>
+  <antcall target="asadmin-common-ignore-fail">
+    <param name="admin.command" value="set" />
+    <param name="operand.props"
+      value="${resources.dottedname.prefix}.jdbc-connection-pool.${jdbc.conpool.name}.property.User=${db.user}" />
+  </antcall>
+  <antcall target="asadmin-common-ignore-fail">
+    <param name="admin.command" value="set" />
+    <param name="operand.props"
+      value="${resources.dottedname.prefix}.jdbc-connection-pool.${jdbc.conpool.name}.property.Password=${db.pwd}" />
+  </antcall>
+</target>
+
+<target name="set-pointbase-driver-connpool-props">
+  <antcall target="asadmin-common-ignore-fail">
+    <param name="admin.command" value="set" />
+    <param name="operand.props"
+	    value="${resources.dottedname.prefix}.jdbc-connection-pool.${jdbc.conpool.name}.property.URL=${db.url};user=${db.user};password=${db.pwd}"/>
+  </antcall>
+</target>
+
+<target name="set-derby-connpool-props">
+    <exec executable="${ASADMIN}" failonerror="false">
+      <arg line="set"/>
+      <arg line="${as.props}"/>
+      <arg line="domain.resources.jdbc-connection-pool.${jdbc.conpool.name}.property.User=${db.user}"/>
+    </exec>
+    <exec executable="${ASADMIN}" failonerror="false">
+      <arg line="set"/>
+      <arg line="${as.props}"/>
+      <arg line="domain.resources.jdbc-connection-pool.${jdbc.conpool.name}.property.Password=${db.pwd}"/>
+    </exec>
+    <exec executable="${ASADMIN}" failonerror="false">
+      <arg line="set"/>
+      <arg line="${as.props}"/>
+      <arg line="domain.resources.jdbc-connection-pool.${jdbc.conpool.name}.property.driverType=4"/>
+    </exec>
+    <exec executable="${ASADMIN}" failonerror="false">
+      <arg line="set"/>
+      <arg line="${as.props}"/>
+      <arg line="domain.resources.jdbc-connection-pool.${jdbc.conpool.name}.property.portNumber=${db.port}"/>
+    </exec>
+    <exec executable="${ASADMIN}" failonerror="false">
+      <arg line="set"/>
+      <arg line="${as.props}"/>
+      <arg line="domain.resources.jdbc-connection-pool.${jdbc.conpool.name}.property.dataBaseName=${db.name}"/>
+    </exec>
+    <exec executable="${ASADMIN}" failonerror="false">
+      <arg line="set"/>
+      <arg line="${as.props}"/>
+      <arg line="domain.resources.jdbc-connection-pool.${jdbc.conpool.name}.property.retrieveMessagesFromServerOnGetMessage=true"/>
+    </exec>
+    <exec executable="${ASADMIN}" failonerror="false">
+      <arg line="set"/>
+      <arg line="${as.props}"/>
+      <arg line="domain.resources.jdbc-connection-pool.${jdbc.conpool.name}.property.create=true"/>
+    </exec>
+    <exec executable="${ASADMIN}" failonerror="false">
+      <arg line="set"/>
+      <arg line="${as.props}"/>
+      <arg line="domain.resources.jdbc-connection-pool.${jdbc.conpool.name}.property.serverName=${db.host}"/>
+    </exec>
+</target>
+
+<target name="set-derby-driver-connpool-props">
+  <antcall target="asadmin-common-ignore-fail">
+    <param name="admin.command" value="set" />
+    <param name="operand.props"
+	    value="${resources.dottedname.prefix}.jdbc-connection-pool.${jdbc.conpool.name}.property.URL=${db.url};user=${db.user};password=${db.pwd}"/>
+  </antcall>
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to delete JDBC connection-pool  -->
+<!-- ================================================================ -->
+<target name="delete-jdbc-connpool-common" depends="init-common">
+<echo message="asadmin delete-jdbc-connection-pool ${as.props} --cascade=true --target ${appserver.instance.name} ${jdbc.conpool.name}"/>
+<exec executable="${ASADMIN}" failonerror="false">
+        <arg line="delete-jdbc-connection-pool"/>
+        <arg line="${as.props}"/>
+        <arg line="--cascade=true"/>
+        <arg line="--target ${appserver.instance.name}"/>
+        <arg line="${jdbc.conpool.name}"/>
+    </exec>
+    <echo message="cmd executed for ${appserver.instance.name}"/>  
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to create JDBC resource  -->
+<!-- ================================================================ -->
+<target name="create-jdbc-resource-common" depends="init-common">
+<echo message="Creating jdbc resource pool ${jdbc.resource.name}" 
+    level="verbose"/>
+  <echo message="asadmin create-jdbc-resource ${as.props} --connectionpoolid ${jdbc.conpool.name} --target ${appserver.instance.name} ${jdbc.resource.name}"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+        <arg line="create-jdbc-resource"/>
+        <arg line="${as.props}"/>
+        <arg line="--connectionpoolid ${jdbc.conpool.name}"/>
+        <arg line="--target ${appserver.instance.name}"/>
+        <arg line="${jdbc.resource.name}"/>
+    </exec>
+    <echo message="cmd executed for ${appserver.instance.name}"/>
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to delete JDBC resource  -->
+<!-- ================================================================ -->
+<target name="delete-jdbc-resource-common" depends="init-common">
+<echo message="asadmin delete-jdbc-resource ${as.props} --target ${appserver.instance.name} ${jdbc.resource.name}"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+        <arg line="delete-jdbc-resource"/>
+        <arg line="${as.props}"/>
+        <arg line="--target ${appserver.instance.name}"/>
+        <arg line="${jdbc.resource.name}"/>
+    </exec>
+    <echo message="cmd executed for ${appserver.instance.name}"/>
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to deploy JDBC resources  -->
+<!-- ================================================================ -->
+<target name="deploy-jdbc-common" depends="init-common">
+    <antcall target="create-jdbc-connpool-common" />
+    <antcall target="create-jdbc-resource-common" />
+</target>
+
+<target name="deploy-jdbc-driver-common" depends="init-common">
+    <antcall target="create-jdbc-driver-connpool-common" />
+    <antcall target="create-jdbc-resource-common" />
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to undeploy JDBC resources  -->
+<!-- ================================================================ -->
+<target name="undeploy-jdbc-common" depends="init-common">
+  <antcall target="delete-jdbc-resource-common" />
+  <antcall target="delete-jdbc-connpool-common" />
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to create persistence resource  -->
+<!-- ================================================================ -->
+<target name="create-persistence-resource-common" depends="init-common">
+<echo message="Creating pm resource at ${pm.resource.name}" 
+    level="verbose"/>
+    <echo message="asadmin create-persistence-resource ${as.props} --target ${appserver.instance.name} ${pm.resource.name}"/>
+    <exec executable="${ASADMIN}" failonerror="false">
+        <arg line="create-persistence-resource"/>
+        <arg line="${as.props}"/>
+        <arg line="--port ${admin.port}"/>
+        <arg line="--target ${appserver.instance.name}"/>
+        <arg line="${pm.resource.name}"/>
+    </exec>
+    <echo message="Created ${pm.resource.name} --target ${appserver.instance.name}"/> 
+  <antcall target="asadmin-common-ignore-fail">
+    <param name="admin.command" value="set"/>
+    <param name="operand.props"
+      value="${resources.dottedname.prefix}.persistence-manager-factory-resource.${pm.resource.name}.factory_class=${pm.factory.class}"/>
+  </antcall>
+  <antcall target="asadmin-common-ignore-fail">
+    <param name="admin.command" value="set" />
+    <param name="operand.props"
+      value="${resources.dottedname.prefix}.persistence-manager-factory-resource.${pm.resource.name}.jdbc_resource_jndi_name=${jdbc.resource.name}" />
+  </antcall>
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to delete persistence resource  -->
+<!-- ================================================================ -->
+<target name="delete-persistence-resource-common" depends="init-common">
+  <antcall target="asadmin-common-ignore-fail">
+    <param name="admin.command"
+      value="delete-persistence-resource 
+        --target ${appserver.instance.name}" />
+    <param name="operand.props" value="${pm.resource.name}" />
+  </antcall>
+</target>
+
+<target name="execute-sql-common" depends="init-common">
+<echo message="Executing sql statement at ${basedir} from ${sql.file}" 
+    level="verbose"/>
+  <sql
+    driver="${db.driver}"
+    url="${db.url}"
+    userid="${db.user}"
+    password="${db.pwd}"
+    src="${sql.file}"
+    onerror="continue"
+    print="yes"
+    classpath="${s1astest.classpath}"/>
+</target>
+
+
+<target name="execute-ejb-sql-common" depends="init-common">
+<echo message="Executing sql statement at ${basedir} from ${sql.file}" 
+    level="verbose"/>
+  <sql
+    driver="${db.driver}"
+    url="jdbc:derby://localhost:1527/sun-appserv-samples;create=true;"
+    userid="APP"
+    password="APP"
+    src="${sql.file}"
+    onerror="continue"
+    print="yes"
+    output="${build.classes.dir}/setupDBTables.out"
+    classpath="${s1astest.classpath}" />
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to create/delete javamail resources  -->
+<!-- 
+    Properties required: 
+    mailhost
+    fromaddress
+    debug
+    enabled
+    javamail.resource.name (e.g. mail/MySession)
+-->
+<!-- ================================================================ -->
+<target name="create-javamail-resource-common">
+  <exec executable="${ASADMIN}">
+    <arg line="create-javamail-resource"/>
+    <arg line="--port ${admin.port}"/>
+    <arg line="--mailhost ${mailhost}"/>
+    <arg line="--mailuser ${mailuser}"/>
+    <arg line="--fromaddress ${fromaddress}"/>
+    <arg line="--storeprotocol=imap"/>
+    <arg line="--storeprotocolclass=com.sun.mail.imap.IMAPStore"/>
+    <arg line="--transprotocol=smtp"/>
+    <arg line="--transprotocolclass=com.sun.mail.smtp.SMTPTransport"/>
+    <arg line="--debug=${debug}"/>
+    <arg line="--enabled=${enabled}"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="${as.props}"/>
+    <arg line="${javamail.resource.name}"/>
+  </exec>
+</target>
+
+<target name="delete-javamail-resource-common">
+  <exec executable="${ASADMIN}">
+    <arg line="delete-javamail-resource"/>
+    <arg line="--port ${admin.port}"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="${as.props}"/>
+    <arg line="${javamail.resource.name}"/>
+  </exec>
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to create database table through SQL file  -->
+<!-- ================================================================ -->
+<target name="create-sql-common" depends="init-common">
+<echo message="creating tables from ${basedir}/sql/${db.create}" 
+    level="verbose"/>
+  <sql
+    driver="${db.driver}"
+    url="${db.url}"
+    userid="${db.user}"
+    password="${db.pwd}"
+    src="sql/${db.create}"
+    onerror="continue"
+    print="yes"
+    output="${build.classes.dir}/setupDBTables.out"
+    classpath="${s1astest.classpath}"
+  />
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to delete database table through SQL file  -->
+<!-- ================================================================ -->
+<target name="delete-sql-common" depends="init-common">
+<echo message="dropping tables from ${basedir}/sql/${db.drop}" 
+    level="verbose"/>
+  <sql
+    driver="${db.driver}"
+    url="${db.url}"
+    userid="${db.user}"
+    password="${db.pwd}"
+    src="sql/${db.drop}"
+    onerror="continue"
+    print="yes"
+    output="${build.classes.dir}/setupDBTables.out"
+    classpath="${s1astest.classpath}"
+  />
+</target>
+
+<!-- ======================================================= -->
+<!-- Taget to create JMS Connection      -->
+<!-- ======================================================= -->
+<target name="create-jms-connection-common" depends="init-common">
+  <echo message="Creating JMS connection factory with name ${jms.factory.name}" 
+      level="verbose"/>
+  <exec executable="${ASADMIN}">
+    <arg line="create-jms-resource "/>
+    <arg line="--restype ${jms.factory.type}"/>    
+    <arg line="${as.props}"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="${jms.factory.name}" />
+  </exec>
+</target>
+
+<!-- ======================================================= -->
+<!-- Taget to delete JMS Connection      -->
+<!-- ======================================================= -->
+<target name="delete-jms-connection-common" depends="init-common">
+  <echo message="Delete JMS connection factory with name ${jms.factory.name}" 
+      level="verbose"/>
+  <exec executable="${ASADMIN}">
+    <arg line="delete-jms-resource "/>    
+    <arg line="${as.props}"/>
+    <arg line="--target ${appserver.instance.name}"/>    
+    <arg line="${jms.factory.name}"/>
+  </exec>
+</target>
+
+<!-- JMS: create/delete Destination Resource Targets -->
+<target name="create-jms-resource-common" depends="init-common">
+  <echo message="Creating JMS resource with name ${jms.resource.name}" 
+      level="verbose"/>
+
+  <exec executable="${ASADMIN}">
+    <arg line="create-jmsdest --desttype ${dest.type} "/>    
+    <arg line="${as.props}"/>
+    <arg line="${dest.name}"/>
+  </exec>
+
+  <exec executable="${ASADMIN}">
+    <arg line="create-jms-resource "/>
+    <arg line="--restype ${jms.resource.type}"/>
+    <arg line="--property imqDestinationName=${dest.name}"/>
+    <arg line="--target ${appserver.instance.name}"/>    
+    <arg line="${as.props}"/>
+    <arg line="${jms.resource.name}"/>
+  </exec>
+</target>
+
+<target name="delete-jms-resource-common" depends="init-common">
+  <echo message="Delete JMS resource with name ${jms.resource.name}" 
+      level="verbose"/>
+
+  <exec executable="${ASADMIN}">
+    <arg line="delete-jms-resource "/>
+    <arg line="--target ${appserver.instance.name}"/>    
+    <arg line="${as.props} ${jms.resource.name}"/>
+  </exec>
+
+  <exec executable="${ASADMIN}">
+    <arg line="delete-jmsdest --desttype ${dest.type} "/>    
+    <arg line="${as.props} ${dest.name}"/>
+  </exec>
+</target>
+
+<!-- deploy/undeploy JMS resources  -->
+<target name="deploy-jms-common" depends="init-common">
+  <antcall target="create-jms-connection-common" />
+  <antcall target="create-jms-resource-common" />
+</target>
+
+<target name="undeploy-jms-common" depends="init-common">
+  <antcall target="delete-jms-connection-common" />
+  <antcall target="delete-jms-resource-common" />
+</target>
+
+
+<!-- run StaticCheck on the ear file -->
+<target name="staticCheck-common" depends="init-common">
+    <echo message="Running StaticCheck -b on
+        ear file ${assemble.dir}/${appname}App.ear " level="verbose"/>
+    <antcall target="verifier-common">
+        <param name="static-check.command" value=" -b "/>
+        <param name="operand.props" value="${assemble.dir}/${appname}App.ear"/>
+    </antcall>
+    <echo message="Validate the static check results" level="verbose"/>
+</target>
+
+<target name="deploy-dir" depends="init-common">
+    <echo message="Deploying files: ${assemble.dir}" level="verbose"/>
+        <exec executable="${ASADMIN}" failonerror="false">
+            <arg line="deploy"/>
+            <arg line="${as.props}"/>
+            <arg line="--contextroot ${contextroot}"/>
+            <arg line="--target ${appserver.instance.name}"/>
+            <arg line="--name ${appname}-web"/>
+            <arg line="${assemble.dir}"/>
+        </exec>
+</target>
+
+<!-- deploy the applications in AppServ  -->
+<target name="deploy-common" depends="init-common">
+    <antcall target="deploy-common-pe"/>
+    <antcall target="deploy-common-ee"/>
+</target>       
+
+<target name="deploy-verify-common" depends="init-common">
+    <antcall target="deploy-verify-common-pe"/>
+    <antcall target="deploy-verify-common-ee"/>
+</target>       
+
+<target name="deploy-common-pe" depends="init-common" unless="ee">
+  <property name="deployed.app" value="${assemble.dir}/${appname}App.ear"/>
+   <property name="extra-params" value=""/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="deploy"/>
+    <arg line="${as.props}"/>    
+    <arg line="${extra-params}"/>    
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="--retrieve ${assemble.dir}"/>
+    <arg line="--libraries ${libraries}"/>
+<!-- deployed.app defaults to ${assemble.dir}/${appname}App.ear defined in properties.xml-->
+    <arg line="${deployed.app}"/>
+  </exec>
+  <echo message="Deployment on target server ${appserver.instance.name} successful"/>
+   </target>
+
+<target name="deploy-common-ee" depends="init-common" if="ee">      
+  <echo message="Deploying in EE..."/>
+  <property name="deployed.app" value="${assemble.dir}/${appname}App.ear"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="deploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="--retrieve ${assemble.dir}"/>
+    <arg line="--libraries ${libraries}"/>
+<!-- deployed.app defaults to ${assemble.dir}/${appname}App.ear defined in properties.xml-->
+    <arg line="${deployed.app}"/>
+  </exec>
+  <echo message="Deployment on target server ${appserver.instance.name} successful"/>
+</target>
+
+<target name="deploy-verify-common-pe" depends="init-common" unless="ee">
+  <property name="deployed.app" value="${assemble.dir}/${appname}App.ear"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="deploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--verify=true"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="--retrieve ${assemble.dir}"/>
+    <arg line="${deployed.app}"/>
+  </exec>
+  <echo message="Deployment on target server ${appserver.instance.name} successful"/>
+   </target>
+
+<target name="deploy-verify-common-ee" depends="init-common" if="ee">
+  <echo message="Deploying in EE..."/>
+  <property name="deployed.app" value="${assemble.dir}/${appname}App.ear"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="deploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--verify=true"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="--retrieve ${assemble.dir}"/>
+    <arg line="${deployed.app}"/>
+  </exec>
+  <echo message="Deployment on target server ${appserver.instance.name} successful"/>
+</target>
+
+<!-- deploy the web application in AppServ  -->
+<target name="deploy-jsp-common" depends="init-common">
+  <echo message="Deploying ${deploy.file} from ${basedir}." level="verbose"/>
+  <property name="precompilejsp" value="true"/>
+  <exec executable="${ASADMIN}" failonerror="true">
+    <arg line="deploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--precompilejsp=${precompilejsp}"/>
+    <arg line="--upload true"/>
+    <arg line="--retrieve ${assemble.dir}"/>
+    <arg line="--target ${appserver.instance.name}"/>	
+  </exec>
+</target>    
+
+<target name="deploy-war-name" depends="init-common">
+  <echo message="Deploying ${warname} from ${basedir}."
+      level="verbose"/>
+  <property name="force" value="false"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="deploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--contextroot ${contextroot}"/>
+    <arg line="--precompilejsp=${precompilejsp}"/>
+    <arg line="--force=${force}"/>
+    <arg line="--upload=true"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="--libraries ${libraries}"/>
+    <arg line="${warname}.war"/>
+  </exec>
+</target>
+
+<!-- deploy the standalone war in AppServ  -->
+<target name="deploy-war-common">
+<antcall target ="deploy-war-commonpe"/>
+<antcall target ="deploy-war-commonee"/>
+</target>
+
+<target name="deploy-wab-common">
+<antcall target ="deploy-wab-commonpe"/>
+</target>
+
+<target name="deploy-wab-commonpe" depends="init-common" unless="ee">
+  <echo message="Deploying WAB ${assemble.dir}/${appname}-web.war from ${basedir}." 
+      level="verbose"/>
+  <property name="precompilejsp" value="true"/>
+  <property name="force" value="false"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="deploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--precompilejsp=${precompilejsp}"/>
+    <arg line="--force=${force}"/>
+    <arg line="--upload=true"/>
+    <arg line="--target ${appserver.instance.name}"/>	
+    <arg line="--libraries ${libraries}"/>
+    <arg line="--type=osgi"/>
+    <arg line="${assemble.dir}/${appname}-web.war"/>
+  </exec>
+</target> 
+
+
+
+<target name="deploy-war-commonpe" depends="init-common" unless="ee">
+  <echo message="Deploying ${assemble.dir}/${appname}-web.war from ${basedir}." 
+      level="verbose"/>
+  <property name="precompilejsp" value="true"/>
+  <property name="force" value="false"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="deploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--contextroot ${contextroot}"/>
+    <arg line="--precompilejsp=${precompilejsp}"/>
+    <arg line="--force=${force}"/>
+    <arg line="--upload=true"/>
+    <arg line="--target ${appserver.instance.name}"/>	
+    <arg line="--libraries ${libraries}"/>
+    <arg line="${assemble.dir}/${appname}-web.war"/>
+  </exec>
+</target> 
+
+<target name="deploy-war-commonee" if="ee">
+  <property name="precompilejsp" value="true"/>
+  <property name="force" value="false"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="deploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--type web"/>
+    <arg line="--contextroot ${contextroot}"/>
+    <arg line="--precompilejsp=${precompilejsp}"/>
+    <arg line="--force=${force}"/>
+    <arg line="--upload=true"/>
+    <arg line="--target ${appserver.instance.name}"/>	
+    <arg line="--libraries ${libraries}"/>
+    <arg line="${assemble.dir}/${appname}-web.war"/>
+  </exec>
+</target>
+
+<!-- deploy the standalone war in AppServ without specifying any
+     contextroot argument, so that the context-root specified in
+     sun-web.xml takes effect
+-->
+<target name="deploy-war-no-context-root" depends="init-common">
+    <antcall target ="deploy-war-no-context-root-pe"/>
+    <antcall target ="deploy-war-no-context-root-ee"/>
+</target>
+
+<target name="deploy-war-no-context-root-pe" unless="ee">
+    <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="deploy"/>
+    <arg line="--user ${admin.user}"/>
+    <arg line="--passwordfile ${admin.password.file}"/>
+    <arg line="--host ${admin.host}"/>
+    <arg line="--port ${admin.port}"/>
+    <arg line="--upload=true"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="--libraries ${libraries}"/>
+    <arg line="${assemble.dir}/${appname}-web.war"/>
+    </exec>
+</target>
+
+<target name="deploy-war-no-context-root-ee" if="ee">
+    <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="deploy"/>
+    <arg line="--user ${admin.user}"/>
+    <arg line="--passwordfile ${admin.password.file}"/>
+    <arg line="--host ${admin.host}"/>
+    <arg line="--port ${admin.port}"/>
+    <arg line="--type web"/>
+    <arg line="--upload=true"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="--libraries ${libraries}"/>
+    <arg line="${assemble.dir}/${appname}-web.war"/>
+    </exec>
+</target>
+
+<!-- deploy the standalone jar in AppServ  -->
+<target name="deploy-jar-common" depends="init-common">
+  <exec executable="${ASADMIN}" failonerror="true">
+    <arg line="deploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--upload=true"/>
+    <arg line="--target ${appserver.instance.name}"/>	
+    <arg line="${assemble.dir}/${appname}-ejb.jar"/>
+  </exec>
+</target> 
+
+<!-- deploy the standalone jar in AppServ  -->
+<target name="deploy-client-common" depends="init-common">
+  <exec executable="${ASADMIN}" failonerror="true">
+    <arg line="deploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--upload=true"/>
+    <arg line="--retrieve ${assemble.dir}"/>    
+    <arg line="--target ${appserver.instance.name}"/>	
+    <arg line="${assemble.dir}/${appname}-client.jar"/>
+  </exec>
+</target> 
+
+<target name="undeploy-war-name" depends="init-common">
+  <property name="deployedapp.name" value="${warname}"/>
+  <property name="extra-params" value=""/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="undeploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="${extra-params}"/>
+<!-- deployedapp.name defaults to {appname}App.declared in properties.xml-->
+    <arg line="${deployedapp.name}"/>
+  </exec>
+</target>
+
+<!--  undeploy the applications in AppServ  -->
+<target name="undeploy-common" depends="init-common">
+  <property name="deployedapp.name" value="${appname}App"/>
+  <property name="extra-params" value=""/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="undeploy"/>
+    <arg line="${as.props}"/>
+<!--    
+<arg line=type ${apptype}/> 
+-->
+    <arg line="--target ${appserver.instance.name}"/>	
+    <arg line="${extra-params}"/>
+<!-- deployedapp.name defaults to {appname}App.declared in properties.xml-->
+    <arg line="${deployedapp.name}"/>	
+  </exec>
+</target>
+
+<!--  undeploy the standalone war in AppServ  -->
+<target name="undeploy-war-common" depends="init-common">
+    <echo message="Undeploying warfile ${appname}-web from 
+        ${assemble.dir}/${appname}-web.war from ${basedir}." level="verbose"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="undeploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--target ${appserver.instance.name}"/>	
+    <arg line="${appname}-web"/>
+  </exec>
+</target> 
+
+
+<!--  undeploy the standalone war in AppServ  -->
+<target name="undeploy-jar-common" depends="init-common">
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="undeploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--target ${appserver.instance.name}"/>	
+    <arg line="${appname}-ejb"/>
+  </exec>
+</target>
+
+<!--  undeploy the standalone client in AppServ  -->
+<target name="undeploy-client-common" depends="init-common">
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="undeploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--target ${appserver.instance.name}"/>	
+    <arg line="${appname}-client"/>
+  </exec>
+</target>  
+
+
+<!-- run appclient in AppServ  -->
+<target name="runclient-common" depends="init-common">
+  <echo message="appclient -client ${assemble.dir}/${appname}AppClient.jar -name ${appname}Client -textauth -user j2ee -password j2ee -xml ${admin.domain.dir}/${admin.domain}/config/glassfish-acc.xml ${appclient.application.args}"/>
+  <exec executable="${APPCLIENT}" failonerror="false">
+    <!-- set APPCPATH to include reporter.jar so that all app clients
+         don't have to package the test framework in their apps -->
+    <env key="APPCPATH" file="${env.APS_HOME}/lib/reporter.jar"/>
+    <arg line="-client ${assemble.dir}/${appname}AppClient.jar"/>
+    <arg line="-name ${appname}Client"/>
+    <arg line="-textauth"/>
+    <arg line="-user j2ee"/>
+    <arg line="-password j2ee"/>
+    <arg line="-xml ${admin.domain.dir}/${admin.domain}/config/glassfish-acc.xml"/>
+    <arg line="${appclient.application.args}"/>
+  </exec>
+
+<!-- confirming report generation... -->
+    <antcall target="checkReporting-common">
+        <param name="test.name" value="${appname}"/>
+        <param name="test.description" value="${test.description}"/>
+        <param name="test.count" value="${test.count}"/>
+    </antcall>
+</target>
+
+<!-- run web client in AppServ  -->
+<target name="runwebclient-common" depends="init-common">
+  <echo message="Running Web Test from ${basedir}" level="verbose"/>
+  <echo message="http host: ${http.host}" level="verbose"/>
+  <echo message="http port: ${http.port}" level="verbose"/>
+  <java
+    fork="on" failonerror="false"
+    classpath="${env.APS_HOME}/lib/webtest.jar:${s1astest.classpath}"
+    classname="com.sun.ejte.ccl.webrunner.webtest.WebTest">
+    <arg value="script.txt"/>
+    <arg value="${http.host}"/>
+    <arg value="${http.port}"/>
+    <arg value="appserv-tests"/>
+    <arg value="${testsuite.id}"/>
+  </java>
+</target>
+  
+<!-- prepare Pointbase servers -->
+<target name="preparePB" depends="init-common">
+  <echo message="Starting Pointbase servers" level="verbose"/>
+  <copy file="${env.APS_HOME}/lib/pointbase.ini" 
+      tofile="${db.dir}/pointbase.ini"/>
+  <replace file="${db.dir}/pointbase.ini" token="@@@" value="${db.dir}"/>
+</target>
+
+<!-- start/stop Pointbase servers -->
+<target name="startPB" depends="preparePB">
+    <java classname="com.pointbase.net.netServer"
+        classpath="${db.classpath}" fork="true" spawn="true">
+      <arg line="/port:9092"/>
+      <arg line="/pointbase.ini=${db.dir}/pointbase.ini"/>
+      <arg line="/noconsole"/>
+    </java>
+    <java classname="com.pointbase.net.netServer"
+        classpath="${db.classpath}" fork="true" spawn="true">
+      <arg line="/port:9093"/>
+      <arg line="/pointbase.ini=${db.dir}/pointbase.ini"/>
+      <arg line="/noconsole"/>
+    </java>
+</target>
+
+<!-- target name="startPB" depends="preparePB">
+  <parallel>
+    <java classname="com.pointbase.net.netServer" 
+        classpath="${db.classpath}" failonerror="false" fork="true">
+      <arg line="/port:9092"/>
+      <arg line="/pointbase.ini=${db.dir}/pointbase.ini"/>
+    </java>
+    <java classname="com.pointbase.net.netServer" 
+        classpath="${db.classpath}" failonerror="true" fork="true">
+      <arg line="/port:9093"/>
+      <arg line="/pointbase.ini=${db.dir}/pointbase.ini"/>
+    </java>
+  </parallel>
+</target -->
+
+<!--  start Derby Database -->
+<target name="startDerby">
+  <condition property="darwin">
+	<os name="Mac OS X"/>
+  </condition>
+  <antcall target="startDerbyNonMac"/>
+  <antcall target="startDerbyMac"/>
+</target>
+
+<target name="startDerbyNonMac" depends="init-common" unless="darwin">
+        <echo message="StaRTing Derby DB servers in the Network Mode"/>
+  <parallel>
+    <java classname="org.apache.derby.drda.NetworkServerControl"
+      classpath="${db.classpath}" fork="true" spawn="true">
+      <arg line="-h localhost -p 1527 start"/>
+    </java>
+    <java classname="org.apache.derby.drda.NetworkServerControl"
+      classpath="${db.classpath}" fork="true" spawn="true">
+      <arg line="-h localhost -p 1528 start"/>
+    </java>
+  </parallel>     
+</target>
+
+<target name="startDerbyMac" depends="init-common" if="darwin">
+        <echo message="StaRTing Derby DB servers in the Network Mode"/>
+  <parallel>
+    <java classname="org.apache.derby.drda.NetworkServerControl"
+      classpath="${db.classpath}" fork="true" spawn="true">
+       <sysproperty key="derby.storage.fileSyncTransactionLog" value="true"/>
+      <arg line="-h localhost -p 1527 start"/>
+    </java>
+    <java classname="org.apache.derby.drda.NetworkServerControl"
+      classpath="${db.classpath}" fork="true" spawn="true">
+       <sysproperty key="derby.storage.fileSyncTransactionLog" value="true"/>     
+      <arg line="-h localhost -p 1528 start"/>
+    </java>
+  </parallel>
+</target>
+
+<!--  start Derby Database -->
+<target name="stopDerby" depends="init-common">
+        <echo message="Stopping Derby DB servers ..."/>
+  <parallel>
+    <java classname="org.apache.derby.drda.NetworkServerControl"
+      classpath="${db.classpath}" failonerror="true" fork="true">
+      <arg line="-h localhost -p 1527 shutdown"/>
+    </java>
+    <java classname="org.apache.derby.drda.NetworkServerControl"
+      classpath="${db.classpath}" failonerror="true" fork="true">
+      <arg line="-h localhost -p 1528 shutdown"/>
+    </java>
+  </parallel>
+</target>
+
+<target name="pb">
+  <echo message="So you are using pointbase ... !"/>
+  <property file="${env.APS_HOME}/config/pointbase.properties"/>
+</target>
+
+<!-- setup IMQ for RI Build -->
+<target name="setup-mq-common" depends="init-common">
+    <echo message="Executing Datastore setup for S1MQ. Required only for RI" 
+        level="verbose"/>
+    <echo message="${IMQDBMGR} -javahome ${java.home} 
+        -b ${admin.domain}_${appserver.instance.name} create all" 
+        level="verbose"/>
+  <exec executable="${IMQDBMGR}" failonerror="true">
+     <arg line="-javahome ${java.home} -b ${admin.domain}_${appserver.instance.name} create all" />
+  </exec>
+</target>
+
+<target name="import-wsdl" depends="init-common">
+    <mkdir dir="${build.classes.dir}"/>
+    <exec executable="${WSCOMPILE}">
+<!--
+        <arg line="-classpath ${s1astest.classpath}"/>
+-->
+        <arg line="-classpath ${build.classes.dir}"/>
+        <arg line="-import"/>
+        <arg line="-source 1.1.2"/>
+        <arg line="-keep"/>
+        <arg line="-d "/>
+        <arg path="${build.classes.dir}"/>
+        <!--
+        <arg line="-s "/>
+        <arg path="${basedir}/gensource"/>
+        -->
+        <arg line="-mapping ${build.classes.dir}/${mapping.file}"/>
+        <arg line="${config-wsdl.file}"/>
+    </exec>
+</target>
+
+<!-- Confirm Report Generation -->
+
+<target name="checkReporting-common">
+    <available file="RepRunConf.txt" type="file" property="isReported"/>
+    <antcall target="confirmReportPresent-common"/>
+    <antcall target="confirmMissingReport-common"/>
+</target>
+
+<target name="confirmReportPresent-common" if="isReported">
+    <echo message="file RepRunConf.txt is present."/>
+    <echo message="Test seems to be reported fine"/>
+    <delete file="RepRunConf.txt"/>
+</target>
+
+<target name="confirmMissingReport-common" unless="isReported">
+    <echo message="file RepRunConf.txt is missing!!!"/>
+    <echo message="Test does not seem to have been reported"/>
+    <echo message="Adding status 'did not run' into report..."/>
+    <java classname="com.sun.ejte.ccl.reporter.ReporterClient">
+        <classpath>
+            <pathelement location="${env.APS_HOME}/lib/reporter.jar"/>
+            <pathelement location="."/>
+        </classpath>
+        <arg value="${test.name}"/>
+        <arg value="${test.description}"/>
+        <arg value="${test.count}"/>
+    </java>
+    <delete file="RepRunConf.txt"/>
+</target>
+
+
+<!-- usage  -->
+<target name="usage-common">
+    <echo>         
+        ant clean           Remove all classes files
+        ant build           Build the application
+        ant deploy          Deploy the ear files to S1AS
+        ant run	            Run the application
+        ant undeploy        Undeploy the ear files from S1AS
+        ant usage           Display this message            
+    </echo>
+</target>
+
+
+<!-- EE Targets 8.1 -->
+<!--Added Feb 5th 2004 by Deepa Singh -->
+<target name="ee" depends="ee-common">
+    <echo message="So you are using Enterprise Edition"/>
+    <property name="ee" value="Enterprise Edition"/>
+    <property file="${env.APS_HOME}/eeconfig/ee-config.properties"/>
+    <loadfile property="target-server-port" srcFile="${admin.domain.dir}/${admin.domain}/config/glassfish-acc.xml"/>
+    <condition property="orbPortSet" value="true">
+        <contains string="${target-server-port}" substring="${orb.port}"/>
+    </condition>
+    <antcall target="change-orb-port"/>
+</target>
+
+<target name="change-orb-port" unless="orbPortSet">
+    <echo message="changing orb port from the default [3700] to ${orb.port}"/>
+    <replace file="${admin.domain.dir}/${admin.domain}/config/glassfish-acc.xml" token="3700" value="${orb.port}"/>
+</target>
+
+
+<target name="restart-instance">
+    <echo message="Restarting remote server instance,until this gets fixed"/>
+	<exec executable="${ASADMIN}" failonerror="false">
+        <arg line="stop-instance"/>
+        <arg line="${as.props}"/>
+        <arg line="${appserver.instance.name}"/>
+    </exec>
+    <sleep seconds="30"/>
+	<exec executable="${ASADMIN}" failonerror="false">
+        <arg line="start-instance"/>
+        <arg line="${as.props}"/>
+        <arg line="${appserver.instance.name}"/>
+    </exec>
+</target>
+
+<target name="testTimer" depends="init-common">
+
+<echo message="creating timer table from ${env.APS_HOME}/lib/ejbtimer_${db.type}.sql"/>
+    <sql
+    driver="${db.driver}"
+    url="${db.url}"
+    userid="${db.user}"
+    password="${db.pwd}"
+    src="${env.APS_HOME}/lib/ejbtimer_${db.type}.sql"
+    onerror="continue"
+    print="yes"
+    classpath="${s1astest.classpath}"/>
+
+</target>
+
+<target name="setupTimer" depends="init-common" if="ee">
+	<exec executable="${ASADMIN}" failonerror="false">
+        <arg line="create-resource-ref"/>
+        <arg line="${as.props}"/>
+        <arg line="--target server"/>
+        <arg line="${jdbc.resource.name}"/>
+    </exec>
+    <antcall target="asadmin-common-ignore-fail">
+        <param name="admin.command" value="set" />
+        <param name="operand.props"
+          value="${appserver.instance.name}-config.ejb-container.ejb-timer-service.timer-datasource=${jdbc.resource.name}"/>
+    </antcall>
+
+    <echo message="creating timer table from ${env.APS_HOME}/lib/ejbtimer_{db.type}.sql"/>
+    <sql
+        driver="${db.driver}"
+        url="${db.url}"
+        userid="${db.user}"
+        password="${db.pwd}"
+        src="${env.APS_HOME}/lib/ejbtimer_${db.type}.sql"
+        onerror="continue"
+        print="yes"
+        classpath="${s1astest.classpath}"/>
+
+    <antcall target="restart-instance"/>
+</target>
+
+<target name="unsetupTimer" depends="init-common" if="ee">
+	<exec executable="${ASADMIN}" failonerror="false">
+        <arg line="delete-resource-ref"/>
+        <arg line="${as.props}"/>
+        <arg line="--target server"/>
+        <arg line="${jdbc.resource.name}"/>
+    </exec>
+	<exec executable="${ASADMIN}" failonerror="false">
+        <arg line="unset"/>
+        <arg line="${appserver.instance.name}-config.ejb-container.ejb-timer-service.timer-datasource"/>
+    </exec>
+
+    <echo message="dropping timer table from ${env.APS_HOME}/lib/ejbtimer_${db.type}_drop.sql"/>
+    <sql
+        driver="${db.driver}"
+        url="${db.url}"
+        userid="${db.user}"
+        password="${db.pwd}"
+        src="${env.APS_HOME}/lib/ejbtimer_${db.type}_drop.sql"
+        onerror="continue"
+        print="yes"
+        classpath="${s1astest.classpath}"/>
+</target>
+
+<target name="prepare-truststore-common" depends="init-common">
+    <property name="truststore.db.file" location="${build.base.dir}/cacerts.jks"/>
+    <property name="cert.rfc.file" location="${build.base.dir}/${cert.nickname}.rfc"/>
+
+    <delete quiet="true" file="${truststore.db.file}"/>
+    <delete quiet="true" file="${cert.rfc.file}"/>
+
+    <!--
+      Determine if we need to use the certutil or the keytool command to
+      access the certificate keystore
+    -->
+    <property name="certutil.db.dir" location="${admin.domain.dir}/${admin.domain}/config"/>
+    <condition property="use.certutil">
+        <and>
+            <or>
+                <available file="${env.S1AS_HOME}/lib/certutil"/>
+                <available file="${env.S1AS_HOME}/lib/certutil.exe"/>
+            </or>
+            <available file="${certutil.db.dir}/cert8.db"/>
+            <available file="${certutil.db.dir}/key3.db"/>
+            <available file="${certutil.db.dir}/secmod.db"/>
+        </and>
+    </condition>
+    <antcall target="prepare-truststore-certutil-common"/>
+    <antcall target="prepare-truststore-keytool-common"/>
+</target>
+
+<target name="prepare-truststore-certutil-common" depends="init-common" if="use.certutil">
+    <exec executable="${env.S1AS_HOME}/lib/certutil" failonerror="true" output="${cert.rfc.file}">
+        <!--
+          LD_LIBRARY_PATH is needed on Unix platforms and should have no
+          effect on Windows
+        -->
+        <env key="LD_LIBRARY_PATH" path="${env.S1AS_HOME}/lib"/>
+        <arg line="-L -n '${cert.nickname}' -a"/>
+        <arg value="-d"/>
+        <arg file="${certutil.db.dir}"/>
+    </exec>
+    <exec executable="${java.home}/bin/keytool" failonerror="true">
+        <arg line="-import -trustcacerts -alias '${cert.nickname}' -storepass '${ssl.password}' -noprompt"/>
+        <arg value="-file"/>
+        <arg file="${cert.rfc.file}"/>
+        <arg value="-keystore"/>
+        <arg file="${truststore.db.file}"/>
+    </exec>
+</target>
+
+
+<target name="prepare-truststore-keytool-common" depends="init-common" unless="use.certutil">
+    <copy file="${admin.domain.dir}/${admin.domain}/config/cacerts.jks" tofile="${truststore.db.file}"/>
+</target>
+
+
+<target name="prepare-keystore-common" depends="init-common">
+    <property name="keystore.db.file" location="${build.base.dir}/keystore.jks"/>
+    <delete quiet="true" file="${keystore.db.file}"/>
+    <copy file="${admin.domain.dir}/${admin.domain}/config/keystore.jks" tofile="${keystore.db.file}" failonerror="false"/>
+</target>
+
+<target name="get-version-common" depends="init-common">
+    <exec executable="${ASADMIN}" failonerror="false" outputproperty="appserver.version">
+        <arg line="version"/>
+        <arg line="${as.props}"/>
+        <arg line="--verbose"/>
+    </exec>
+    <condition property="platform" value="true">
+        <contains string="${appserver.version}" substring="Platform" casesensitive="false"/>
+    </condition>
+    <condition property="enterprise" value="true">
+        <contains string="${appserver.version}" substring="Enterprise" casesensitive="false"/>
+    </condition>
+    <antcall target="platform-common"/>
+    <antcall target="enterprise-common"/>
+</target>
+
+<target name="platform-common" if="platform">
+    <echo message="This is Platform Version***"/>
+</target>
+
+<target name="enterprise-common" if="enterprise">
+    <echo message="This is Enterprise Version***"/>
+</target>
+
+<target name="create-PermSize" depends="init-common">
+  <echo message="asadmin create-jvm-options ${as.props} -- -XX:MaxPermSize=${jvm.maxpermsize}"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="create-jvm-options"/>
+    <arg line="${as.props}"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="-- -XX\:MaxPermSize=${jvm.maxpermsize}"/>
+  </exec>
+</target>
+
+    <target name="restart-server">
+        <antcall target="stop-server"/>
+        <sleep seconds="5"/>
+        <antcall target="start-server"/>
+
+    </target>
+
+    <target name="stop-server" depends="setOSConditions">
+        <antcall target="stop-server-unix"/>
+        <antcall target="stop-server-windows"/>
+    </target>
+
+    <target name="stop-server-unix" if="isUnix">
+        <echo message="stopping server on unix ..."/>
+        <exec executable="${env.S1AS_HOME}/bin/asadmin">
+            <arg value="stop-domain"/>
+        </exec>
+        <sleep seconds="10"/>
+    </target>
+
+    <target name="stop-server-windows" if="isWindows">
+        <echo message="Stopping server on windows ..."/>
+        <exec executable="cmd">
+            <arg value="/c"/>
+            <arg value="${env.S1AS_HOME}\bin\asadmin.bat"/>
+            <arg value="stop-domain"/>
+        </exec>
+        <sleep seconds="5"/>
+    </target>
+
+    <target name="start-server" depends="setOSConditions">
+
+        <echo>+-----------------------------+</echo>
+        <echo>| |</echo>
+        <echo>| S T A R T I N G GLASSFISH |</echo>
+        <echo>| in Felix mode |</echo>
+        <echo>| |</echo>
+        <echo>+-----------------------------+</echo>
+
+        <antcall target="start-server-unix"/>
+        <antcall target="start-server-windows"/>
+    </target>
+
+    <target name="start-server-unix" if="isUnix">
+        <exec executable="${env.S1AS_HOME}/bin/asadmin">
+            <env key="GlassFish_Platform" value="Felix"/>
+            <arg value="start-domain"/>
+        </exec>
+        <sleep seconds="10"/>
+    </target>
+
+    <target name="start-server-windows" if="isWindows">
+        <exec executable="cmd" spawn="true">
+            <env key="GlassFish_Platform" value="Felix"/>
+            <arg value="/c"/>
+            <arg value="${env.S1AS_HOME}\bin\asadmin.bat"/>
+            <arg value="start-domain"/>
+        </exec>
+        <sleep seconds="5"/>
+    </target>
+
+    <target name="create-jvm-options" depends="init-common">
+        <exec executable="${ASADMIN}">
+            <arg line="create-jvm-options"/>
+            <arg line="--user ${admin.user} --host ${admin.host} --port ${admin.port} --echo=true --terse=true"/>
+            <arg line="${option}"/>
+        </exec>
+        <echo message="REQUIRED TO RESTART SERVER......."/>
+    </target>
+
+    <target name="delete-jvm-options" depends="init-common">
+        <exec executable="${ASADMIN}">
+            <arg line="delete-jvm-options"/>
+            <arg line="--user ${admin.user} --host ${admin.host} --port ${admin.port} --echo=true --terse=true"/>
+            <arg line="${option}"/>
+        </exec>
+        <echo message="REQUIRED TO RESTART SERVER......."/>
+    </target>
+
+<!-- ================================================================ -->
+<!-- Target to Flush connection pool  -->
+<!-- ================================================================ -->
+<target name="flush-connpool-common" depends="init-common">
+<echo message="Flush connection pool ${jdbc.conpool.name}" 
+    level="verbose"/>
+    <exec executable="${ASADMIN}" failonerror="false">
+        <arg line="flush-connection-pool"/>
+        <arg line="${as.props}"/>
+        <arg line="${jdbc.conpool.name}"/>
+    </exec>
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to generate a neat Html report -->
+<!-- ================================================================ -->
+<target name="dev-report" depends="init-common">
+    <java classname="com.sun.appserv.test.util.results.HtmlReportProducer" fork="true" failonerror="false"
+          classpath="${env.APS_HOME}/lib/reportbuilder.jar">
+        <arg value="${env.APS_HOME}/test_results.xml"/>
+    </java>
+</target>
+
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/README b/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/README
new file mode 100644
index 0000000..117389b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/README
@@ -0,0 +1,3 @@
+Test
+- Simple WAB (Web Application Bundle) that is CDI enabled.
+- Test injection of beans, access to BeanManager within WAB
diff --git a/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/WebTest.java
new file mode 100644
index 0000000..09cdfca
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/WebTest.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "cdi-wab";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for @WebServlet");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        Thread.sleep(2000); //WORKAROUND @XXX
+        String url = "http://" + host + ":" + port + contextRoot;
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/build.properties b/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/build.properties
new file mode 100644
index 0000000..38d97bd
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/build.properties
@@ -0,0 +1,26 @@
+<!--
+
+    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/cdi/osgi-cdi/simple-wab-with-cdi/build.xml b/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/build.xml
new file mode 100644
index 0000000..c410fd0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/build.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!--
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+-->
+<!ENTITY commonBuild SYSTEM "../common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-wab-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+   
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-wab-common"/>
+        <echo message="sleeping for 10 seconds to allow the WAB deployment"/>
+        <sleep seconds="10"/>
+
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/descriptor/MANIFEST.MF b/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/descriptor/MANIFEST.MF
new file mode 100644
index 0000000..5b53761
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/descriptor/MANIFEST.MF
@@ -0,0 +1,21 @@
+Manifest-Version: 1.0
+Archiver-Version: Plexus Archiver
+Created-By: 1.6.0_20 (Sun Microsystems Inc.)
+Built-By: siva
+Build-Jdk: 1.6.0_20
+Extension-Name: simple-cdi-osgi-test
+Implementation-Title: simple-cdi-osgi-test
+Implementation-Version: 1.0
+Bundle-ClassPath: WEB-INF/classes/
+Private-Package: tests.cdi;version="1.0"
+Export-EJB: ALL
+Bundle-Version: 1.0
+Tool: Bnd-0.0.311
+Bundle-Name: Test CDI OSGI
+Bnd-LastModified: 1283184402694
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: tests.cdi.simple-cdi-osgi-test
+Web-ContextPath: /test
+Import-Package: javax.enterprise.context,javax.enterprise.inject,javax
+ .inject,javax.enterprise.inject.spi,javax.servlet,javax.servlet.annotation,javax.servlet.http,javax.naming
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/descriptor/web.xml b/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/descriptor/web.xml
new file mode 100644
index 0000000..4812478
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/descriptor/web.xml
@@ -0,0 +1,24 @@
+<?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">
+<!-- IT's AN EMPTY FILE. Needed to satisfy maven-war-plugin.
+-->
+</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/servlet/tests/cdi/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/servlet/tests/cdi/TestBean.java
new file mode 100644
index 0000000..fad6896
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/servlet/tests/cdi/TestBean.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 tests.cdi;
+
+//Simple TestBean to test CDI. 
+//This bean implements Serializable as it needs to be placed into a Stateful Bean
+public class TestBean
+{}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/servlet/tests/cdi/TestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/servlet/tests/cdi/TestServlet.java
new file mode 100644
index 0000000..9e733d8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/osgi-cdi/simple-wab-with-cdi/servlet/tests/cdi/TestServlet.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 tests.cdi;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Enumeration;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.inject.Inject;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.naming.InitialContext;
+
+@WebServlet(urlPatterns={"/*"})
+public class TestServlet extends HttpServlet {
+    @Inject TestBean tb;
+    @Inject BeanManager bm;
+    BeanManager bm1;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0");
+        String msg = "";
+        if (tb == null) msg += "Bean injection into Servlet failed";
+        if (bm == null) msg += "BeanManager Injection via @Inject failed";
+        try {
+            bm1 = (BeanManager)((new InitialContext()).lookup("java:comp/BeanManager"));
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            msg += "BeanManager Injection via component environment lookup failed";
+        }
+        if (bm1 == null) msg += "BeanManager Injection via component environment lookup failed";
+        
+        System.out.println("BeanManager is " + bm);
+        System.out.println("BeanManager via lookup is " + bm1);
+        writer.write(msg + "\n");
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/pom.xml b/appserver/tests/appserv-tests/devtests/cdi/pom.xml
new file mode 100644
index 0000000..a7f5fbe
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/pom.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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
+
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.glassfish.main</groupId>
+        <artifactId>glassfish-parent</artifactId>
+        <version>5.0.1-SNAPSHOT</version>
+    </parent>
+    <groupId>org.glassfish.main.tests</groupId>
+    <artifactId>tests</artifactId>
+    <packaging>pom</packaging>
+    <name>GlassFish devtests cdi</name>  
+    <modules>
+        <!-- module>quicklook</module -->
+    </modules>
+    <dependencies>
+      <dependency>
+        <groupId>ant-contrib</groupId>
+        <artifactId>ant-contrib</artifactId>
+        <version>1.0b3</version>
+      </dependency>
+    </dependencies>
+    <build>
+      <plugins>
+        <plugin>
+          <artifactId>maven-antrun-plugin</artifactId>
+          <version>1.8</version>
+          <dependencies>
+	    <dependency>
+	      <groupId>com.sun</groupId>
+	      <artifactId>tools</artifactId>
+              <version>1.8.0</version>
+	      <scope>system</scope>
+	      <systemPath>${env.JAVA_HOME}/lib/tools.jar</systemPath>
+	   </dependency>     
+         </dependencies>
+          <executions>
+            <execution>
+              <id>id.test.1</id>
+              <phase>test</phase>
+              <configuration>                
+                <target name="mvnUsage" unless="testMods">
+                  <ant antfile="build.xml" target="mvnUsage"/>
+                </target>
+              </configuration>
+              <goals>
+                <goal>run</goal>
+              </goals>
+            </execution>
+            <execution>
+              <id>id.test.2</id>
+              <phase>test</phase>
+              <configuration>                
+                <target name="antTests" if="testMods">
+                  <ant antfile="build.xml" target="antTests"/>
+                </target>
+              </configuration>
+              <goals>
+                <goal>run</goal>
+              </goals>
+            </execution>
+
+            <execution>
+              <id>id.clean</id>
+              <phase>clean</phase>
+              <configuration>
+                <target name="clean-result">
+                  <ant antfile="build.xml" target="clean-result"/>
+                </target>
+              </configuration>
+              <goals>
+                <goal>run</goal>
+              </goals>
+            </execution>
+
+          </executions>
+        </plugin>
+      </plugins>
+    </build>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/README b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/README
new file mode 100644
index 0000000..6569307
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/README
@@ -0,0 +1,4 @@
+Test
+- Testing portable extensions support 
+    - Using Bean Interface to discover metadata about discovered beans
+    - check for the absence of a bean that was vetoed by the portable Extension 
\ No newline at end of file
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/build.properties b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/build.properties
new file mode 100644
index 0000000..f6975d1
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-bean-interface"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/build.xml b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/build.xml
new file mode 100644
index 0000000..8894688
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/build.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/>
+        	<param name="cdi-extension.service" value="cdi-extension.service"/>
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/cdi-extension.service b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/cdi-extension.service
new file mode 100644
index 0000000..4d6314f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/cdi-extension.service
@@ -0,0 +1 @@
+test.extension.MyExtension
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/client/test/client/WebTest.java
new file mode 100644
index 0000000..6eb31e4
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/client/test/client/WebTest.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "portable-extensions-bean-interface";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for portable extensions");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/descriptor/beans.xml
new file mode 100644
index 0000000..f075638
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/descriptor/beans.xml
@@ -0,0 +1,28 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+   <interceptors>
+      <class>test.beans.TransactionInterceptor</class>
+   </interceptors>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/beans/DuplicateTestBean.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/beans/DuplicateTestBean.java
new file mode 100644
index 0000000..6b766bc
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/beans/DuplicateTestBean.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Named;
+
+@Transactional
+@RequestScoped
+@Preferred
+@Named("duplicate_test_bean")
+public class DuplicateTestBean extends TestBean{
+
+    public void m1() {
+        System.out.println("TestBean::m1 called");
+    }
+
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/beans/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/beans/Preferred.java
new file mode 100644
index 0000000..fa8fdb7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/beans/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/beans/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/beans/TestBean.java
new file mode 100644
index 0000000..4792d26
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/beans/TestBean.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+
+@Transactional
+@RequestScoped
+@Preferred
+public class TestBean {
+
+    public void m1() {
+        System.out.println("TestBean::m1 called");
+    }
+
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/beans/TestDependentBean.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/beans/TestDependentBean.java
new file mode 100644
index 0000000..1c15313
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/beans/TestDependentBean.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public class TestDependentBean {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/beans/TestNamedBean.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/beans/TestNamedBean.java
new file mode 100644
index 0000000..1c7c311
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/beans/TestNamedBean.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Named;
+
+@Named("test_named_bean")
+@RequestScoped
+public class TestNamedBean {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/beans/TransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/beans/TransactionInterceptor.java
new file mode 100644
index 0000000..0b78e5f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/beans/TransactionInterceptor.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+import test.extension.MyExtension;
+
+@Interceptor
+@Transactional
+public class TransactionInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestDependentBean tb;
+    
+    @Inject
+    TransactionInterceptor(MyExtension myex){ //Injection of portable extension in a bean
+        if(myex == null) {
+            errorMessage += "Portable Extension Injection in Interceptor failed";
+        }
+    }
+    
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("TransactionInterceptor::AroundInvoke");
+        if (tb == null) errorMessage += "Dependency Injection " +
+        		"into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/beans/Transactional.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/beans/Transactional.java
new file mode 100644
index 0000000..eef70c9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/beans/Transactional.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.interceptor.InterceptorBinding;
+
+
+@Target({TYPE, METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface Transactional {
+
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/extension/MyExtension.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/extension/MyExtension.java
new file mode 100644
index 0000000..be36563
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/extension/MyExtension.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.extension;
+
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.AfterBeanDiscovery;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.BeforeBeanDiscovery;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.ProcessAnnotatedType;
+
+import test.beans.DuplicateTestBean;
+
+public class MyExtension implements Extension{
+    public static boolean beforeBeanDiscoveryCalled = false;
+    public static boolean afterBeanDiscoveryCalled = false;
+    public static boolean processAnnotatedTypeCalled = false;
+    
+    void beforeBeanDiscovery(@Observes BeforeBeanDiscovery bdd){
+        System.out.println("MyExtension::beforeBeanDiscovery" + bdd);
+        beforeBeanDiscoveryCalled = true;
+    }
+    
+    <T> void processAnnotatedType(@Observes ProcessAnnotatedType<T> pat){
+        System.out.println("MyExtension:Process annotated type" + pat.getAnnotatedType().getBaseType());
+        processAnnotatedTypeCalled = true;
+        //Vetoing the processing of DuplicateTestBean
+        //If this is not vetoed, at the InjectionPoint in Servlet, there would be
+        //an ambiguous dependency due to TestBean and DuplicateTestBean
+        if (pat.getAnnotatedType().getBaseType().equals(DuplicateTestBean.class)){
+            pat.veto();
+        }
+    }
+    
+    void afterBeanDiscovery(@Observes AfterBeanDiscovery abd, BeanManager bm){
+        System.out.println("MyExtension: abd: " + abd + " BeanManager: " + bm);
+        
+        if (bm != null) {
+            //ensure a valid BeanManager is injected
+            afterBeanDiscoveryCalled = true;
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/servlet/PortableExtensionBeanInterfaceTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/servlet/PortableExtensionBeanInterfaceTestServlet.java
new file mode 100644
index 0000000..5012ab8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-interface/servlet/test/servlet/PortableExtensionBeanInterfaceTestServlet.java
@@ -0,0 +1,220 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.lang.annotation.Annotation;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+import javax.enterprise.context.ConversationScoped;
+import javax.enterprise.context.RequestScoped;
+import javax.enterprise.context.SessionScoped;
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.util.AnnotationLiteral;
+import javax.inject.Inject;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.DuplicateTestBean;
+import test.beans.Preferred;
+import test.beans.TestBean;
+import test.beans.TransactionInterceptor;
+import test.beans.Transactional;
+import test.extension.MyExtension;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class PortableExtensionBeanInterfaceTestServlet extends HttpServlet {
+    @Inject
+    @Preferred
+    TestBean tb;
+
+    @Inject
+    BeanManager bm;
+
+    String msg = "";
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+
+        if (tb == null)
+            msg += "Injection of request scoped bean failed";
+
+        tb.m1();
+        if (!TransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke not called";
+        tb.m2();
+        if (TransactionInterceptor.aroundInvokeInvocationCount != 2)
+            msg += "Business method interceptor invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =2, actual="
+                    + TransactionInterceptor.aroundInvokeInvocationCount;
+        if (!TransactionInterceptor.errorMessage.trim().equals(""))
+            msg += TransactionInterceptor.errorMessage;
+
+        // check if our portable extension was called
+        if (!MyExtension.beforeBeanDiscoveryCalled)
+            msg += "Portable Extension lifecycle observer method: "
+                    + "beforeBeanDiscovery not called";
+
+        if (!MyExtension.afterBeanDiscoveryCalled)
+            msg += "Portable Extension lifecycle observer method: "
+                    + "afterBeanDiscovery not called or injection of BeanManager "
+                    + "in an observer method failed";
+
+        if (!MyExtension.processAnnotatedTypeCalled)
+            msg += "Portable Extension lifecycle observer method: process "
+                    + "annotated type not called";
+
+        // BeanManager lookup
+        if (bm == null)
+            msg += "Injection of BeanManager into servlet failed";
+
+        try {
+            BeanManager bm1 = (BeanManager) (new InitialContext())
+                    .lookup("java:comp/BeanManager");
+            if (bm1 == null)
+                msg += "lookup of BeanManager via component context failed";
+        } catch (NamingException e) {
+            e.printStackTrace();
+            msg += "NamingException during lookup of BeanManager via component context";
+        }
+
+        testBeanManager(bm);
+        testBeanInterface(bm);
+
+        writer.write(msg + "\n");
+    }
+
+    private void testBeanInterface(BeanManager bm2) {
+        // all beans in the application
+        System.out.println(bm.getBeans(Object.class,
+                new AnnotationLiteral<Any>() {
+                }).size());
+        Set<Bean<?>> s = bm.getBeans(Object.class,
+                new AnnotationLiteral<Any>() {
+                });
+        boolean foundInAllBeansInApplication = false;
+        for (Iterator iterator = s.iterator(); iterator.hasNext();) {
+            Bean<?> bean = (Bean<?>) iterator.next();
+            if (bean.getBeanClass().equals(TestBean.class)) {
+                // found
+                foundInAllBeansInApplication = true;
+                testTestBeanMetadata(bean,
+                        "Testing TestBean obtained through a lookup for all beans in application");
+            }
+        }
+        if (!foundInAllBeansInApplication)
+            msg += "TestBean was not found among all the beans in the application";
+        Bean<?> testBeanThroughType = bm
+                .getBeans(TestBean.class, new AnnotationLiteral<Any>() {
+                }).iterator().next();
+        testTestBeanMetadata(
+                testBeanThroughType,
+                "Testing TestBean obtained through a lookup of TestBean.class with @Any Qualifier");
+        Bean<?> testBeanThroughQualifier = bm
+                .getBeans(Object.class, new AnnotationLiteral<Preferred>() {
+                }).iterator().next();
+        testTestBeanMetadata(
+                testBeanThroughQualifier,
+                "Testing TestBean obtained through a lookup of all beans with @Preferred Qualifier");
+
+        //There should be no Bean for DuplicateTestBean
+        try {
+            Bean<?> duplicateTestBeanThroughType = bm.getBeans(
+                    DuplicateTestBean.class, new AnnotationLiteral<Any>() {}).
+                    iterator().next();
+            if (duplicateTestBeanThroughType != null)
+                msg += "Duplicate test bean that has been vetoed by the portable " +
+                        "extension is still present as a valid Bean";
+        } catch(NoSuchElementException nsee){
+            //Expected.
+        }
+
+    }
+
+    private void testTestBeanMetadata(Bean<?> bean, String message) {
+        System.out.println("++++++" + message + "++++++");
+        System.out.println("EL Name:" + bean.getName());
+        check((bean.getName() == null),
+                "TestBean(whose EL name was unspecified)'s ELName is not null");
+        System.out.println(bean.getBeanClass());
+        check((bean.getBeanClass().equals(TestBean.class)),
+                "TestBean(whose EL name was unspecified) Bean's class is not TestBean");
+        System.out.println(bean.getScope());
+        check((bean.getScope().equals(RequestScoped.class)),
+                "TestBean(whose EL name was unspecified) Bean's scope is not RequestScoped");
+        System.out.println(bean.getTypes()); // Object, TestBean
+        check((bean.getTypes().size() == 2),
+                "TestBean(whose EL name was unspecified) Bean's types unexpected. Should have been Object and TestBean, instead got "
+                        + bean.getTypes());
+        System.out.println(bean.getQualifiers()); // Any, Preferred
+        check((bean.getQualifiers().size() == 2),
+                "TestBean(whose EL name was unspecified) Bean's qualifiers unexpected. Should have been Any and Preferred, instead got "
+                        + bean.getTypes());
+        Set<Annotation> x = bean.getQualifiers();
+        boolean qualifierFound = false;
+        for (Iterator iterator = x.iterator(); iterator.hasNext();) {
+            Annotation annotation = (Annotation) iterator.next();
+            if (annotation.annotationType().equals(Preferred.class)) {
+                qualifierFound = true;
+            }
+        }
+        check(qualifierFound,
+                "TestBean's qualifiers does not have Preferred.");
+    }
+
+    private void testBeanManager(BeanManager bm) {
+        // Using BeanManager
+        check((bm.getBeans("test_named_bean").size() == 1),
+                "Invalid number of Named Beans");
+        check((bm.getBeans("duplicate_test_bean").size() == 0),
+                "Invalid number of Duplicate Test Bean");
+        check(bm.getELResolver() != null, "ELResolver is null");
+        check(bm.isInterceptorBinding(Transactional.class),
+                "Transactional is not an interceptor binding");
+        check(bm.isNormalScope(RequestScoped.class),
+                "RequestScoped is not normal scope");
+        check(bm.isPassivatingScope(SessionScoped.class),
+                "SessionScoped is not passivating scope");
+        check(bm.isQualifier(Preferred.class), "Preferred is not a Qualifier");
+        check(!(bm.isScope(Preferred.class)), "Preferred is a Scope class");
+        check(bm.isScope(ConversationScoped.class),
+                "ConversationScoped is not a Scope class");
+
+    }
+
+    private void check(boolean condition, String errorMessage) {
+        if (!condition) {
+            System.out.println("PROBLEM");
+            msg += errorMessage;
+        }
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/README b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/README
new file mode 100644
index 0000000..7ae113a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/README
@@ -0,0 +1,4 @@
+Test
+- Testing portable extensions support 
+    - Injection and lookup of BeanManager in a Servlet
+    - Use of BeanManager to make checks about Beans, Interceptors, Scopes etc
\ No newline at end of file
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/build.properties b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/build.properties
new file mode 100644
index 0000000..ff05db0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-bean-manager"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/build.xml b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/build.xml
new file mode 100644
index 0000000..8894688
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/build.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/>
+        	<param name="cdi-extension.service" value="cdi-extension.service"/>
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/cdi-extension.service b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/cdi-extension.service
new file mode 100644
index 0000000..4d6314f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/cdi-extension.service
@@ -0,0 +1 @@
+test.extension.MyExtension
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/client/test/client/WebTest.java
new file mode 100644
index 0000000..83cd4ab
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/client/test/client/WebTest.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "portable-extensions-bean-manager";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for portable extensions");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/descriptor/beans.xml
new file mode 100644
index 0000000..f075638
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/descriptor/beans.xml
@@ -0,0 +1,28 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+   <interceptors>
+      <class>test.beans.TransactionInterceptor</class>
+   </interceptors>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/beans/DuplicateTestBean.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/beans/DuplicateTestBean.java
new file mode 100644
index 0000000..6b766bc
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/beans/DuplicateTestBean.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Named;
+
+@Transactional
+@RequestScoped
+@Preferred
+@Named("duplicate_test_bean")
+public class DuplicateTestBean extends TestBean{
+
+    public void m1() {
+        System.out.println("TestBean::m1 called");
+    }
+
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/beans/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/beans/Preferred.java
new file mode 100644
index 0000000..fa8fdb7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/beans/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/beans/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/beans/TestBean.java
new file mode 100644
index 0000000..4792d26
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/beans/TestBean.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+
+@Transactional
+@RequestScoped
+@Preferred
+public class TestBean {
+
+    public void m1() {
+        System.out.println("TestBean::m1 called");
+    }
+
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/beans/TestDependentBean.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/beans/TestDependentBean.java
new file mode 100644
index 0000000..1c15313
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/beans/TestDependentBean.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public class TestDependentBean {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/beans/TestNamedBean.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/beans/TestNamedBean.java
new file mode 100644
index 0000000..1c7c311
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/beans/TestNamedBean.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Named;
+
+@Named("test_named_bean")
+@RequestScoped
+public class TestNamedBean {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/beans/TransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/beans/TransactionInterceptor.java
new file mode 100644
index 0000000..0b78e5f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/beans/TransactionInterceptor.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+import test.extension.MyExtension;
+
+@Interceptor
+@Transactional
+public class TransactionInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestDependentBean tb;
+    
+    @Inject
+    TransactionInterceptor(MyExtension myex){ //Injection of portable extension in a bean
+        if(myex == null) {
+            errorMessage += "Portable Extension Injection in Interceptor failed";
+        }
+    }
+    
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("TransactionInterceptor::AroundInvoke");
+        if (tb == null) errorMessage += "Dependency Injection " +
+        		"into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/beans/Transactional.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/beans/Transactional.java
new file mode 100644
index 0000000..eef70c9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/beans/Transactional.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.interceptor.InterceptorBinding;
+
+
+@Target({TYPE, METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface Transactional {
+
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/extension/MyExtension.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/extension/MyExtension.java
new file mode 100644
index 0000000..be36563
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/extension/MyExtension.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.extension;
+
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.AfterBeanDiscovery;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.BeforeBeanDiscovery;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.ProcessAnnotatedType;
+
+import test.beans.DuplicateTestBean;
+
+public class MyExtension implements Extension{
+    public static boolean beforeBeanDiscoveryCalled = false;
+    public static boolean afterBeanDiscoveryCalled = false;
+    public static boolean processAnnotatedTypeCalled = false;
+    
+    void beforeBeanDiscovery(@Observes BeforeBeanDiscovery bdd){
+        System.out.println("MyExtension::beforeBeanDiscovery" + bdd);
+        beforeBeanDiscoveryCalled = true;
+    }
+    
+    <T> void processAnnotatedType(@Observes ProcessAnnotatedType<T> pat){
+        System.out.println("MyExtension:Process annotated type" + pat.getAnnotatedType().getBaseType());
+        processAnnotatedTypeCalled = true;
+        //Vetoing the processing of DuplicateTestBean
+        //If this is not vetoed, at the InjectionPoint in Servlet, there would be
+        //an ambiguous dependency due to TestBean and DuplicateTestBean
+        if (pat.getAnnotatedType().getBaseType().equals(DuplicateTestBean.class)){
+            pat.veto();
+        }
+    }
+    
+    void afterBeanDiscovery(@Observes AfterBeanDiscovery abd, BeanManager bm){
+        System.out.println("MyExtension: abd: " + abd + " BeanManager: " + bm);
+        
+        if (bm != null) {
+            //ensure a valid BeanManager is injected
+            afterBeanDiscoveryCalled = true;
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/servlet/PortableExtensionBeanManagerTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/servlet/PortableExtensionBeanManagerTestServlet.java
new file mode 100644
index 0000000..b182c37
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/bean-manager/servlet/test/servlet/PortableExtensionBeanManagerTestServlet.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.enterprise.context.ConversationScoped;
+import javax.enterprise.context.RequestScoped;
+import javax.enterprise.context.SessionScoped;
+import javax.enterprise.inject.Default;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.inject.Inject;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.Preferred;
+import test.beans.TestBean;
+import test.beans.TransactionInterceptor;
+import test.beans.Transactional;
+import test.extension.MyExtension;
+
+
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class PortableExtensionBeanManagerTestServlet extends HttpServlet {
+    @Inject
+    @Preferred
+    TestBean tb;
+    
+    @Inject
+    BeanManager bm;
+    
+    String msg = "";
+
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+
+        if (tb == null)
+            msg += "Injection of request scoped bean failed";
+
+        tb.m1();
+        if (!TransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke not called";
+        tb.m2();
+        if (TransactionInterceptor.aroundInvokeInvocationCount != 2)
+            msg += "Business method interceptor invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =2, actual="
+                    + TransactionInterceptor.aroundInvokeInvocationCount;
+        if (!TransactionInterceptor.errorMessage.trim().equals(""))
+            msg += TransactionInterceptor.errorMessage;
+        
+        //check if our portable extension was called
+        if (!MyExtension.beforeBeanDiscoveryCalled)
+            msg += "Portable Extension lifecycle observer method: " +
+            		"beforeBeanDiscovery not called";
+
+        if (!MyExtension.afterBeanDiscoveryCalled)
+            msg += "Portable Extension lifecycle observer method: " +
+            		"afterBeanDiscovery not called or injection of BeanManager " +
+            		"in an observer method failed";
+        
+        if (!MyExtension.processAnnotatedTypeCalled)
+            msg += "Portable Extension lifecycle observer method: process " +
+            		"annotated type not called";
+
+        //BeanManager lookup
+        if (bm == null)
+            msg += "Injection of BeanManager into servlet failed";
+        
+        try {
+            BeanManager bm1 = (BeanManager) (new InitialContext()).lookup("java:comp/BeanManager");
+            if (bm1 == null) 
+                msg += "lookup of BeanManager via component context failed";
+        } catch (NamingException e) {
+            e.printStackTrace();
+            msg += "NamingException during lookup of BeanManager via component context";
+        }
+        
+        //Using BeanManager
+        check((bm.getBeans("test_named_bean").size() == 1), "Invalid number of Named Beans");
+        check((bm.getBeans("duplicate_test_bean").size() == 0), "Invalid number of Duplicate Test Beans");
+        check(bm.getELResolver() != null, "ELResolver is null");
+        check(bm.isInterceptorBinding(Transactional.class), "Transactional is not an interceptor binding");
+        check(bm.isNormalScope(RequestScoped.class), "RequestScoped is not normal scope");
+        check(bm.isPassivatingScope(SessionScoped.class), "SessionScoped is not passivating scope");
+        check(bm.isQualifier(Preferred.class), "Preferred is not a Qualifier");
+        check(!(bm.isScope(Preferred.class)), "Preferred is a Scope class");
+        check(bm.isScope(ConversationScoped.class), "ConversationScoped is not a Scope class");
+        writer.write(msg + "\n");
+    }
+
+
+    private void check(boolean condition, String errorMessage) {
+        if(!condition){
+            msg += errorMessage;
+        }
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/build.xml b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/build.xml
new file mode 100644
index 0000000..78368ab
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/build.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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="portable-extensions-test" default="usage" basedir=".">
+
+    <property name="portable-extensions-target" value="all"/>
+
+    <target name="run-test">
+        <antcall target="portable-extensions">
+        <param name="portable-extensions-target" value="run-test"/>
+        </antcall>
+    </target>
+
+    <target name="all">
+        <antcall target="portable-extensions">
+        <param name="portable-extensions-target" value="all"/>
+        </antcall>
+    </target>
+
+    <target name="clean">
+        <antcall target="portable-extensions">
+        <param name="portable-extensions-target" value="clean"/>
+        </antcall>
+    </target>
+
+    <target name="build">
+        <antcall target="portable-extensions">
+        <param name="portable-extensions-target" value="build"/>
+        </antcall>
+    </target>
+
+    <target name="setup">
+        <antcall target="portable-extensions">
+        <param name="portable-extensions-target" value="setup"/>
+        </antcall>
+    </target>
+
+    <target name="deploy">
+        <antcall target="portable-extensions">
+        <param name="portable-extensions-target" value="deploy"/>
+        </antcall>
+    </target>
+
+    <target name="undeploy">
+        <antcall target="portable-extensions">
+        <param name="portable-extensions-target" value="undeploy"/>
+        </antcall>
+    </target>
+
+    <target name="unsetup">
+        <antcall target="portable-extensions">
+        <param name="portable-extensions-target" value="unsetup"/>
+        </antcall>
+    </target>
+
+    <target name="run">
+        <antcall target="portable-extensions">
+        <param name="portable-extensions-target" value="run"/>
+        </antcall>
+    </target>
+
+    <target name="portable-extensions">
+        <record name="portable-extensions.output" action="start" />
+            <ant dir="simple-portable-extension" target="${portable-extensions-target}"/>
+            <ant dir="bean-interface" target="${portable-extensions-target}"/>
+            <ant dir="bean-manager" target="${portable-extensions-target}"/>
+            <ant dir="injection-target" target="${portable-extensions-target}"/>
+            <ant dir="new-bean-registration" target="${portable-extensions-target}"/>
+            <ant dir="new-bean-registration-extension-in-lib" target="${portable-extensions-target}"/>
+            <ant dir="package-private-extension-constructor" target="${portable-extensions-target}"/>
+        <record name="portable-extensions.output" action="stop" />
+    </target>
+
+    <target name="usage">
+	<echo> Usage:
+		ant all (Executes all the portable-extensions tests)
+		ant clean (cleans all the portable-extensions tests)
+		ant build (builds all the portable-extensions tests)
+		ant setup (sets up all resources for portable-extensions tests)
+		ant deploy (deploys all the portable-extensions apps)
+		ant run (Executes all the portable-extensions tests)
+		ant undeploy (undeploys all the  portable-extensions apps)
+		ant unsetup (unsets all resources for portable-extensions tests)
+	</echo>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/README b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/README
new file mode 100644
index 0000000..d1db00a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/README
@@ -0,0 +1,8 @@
+Test
+- Testing portable extensions support 
+    - Use of Injection Target to inject CDI beans into a framework class that
+    is not under the control of CDI.
+    - 2 usecases:
+        - Constructor injection (fwk bean instantiation via CDI SPI)
+        - setter and field method (fwk bean instantiation by the framework)
+        
\ No newline at end of file
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/build.properties b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/build.properties
new file mode 100644
index 0000000..74b15e1
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-injection-target"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/build.xml b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/build.xml
new file mode 100644
index 0000000..8894688
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/build.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/>
+        	<param name="cdi-extension.service" value="cdi-extension.service"/>
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/cdi-extension.service b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/cdi-extension.service
new file mode 100644
index 0000000..4d6314f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/cdi-extension.service
@@ -0,0 +1 @@
+test.extension.MyExtension
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/client/test/client/WebTest.java
new file mode 100644
index 0000000..9b01e09
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/client/test/client/WebTest.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "portable-extensions-injection-target";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for portable extensions");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/descriptor/beans.xml
new file mode 100644
index 0000000..f075638
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/descriptor/beans.xml
@@ -0,0 +1,28 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+   <interceptors>
+      <class>test.beans.TransactionInterceptor</class>
+   </interceptors>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/beans/DuplicateTestBean.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/beans/DuplicateTestBean.java
new file mode 100644
index 0000000..6b766bc
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/beans/DuplicateTestBean.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Named;
+
+@Transactional
+@RequestScoped
+@Preferred
+@Named("duplicate_test_bean")
+public class DuplicateTestBean extends TestBean{
+
+    public void m1() {
+        System.out.println("TestBean::m1 called");
+    }
+
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/beans/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/beans/Preferred.java
new file mode 100644
index 0000000..fa8fdb7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/beans/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/beans/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/beans/TestBean.java
new file mode 100644
index 0000000..4792d26
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/beans/TestBean.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+
+@Transactional
+@RequestScoped
+@Preferred
+public class TestBean {
+
+    public void m1() {
+        System.out.println("TestBean::m1 called");
+    }
+
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/beans/TestDependentBean.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/beans/TestDependentBean.java
new file mode 100644
index 0000000..1c15313
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/beans/TestDependentBean.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public class TestDependentBean {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/beans/TestNamedBean.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/beans/TestNamedBean.java
new file mode 100644
index 0000000..1c7c311
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/beans/TestNamedBean.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Named;
+
+@Named("test_named_bean")
+@RequestScoped
+public class TestNamedBean {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/beans/TransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/beans/TransactionInterceptor.java
new file mode 100644
index 0000000..0b78e5f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/beans/TransactionInterceptor.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+import test.extension.MyExtension;
+
+@Interceptor
+@Transactional
+public class TransactionInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestDependentBean tb;
+    
+    @Inject
+    TransactionInterceptor(MyExtension myex){ //Injection of portable extension in a bean
+        if(myex == null) {
+            errorMessage += "Portable Extension Injection in Interceptor failed";
+        }
+    }
+    
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("TransactionInterceptor::AroundInvoke");
+        if (tb == null) errorMessage += "Dependency Injection " +
+        		"into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/beans/Transactional.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/beans/Transactional.java
new file mode 100644
index 0000000..eef70c9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/beans/Transactional.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.interceptor.InterceptorBinding;
+
+
+@Target({TYPE, METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface Transactional {
+
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/extension/MyExtension.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/extension/MyExtension.java
new file mode 100644
index 0000000..be36563
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/extension/MyExtension.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.extension;
+
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.AfterBeanDiscovery;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.BeforeBeanDiscovery;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.ProcessAnnotatedType;
+
+import test.beans.DuplicateTestBean;
+
+public class MyExtension implements Extension{
+    public static boolean beforeBeanDiscoveryCalled = false;
+    public static boolean afterBeanDiscoveryCalled = false;
+    public static boolean processAnnotatedTypeCalled = false;
+    
+    void beforeBeanDiscovery(@Observes BeforeBeanDiscovery bdd){
+        System.out.println("MyExtension::beforeBeanDiscovery" + bdd);
+        beforeBeanDiscoveryCalled = true;
+    }
+    
+    <T> void processAnnotatedType(@Observes ProcessAnnotatedType<T> pat){
+        System.out.println("MyExtension:Process annotated type" + pat.getAnnotatedType().getBaseType());
+        processAnnotatedTypeCalled = true;
+        //Vetoing the processing of DuplicateTestBean
+        //If this is not vetoed, at the InjectionPoint in Servlet, there would be
+        //an ambiguous dependency due to TestBean and DuplicateTestBean
+        if (pat.getAnnotatedType().getBaseType().equals(DuplicateTestBean.class)){
+            pat.veto();
+        }
+    }
+    
+    void afterBeanDiscovery(@Observes AfterBeanDiscovery abd, BeanManager bm){
+        System.out.println("MyExtension: abd: " + abd + " BeanManager: " + bm);
+        
+        if (bm != null) {
+            //ensure a valid BeanManager is injected
+            afterBeanDiscoveryCalled = true;
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/framework/TestFrameworkClassWithConstructorInjection.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/framework/TestFrameworkClassWithConstructorInjection.java
new file mode 100644
index 0000000..3d57751
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/framework/TestFrameworkClassWithConstructorInjection.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.framework;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.inject.Inject;
+
+import test.beans.Preferred;
+import test.beans.TestBean;
+import test.beans.TestNamedBean;
+
+public class TestFrameworkClassWithConstructorInjection {
+
+    @Inject
+    TestNamedBean tnb;
+
+    private TestBean tb;
+    private String msg = "";
+
+    private boolean postConstructCalled = false;
+    private boolean preDestroyCalled = false;
+
+    @Inject
+    public TestFrameworkClassWithConstructorInjection(@Preferred TestBean tb) {
+        System.out.println("constructor based injection " +
+        		"into a framework class" + tb);
+        this.tb = tb;
+        if (tb == null) {
+            msg += "Constructor injection in a test framework class failed";
+        }
+
+    }
+
+    @PostConstruct
+    private void beanPostConstruct() {
+        this.postConstructCalled = true;
+        if (tnb == null) {
+            msg += "regular field injection in a test framework class failed";
+        }
+    }
+
+    @PreDestroy
+    private void beanPreDestroy() {
+        this.preDestroyCalled = true;
+    }
+
+    public String getInitialTestResults() {
+        if (!postConstructCalled)
+            msg += "PostConstruct was not called in test framework class";
+        String response = msg;
+        msg = "";
+        return response;
+    }
+
+    public String getFinalTestResults() {
+        if (!preDestroyCalled)
+            msg += "PreDestroy was not called " + "in test framework class";
+        return msg;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/framework/TestFrameworkClassWithSetterAndFieldInjection.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/framework/TestFrameworkClassWithSetterAndFieldInjection.java
new file mode 100644
index 0000000..3053e38
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/framework/TestFrameworkClassWithSetterAndFieldInjection.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.framework;
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.inject.Inject;
+
+import test.beans.Preferred;
+import test.beans.TestBean;
+import test.beans.TestNamedBean;
+
+
+public class TestFrameworkClassWithSetterAndFieldInjection {
+    
+    @Inject TestNamedBean tnb;
+
+    private TestBean tb;
+    
+    private String msg = "";
+
+    private boolean postConstructCalled = false;
+    private boolean preDestroyCalled = false;
+
+    // must have default no-arg constructor or weld will puke
+    public TestFrameworkClassWithSetterAndFieldInjection() {
+    }
+
+    public TestFrameworkClassWithSetterAndFieldInjection(String magicKey){
+        if(!magicKey.equals("test")) throw new RuntimeException();
+    }
+    
+    
+    @Inject
+    public void setTestBean(@Preferred TestBean tb){
+        System.out.println("Setter based injection " +
+                "into a framework class" + tb);
+        this.tb = tb;
+        if (tb == null) {
+            msg += "Constructor injection in a test framework class failed";
+        }
+        
+    }
+    
+    @PostConstruct
+    private void beanPostConstruct() {
+        this.postConstructCalled = true;
+        if (tnb == null) {
+            msg += "regular field injection in a test framework class failed";
+        }
+    }
+
+    @PreDestroy
+    private void beanPreDestroy() {
+        this.preDestroyCalled = true;
+    }
+
+    public String getInitialTestResults() {
+        if (!postConstructCalled)
+            msg += "PostConstruct was not called in test framework class";
+        String response = msg;
+        msg = "";
+        return response;
+    }
+
+    public String getFinalTestResults() {
+        if (!preDestroyCalled)
+            msg += "PreDestroy was not called " + "in test framework class";
+        return msg;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/servlet/PortableExtensionInjectionTargetTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/servlet/PortableExtensionInjectionTargetTestServlet.java
new file mode 100644
index 0000000..9d21265
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/injection-target/servlet/test/servlet/PortableExtensionInjectionTargetTestServlet.java
@@ -0,0 +1,139 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.enterprise.context.ConversationScoped;
+import javax.enterprise.context.RequestScoped;
+import javax.enterprise.context.SessionScoped;
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.InjectionTarget;
+import javax.inject.Inject;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import com.sun.xml.bind.v2.schemagen.xmlschema.Annotated;
+
+import test.beans.Preferred;
+import test.beans.TestBean;
+import test.beans.TransactionInterceptor;
+import test.beans.Transactional;
+import test.extension.MyExtension;
+import test.framework.TestFrameworkClassWithConstructorInjection;
+import test.framework.TestFrameworkClassWithSetterAndFieldInjection;
+
+
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class PortableExtensionInjectionTargetTestServlet extends HttpServlet {
+    @Inject
+    @Preferred
+    TestBean tb;
+    
+    @Inject
+    BeanManager bm;
+    
+    String msg = "";
+
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+
+        if (tb == null)
+            msg += "Injection of request scoped bean failed";
+
+        tb.m1();
+        if (!TransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke not called";
+        tb.m2();
+        if (TransactionInterceptor.aroundInvokeInvocationCount != 2)
+            msg += "Business method interceptor invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =2, actual="
+                    + TransactionInterceptor.aroundInvokeInvocationCount;
+        if (!TransactionInterceptor.errorMessage.trim().equals(""))
+            msg += TransactionInterceptor.errorMessage;
+        
+        //check if our portable extension was called
+        if (!MyExtension.beforeBeanDiscoveryCalled)
+            msg += "Portable Extension lifecycle observer method: " +
+            		"beforeBeanDiscovery not called";
+
+        if (!MyExtension.afterBeanDiscoveryCalled)
+            msg += "Portable Extension lifecycle observer method: " +
+            		"afterBeanDiscovery not called or injection of BeanManager " +
+            		"in an observer method failed";
+        
+        if (!MyExtension.processAnnotatedTypeCalled)
+            msg += "Portable Extension lifecycle observer method: process " +
+            		"annotated type not called";
+
+        //BeanManager lookup
+        if (bm == null)
+            msg += "Injection of BeanManager into servlet failed";
+        
+        AnnotatedType<TestFrameworkClassWithConstructorInjection> atfc = 
+            bm.createAnnotatedType(TestFrameworkClassWithConstructorInjection.class);
+        //First: Constructor Injection Framework class
+        CreationalContext ctx = bm.createCreationalContext(null);
+        InjectionTarget<TestFrameworkClassWithConstructorInjection> it = bm.createInjectionTarget(atfc);
+        TestFrameworkClassWithConstructorInjection ctorInstance = it.produce(ctx);
+        //Since this framework class needs to support constructor based injection
+        //we need to ask the CDI runtime to produce the instance.
+        it.inject(ctorInstance, ctx);
+        it.postConstruct(ctorInstance);
+        msg += ctorInstance.getInitialTestResults();
+        it.preDestroy(ctorInstance);
+        it.dispose(ctorInstance);
+        msg += ctorInstance.getFinalTestResults();
+
+        //Second: Setter and Field based Injection into a Framework class
+        AnnotatedType<TestFrameworkClassWithSetterAndFieldInjection> atsfi = 
+            bm.createAnnotatedType(TestFrameworkClassWithSetterAndFieldInjection.class);
+        InjectionTarget<TestFrameworkClassWithSetterAndFieldInjection> it_set = bm.createInjectionTarget(atsfi);
+        TestFrameworkClassWithSetterAndFieldInjection setterInstance = 
+            new TestFrameworkClassWithSetterAndFieldInjection("test");
+        it_set.inject(setterInstance, ctx);
+        it_set.postConstruct(setterInstance);
+        msg += setterInstance.getInitialTestResults();
+        it_set.preDestroy(setterInstance);
+        it_set.dispose(setterInstance);
+        msg += setterInstance.getFinalTestResults();
+        
+        writer.write(msg + "\n");
+    }
+
+
+    private void check(boolean condition, String errorMessage) {
+        if(!condition){
+            msg += errorMessage;
+        }
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/README b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/README
new file mode 100644
index 0000000..64b0a7c
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/README
@@ -0,0 +1,5 @@
+Test
+- Testing portable extensions support 
+    - Bean interface
+    - getting all beans that exists in the application
+    - Registering a new Framework bean and ensure that is available for injection
\ No newline at end of file
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/build.properties b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/build.properties
new file mode 100644
index 0000000..a3a1b42
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/build.properties
@@ -0,0 +1,26 @@
+<!--
+
+    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}-make-framework-bean-available-for-injection-extension-in-lib"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
+<property name="cdi.extension" value="cdi-extension.service"/>
+<property name="extension.jar" value="weld-extension.jar"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/build.xml b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/build.xml
new file mode 100644
index 0000000..747aac5
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/build.xml
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete failonerror="false">
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="lib" includes="*.jar"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <!-- compile and build extension jar -->
+        <antcall target="compile-common">
+            <param name="src" value="extension"/>
+        </antcall>
+
+        <mkdir dir="lib"/>
+        <mkdir dir="${build.classes.dir}/META-INF"/>
+        <mkdir dir="${build.classes.dir}/META-INF/services"/>
+        <copy file="${cdi.extension}"
+              tofile="${build.classes.dir}/META-INF/services/javax.enterprise.inject.spi.Extension"
+              failonerror="false"/>
+        <copy file="${beans.xml}"
+	          tofile="${build.classes.dir}/META-INF/beans.xml"
+              failonerror="false"/>
+        <jar jarfile="lib/${extension.jar}" basedir="${build.classes.dir}" update="true" includes ="${build.classes.dir}">
+            <metainf dir="${build.classes.dir}/META-INF">
+                <include name="services/javax.enterprise.inject.spi.Extension"/>
+            </metainf>
+            <fileset dir="${build.classes.dir}/" casesensitive="yes">
+                <include name="**/*class*"/>
+            </fileset>
+        </jar>
+
+        <delete dir="${build.classes.dir}/META-INF"/>
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+
+        <delete dir="${build.classes.dir}/test/fwk"/>
+        <delete dir="${build.classes.dir}/test/extension"/>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/>
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+
+
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/cdi-extension.service b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/cdi-extension.service
new file mode 100644
index 0000000..80fa6f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/cdi-extension.service
@@ -0,0 +1 @@
+test.extension.ServiceFrameworkExtension
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/client/test/client/WebTest.java
new file mode 100644
index 0000000..384c383
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/client/test/client/WebTest.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "portable-extension-make-framework-bean-available-for-injection-extension-in-lib";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for portable extensions");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/descriptor/beans.xml
new file mode 100644
index 0000000..f075638
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/descriptor/beans.xml
@@ -0,0 +1,28 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+   <interceptors>
+      <class>test.beans.TransactionInterceptor</class>
+   </interceptors>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/extension/test/extension/FrameworkServiceFactory.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/extension/test/extension/FrameworkServiceFactory.java
new file mode 100644
index 0000000..44e2f7f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/extension/test/extension/FrameworkServiceFactory.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.extension;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.lang.reflect.Type;
+
+import test.fwk.FrameworkService;
+
+
+/**
+ * A simple Service Factory class that provides the ability to obtain/get 
+ * references to a service implementation (obtained from a service registry) 
+ * and also provides a mechanism to unget or return a service after its usage
+ * is completed.
+ * 
+ * @author Sivakumar Thyagarajan
+ */
+public class FrameworkServiceFactory {
+    private static final boolean DEBUG_ENABLED = false;
+
+    /**
+     * Get a reference to the service of the provided <code>Type</code>
+     */
+    public static Object getService(final Type type, final FrameworkService fs){
+        debug("getService " + type + " FS:" + fs);
+        Object instance = lookupService(type, fs.waitTimeout());
+        
+        //If the service is marked as dynamic, when a method is invoked on a 
+        //a service proxy, an attempt is made to get a reference to the service 
+        //and then the method is invoked on the newly obtained service.
+        //This scheme should work for statless and/or idempotent service 
+        //implementations that have a dynamic lifecycle that is not linked to
+        //the service consumer [service dynamism]
+        if (fs.dynamic()) {
+            InvocationHandler proxyInvHndlr = new InvocationHandler() {
+                @Override
+                public Object invoke(Object proxy, Method method, Object[] args)
+                        throws Throwable {
+                    debug("Method " + method + " called on proxy");
+                    //Always lookup the service and invoke the method in this.
+                    return method.invoke(lookupService(type, fs.waitTimeout()), args);
+                }
+            };
+            instance =  Proxy.newProxyInstance(
+                                Thread.currentThread().getContextClassLoader(), 
+                                new Class[]{(Class)type}, 
+                                proxyInvHndlr); 
+        }
+        return instance;
+    }
+
+    //NOTE:hard-coded service instantiation for this test, 
+    //but ideally should get the
+    //service implementation from the framework's service registry
+    private static Object lookupService(Type type, int waitTimeout) {
+        String clazzName = ((Class)type).getName() + "Impl";
+        System.out.println("LOADING " + clazzName);
+        try {
+            return FrameworkServiceFactory.class.getClassLoader().loadClass(clazzName).newInstance();
+        } catch (InstantiationException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (IllegalAccessException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (ClassNotFoundException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * Unget the service
+     */
+    public static void ungetService(Object serviceInstance, 
+            Type type, FrameworkService frameworkService){
+        //unget the service instance from the service registry
+    }
+    
+    private static void debug(String string) {
+        if(DEBUG_ENABLED)
+            System.out.println("ServiceFactory:: " + string);
+    }
+    
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/extension/test/extension/ServiceFrameworkExtension.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/extension/test/extension/ServiceFrameworkExtension.java
new file mode 100644
index 0000000..c9361f9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/extension/test/extension/ServiceFrameworkExtension.java
@@ -0,0 +1,323 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.extension;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.enterprise.context.Dependent;
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Default;
+import javax.enterprise.inject.spi.AfterBeanDiscovery;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeforeBeanDiscovery;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.ProcessAnnotatedType;
+import javax.enterprise.inject.spi.ProcessBean;
+import javax.enterprise.inject.spi.ProcessInjectionTarget;
+import javax.enterprise.util.AnnotationLiteral;
+
+import test.fwk.FrameworkService;
+import test.fwk.SomeFwkServiceImpl;
+import test.fwk.SomeFwkService;
+
+/**
+ * A portable extension that supports injection of custom framework
+ * services into Beans. 
+ * 
+ * @author Sivakumar Thyagarajan
+ */
+public class ServiceFrameworkExtension implements Extension{
+
+    public static boolean beforeBeanDiscoveryCalled = false;
+    public static boolean afterBeanDiscoveryCalled = false;
+    public static boolean afterProcessBeanCalled = false;
+    public static boolean processAnnotatedTypeCalled = false;
+    
+    /*
+     * A map of Framework Service Types to be injected and additional metadata
+     * about the FrameworkService to be injected.
+     */
+    private HashMap<Type, Set<FrameworkService>> frameworkServicesToBeInjected
+                                = new HashMap<Type, Set<FrameworkService>>();
+    private static final boolean DEBUG_ENABLED = false;
+
+
+    //Observers for container lifecycle events
+    void beforeBeanDiscovery(@Observes BeforeBeanDiscovery bdd){
+        debug("beforeBeanDiscovery" + bdd);
+        beforeBeanDiscoveryCalled = true;
+    }
+
+    <T> void processAnnotatedType(@Observes ProcessAnnotatedType<T> pat){
+        debug("Process annotated type" + pat.getAnnotatedType().getBaseType());
+        processAnnotatedTypeCalled = true;
+    }
+    
+    /**
+     * Observer for <code>ProcessInjectionTarget</code> events. This event is
+     * fired for every Java EE component class supporting injection that may be 
+     * instantiated by the container at runtime. Injections points of every 
+     * discovered enabled Java EE component is checked to see if there is a 
+     * request for injection of a framework service. 
+     */
+    void afterProcessInjectionTarget(@Observes ProcessInjectionTarget<?> pb){
+        debug("AfterProcessInjectionTarget" + pb.getAnnotatedType().getBaseType());
+        Set<InjectionPoint> ips = pb.getInjectionTarget().getInjectionPoints();
+        discoverServiceInjectionPoints(ips);
+    }
+    
+    /**
+     * Observer for <code>ProcessInjectionTarget</code> events. This event is
+     * fired fire an event for each enabled bean, interceptor or decorator 
+     * deployed in a bean archive, before registering the Bean object. 
+     * Injections points of every discovered enabled Java EE component is 
+     * checked to see if there is a request for injection of a framework 
+     * service. 
+     */
+    void afterProcessBean(@Observes ProcessBean pb){
+        afterProcessBeanCalled = true;
+        debug("afterProcessBean - " + pb.getAnnotated().getBaseType());
+        Set<InjectionPoint> ips = pb.getBean().getInjectionPoints();
+        discoverServiceInjectionPoints(ips);
+    }
+
+    /*
+     * Discover injection points where the framework service is requested
+     * through the <code>FrameworkService</code> qualifier and a map is 
+     * populated for all framework services that have been requested.
+     */
+    private void discoverServiceInjectionPoints(Set<InjectionPoint> ips) {
+        for (Iterator<InjectionPoint> iterator = ips.iterator(); 
+                                                    iterator.hasNext();) {
+            InjectionPoint injectionPoint = iterator.next();
+            Set<Annotation> qualifs = injectionPoint.getQualifiers();
+            for (Iterator<Annotation> qualifIter = qualifs.iterator(); 
+                                                    qualifIter.hasNext();) {
+                Annotation annotation = qualifIter.next();
+                if (annotation.annotationType().equals(FrameworkService.class)){
+                    printDebugForInjectionPoint(injectionPoint);
+                    //Keep track of service-type and its attributes
+                    System.out.println("---- Injection requested for " +
+                    		"framework service type " + injectionPoint.getType()
+                            + " and annotated with dynamic="
+                            + injectionPoint.getAnnotated()
+                                    .getAnnotation(FrameworkService.class)
+                                    .dynamic()
+                            + ", serviceCriteria="
+                            + injectionPoint.getAnnotated()
+                                    .getAnnotation(FrameworkService.class)
+                                    .serviceCriteria());
+                    //Add to list of framework services to be injected
+                    Type key = injectionPoint.getType();
+                    FrameworkService value = injectionPoint.getAnnotated()
+                    .getAnnotation(FrameworkService.class); 
+                    if (!frameworkServicesToBeInjected.containsKey(key)){
+                        frameworkServicesToBeInjected.put(key, new HashSet<FrameworkService>());
+                    }
+                    frameworkServicesToBeInjected.get(key).add(value);
+                    System.out.println(frameworkServicesToBeInjected.get(key).size());
+                    
+                }
+            }
+        }
+    }
+
+    /**
+     * Observer for <code>AfterBeanDiscovery</code> events. This 
+     * observer method is used to register <code>Bean</code>s for the framework
+     * services that have been requested to be injected. 
+     */
+    void afterBeanDiscovery(@Observes AfterBeanDiscovery abd){
+        afterBeanDiscoveryCalled = true;
+        debug("After Bean Discovery");
+        for (Iterator<Type> iterator = this.frameworkServicesToBeInjected.keySet().iterator(); 
+                                                iterator.hasNext();) {
+            Type type =  iterator.next();
+            //If the injection point's type is not a Class or Interface, we
+            //don't know how to handle this. 
+            if (!(type instanceof Class)) {
+                System.out.println("Unknown type:" + type);
+                abd.addDefinitionError(new UnsupportedOperationException(
+                        "Injection target type " + type + "not supported"));
+                break; //abort deployment
+            }
+            //Add the Bean representing the framework service so that it
+            //is available for injection
+            addBean(abd, type, this.frameworkServicesToBeInjected.get(type));
+        }
+    }
+
+    /*
+     * Add a <code>Bean</code> for the framework service requested. Instantiate
+     * or discover the bean from the framework service registry, 
+     * and return a reference to the service if a dynamic reference is requested.
+     */
+    private void addBean(AfterBeanDiscovery abd, final Type type, 
+            final Set<FrameworkService> frameworkServices) {
+        for (Iterator<FrameworkService> iterator = frameworkServices.iterator(); iterator
+                .hasNext();) {
+            final FrameworkService frameworkService = iterator.next();
+            System.out.println(" --- Adding a framework service BEAN " + type + " for " + frameworkService);
+            abd.addBean(new FrameworkServiceBean(type, frameworkService));
+        }
+    }
+    
+
+    private final class FrameworkServiceBean implements Bean {
+        private final Type type;
+        private final FrameworkService frameworkService;
+
+        private FrameworkServiceBean(Type type,
+                FrameworkService frameworkService) {
+            this.type = type;
+            this.frameworkService = frameworkService;
+        }
+
+        @Override
+        public Object create(CreationalContext arg0) {
+            //get the service from the service registry
+            return FrameworkServiceFactory.getService(type, frameworkService);
+        }
+
+        @Override
+        public void destroy(Object instance,
+                CreationalContext creationalContext) {
+          System.out.println("destroy::" + instance);
+          //unget the service reference
+          FrameworkServiceFactory.ungetService(instance, type, frameworkService);
+        }
+
+        @Override
+        public Class getBeanClass() {
+            return (Class)type;
+        }
+
+        @Override
+        public Set<InjectionPoint> getInjectionPoints() {
+          return Collections.emptySet();
+        }
+
+        @Override
+        public String getName() {
+            return type + "_dynamic_" + frameworkService.dynamic()
+                    + "_criteria_" + frameworkService.serviceCriteria() 
+                    + "_waitTimeout" + frameworkService.waitTimeout();
+        }
+
+        @Override
+        public Set<Annotation> getQualifiers() {
+            Set<Annotation> s = new HashSet<Annotation>();
+            s.add(new AnnotationLiteral<Default>() {});
+            s.add(new AnnotationLiteral<Any>() {});
+            //Add the appropriate parameters to the FrameworkService qualifier
+            //as requested in the injection point
+            s.add(new FrameworkServiceQualifierType(frameworkService)); 
+            return s;
+        }
+
+        @Override
+        public Class<? extends Annotation> getScope() {
+            return Dependent.class;
+        }
+
+        @Override
+        public Set<Class<? extends Annotation>> getStereotypes() {
+            return Collections.emptySet();
+        }
+
+        @Override
+        public Set<Type> getTypes() {
+            Set<Type> s = new HashSet<Type>();
+            s.add(type);
+            s.add(Object.class);
+            return s;
+        }
+
+        @Override
+        public boolean isAlternative() {
+            return false;
+        }
+
+        @Override
+        public boolean isNullable() {
+            return false;
+        }
+    }
+
+    /*
+     * Represents an annotation type instance of FrameworkService
+     * with parameters equal to those specified in the injection point
+     */
+    private final class FrameworkServiceQualifierType 
+    extends AnnotationLiteral<FrameworkService> implements FrameworkService {
+        private String serviceCriteria = "";
+        private boolean dynamic = false;
+        private int waitTimeout = -1;
+
+        public FrameworkServiceQualifierType(FrameworkService frameworkService){
+            this.serviceCriteria = frameworkService.serviceCriteria();
+            this.dynamic = frameworkService.dynamic();
+            this.waitTimeout  = frameworkService.waitTimeout();
+        }
+        @Override
+        public String serviceCriteria(){
+            return this.serviceCriteria;
+        }
+
+        @Override
+        public boolean dynamic() {
+            return this.dynamic;
+        }
+
+        @Override
+        public int waitTimeout() {
+            return this.waitTimeout;
+        }
+    }
+    
+    private void debug(String string) {
+        if(DEBUG_ENABLED)
+            System.out.println("MyExtension:: " + string);
+        
+    }
+
+    private void printDebugForInjectionPoint(InjectionPoint injectionPoint) {
+        if (DEBUG_ENABLED) {
+            System.out.println("@@@@@@@ INJECTION-POINT: Annotation:"
+                    + injectionPoint.getAnnotated()); // annotatedfield
+            System.out.print(" ,Bean:" + injectionPoint.getBean());// bean
+            System.out.print(" ,Class:" + injectionPoint.getClass()); // r untime
+                                                           // class?
+            System.out.print(" ,Member:" + injectionPoint.getMember());// Field
+            System.out.print(" ,Qualifiers:" + injectionPoint.getQualifiers());// qualifiers
+            System.out.print(" ,Type:" + injectionPoint.getType());// type of
+                                                         // injection
+                                                         // point
+        }
+    }
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/extension/test/fwk/FrameworkService.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/extension/test/fwk/FrameworkService.java
new file mode 100644
index 0000000..542eef2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/extension/test/fwk/FrameworkService.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.fwk;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+
+/**
+ * A CDI Qualifier that represents a reference to a
+ * service in the framework. If this qualifiers annotates an injection point, 
+ * the framework extension discovers and instantiates
+ * a service implementing the service interface type of the injection point
+ * and makes it available for injection to that injection point.
+ */ 
+public @interface FrameworkService {
+    /**
+     * Determines if the service reference that is injected
+     * refers to a dynamic proxy or the actual service reference obtained
+     * from the framework service registry  
+     */
+   boolean dynamic() default false; //dynamic
+   
+   /**
+    * service discovery criteria
+    */
+   String serviceCriteria() default ""; 
+   
+   /**
+    * wait specified in millis. -1 indicates indefinite wait
+    */
+   int waitTimeout() default -1; 
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/extension/test/fwk/SomeFwkService.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/extension/test/fwk/SomeFwkService.java
new file mode 100644
index 0000000..3504168
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/extension/test/fwk/SomeFwkService.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.fwk;
+
+public interface SomeFwkService {
+    public boolean fooMethod();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/extension/test/fwk/SomeFwkServiceImpl.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/extension/test/fwk/SomeFwkServiceImpl.java
new file mode 100644
index 0000000..643744d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/extension/test/fwk/SomeFwkServiceImpl.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.fwk;
+
+public class SomeFwkServiceImpl implements SomeFwkService {
+    
+    public SomeFwkServiceImpl(){
+        System.out.println("SomeFrameworkClass:");
+    }
+
+    @Override
+    public boolean fooMethod() {
+        System.out.println("SomeFwkServiceImpl::fooMethod called");
+        return true;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/servlet/test/beans/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/servlet/test/beans/Preferred.java
new file mode 100644
index 0000000..fa8fdb7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/servlet/test/beans/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/servlet/test/beans/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/servlet/test/beans/TestBean.java
new file mode 100644
index 0000000..4792d26
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/servlet/test/beans/TestBean.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+
+@Transactional
+@RequestScoped
+@Preferred
+public class TestBean {
+
+    public void m1() {
+        System.out.println("TestBean::m1 called");
+    }
+
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/servlet/test/beans/TransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/servlet/test/beans/TransactionInterceptor.java
new file mode 100644
index 0000000..374113e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/servlet/test/beans/TransactionInterceptor.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+import test.extension.ServiceFrameworkExtension;
+
+@Interceptor
+@Transactional
+public class TransactionInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TransactionInterceptor(ServiceFrameworkExtension myex){ //Injection of portable extension in a bean
+        if(myex == null) {
+            errorMessage += "Portable Extension Injection in Interceptor failed";
+        }
+    }
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("TransactionInterceptor::AroundInvoke");
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/servlet/test/beans/Transactional.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/servlet/test/beans/Transactional.java
new file mode 100644
index 0000000..eef70c9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/servlet/test/beans/Transactional.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.interceptor.InterceptorBinding;
+
+
+@Target({TYPE, METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface Transactional {
+
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/servlet/test/servlet/PortableExtensionBeanRegistrationTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/servlet/test/servlet/PortableExtensionBeanRegistrationTestServlet.java
new file mode 100644
index 0000000..110f809
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration-extension-in-lib/servlet/test/servlet/PortableExtensionBeanRegistrationTestServlet.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.lang.reflect.Proxy;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.enterprise.context.Dependent;
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Default;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.util.AnnotationLiteral;
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.Preferred;
+import test.beans.TestBean;
+import test.beans.TransactionInterceptor;
+import test.extension.ServiceFrameworkExtension;
+import test.fwk.FrameworkService;
+import test.fwk.SomeFwkServiceImpl;
+import test.fwk.SomeFwkService;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class PortableExtensionBeanRegistrationTestServlet extends HttpServlet {
+    @Inject
+    @Preferred
+    TestBean tb;
+    
+    @Inject
+    BeanManager bm;
+    
+    @Inject
+    @FrameworkService(serviceCriteria="TEST", dynamic=true)
+    SomeFwkService sfc_proxy;
+
+//    @Inject
+//    @FrameworkService(serviceCriteria="FOO", dynamic=false)
+//    SomeFwkService sfc_unproxied;
+
+    String msg = "";
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+
+        if (tb == null)
+            msg += "Injection of request scoped bean failed";
+
+        tb.m1();
+        if (!TransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke not called";
+        tb.m2();
+        if (TransactionInterceptor.aroundInvokeInvocationCount != 2)
+            msg += "Business method interceptor invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =2, actual="
+                    + TransactionInterceptor.aroundInvokeInvocationCount;
+        if (!TransactionInterceptor.errorMessage.trim().equals(""))
+            msg += TransactionInterceptor.errorMessage;
+        
+        //check if our portable extension was called
+        if (!ServiceFrameworkExtension.beforeBeanDiscoveryCalled)
+            msg += "Portable Extension lifecycle observer method: " +
+            		"beforeBeanDiscovery not called";
+
+        if (!ServiceFrameworkExtension.afterBeanDiscoveryCalled)
+            msg += "Portable Extension lifecycle observer method: " +
+            		"afterBeanDiscovery not called or injection of BeanManager " +
+            		"in an observer method failed";
+        
+        if (!ServiceFrameworkExtension.processAnnotatedTypeCalled)
+            msg += "Portable Extension lifecycle observer method: process " +
+            		"annotated type not called";
+
+        //BeanManager lookup
+        if (bm == null)
+            msg += "Injection of BeanManager into servlet failed";
+        
+        //Get all beans and count the number of beans in the test package
+        Set<Bean<?>> allBeans = bm.getBeans(Object.class, new AnnotationLiteral<Any>(){});
+
+        if (sfc_proxy == null)
+            msg += "Injection of (proxied) service bean added via extension not available";
+
+//        if (sfc_unproxied == null)
+//            msg += "Injection of (unproxied) service bean added via extension not available";
+
+        //check if proxied service reference is indeed proxied
+        if (!Proxy.isProxyClass(sfc_proxy.getClass()))
+            msg += "Expected Proxied service reference, but got back an " +
+            		"unproxied service reference ";
+        //invoke a method o
+        if(!sfc_proxy.fooMethod())
+            msg += "invocation of method on proxied service failed";
+        
+//        //check if unproxied service reference is not proxied
+//        if (Proxy.isProxyClass(sfc_unproxied.getClass()))
+//            msg += "Expected unProxied service reference, but got back an " +
+//                    "proxied service reference ";
+//        //invoke a method o
+//        if(!sfc_unproxied.fooMethod())
+//            msg += "invocation of method on unproxied service failed";
+        
+        for (Iterator<Bean<?>> iterator = allBeans.iterator(); iterator.hasNext();) {
+            Bean<?> bean = iterator.next();
+            if (bean.getBeanClass().getName().contains("SomeFramework")){
+                msg += testFrameworkBean(bean);
+            }
+        }
+        
+        if (!ServiceFrameworkExtension.afterProcessBeanCalled)
+            msg += "Portable Extension lifecycle observer method: after " +
+                    "ProcessBean not called for a bean registered by the portable" +
+                    "extension";
+        
+        writer.write(msg + "\n");
+    }
+
+
+    private String testFrameworkBean(Bean<?> bean) {
+        String msg = "";
+        if (!bean.getQualifiers().contains(new AnnotationLiteral<Any>() {}) 
+                || !bean.getQualifiers().contains(new AnnotationLiteral<Default>() {}))  
+            msg += "FrameworkBean does not have the default expected qualifiers";
+        
+        if (!bean.getScope().equals(Dependent.class))
+            msg += "FrameworkBean scope is not dependent";
+        
+        if(!bean.getBeanClass().getName().equals(SomeFwkServiceImpl.class.getName()))
+            msg += "Framework Bean: Incorrect bean class";
+        return msg;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/README b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/README
new file mode 100644
index 0000000..64b0a7c
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/README
@@ -0,0 +1,5 @@
+Test
+- Testing portable extensions support 
+    - Bean interface
+    - getting all beans that exists in the application
+    - Registering a new Framework bean and ensure that is available for injection
\ No newline at end of file
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/build.properties b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/build.properties
new file mode 100644
index 0000000..3583686
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-make-framework-bean-available-for-injection"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/build.xml b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/build.xml
new file mode 100644
index 0000000..8894688
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/build.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/>
+        	<param name="cdi-extension.service" value="cdi-extension.service"/>
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/cdi-extension.service b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/cdi-extension.service
new file mode 100644
index 0000000..80fa6f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/cdi-extension.service
@@ -0,0 +1 @@
+test.extension.ServiceFrameworkExtension
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/client/test/client/WebTest.java
new file mode 100644
index 0000000..2c3167e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/client/test/client/WebTest.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "portable-extension-make-framework-bean-available-for-injection";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for portable extensions");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/descriptor/beans.xml
new file mode 100644
index 0000000..f075638
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/descriptor/beans.xml
@@ -0,0 +1,28 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+   <interceptors>
+      <class>test.beans.TransactionInterceptor</class>
+   </interceptors>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/beans/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/beans/Preferred.java
new file mode 100644
index 0000000..fa8fdb7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/beans/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/beans/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/beans/TestBean.java
new file mode 100644
index 0000000..4792d26
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/beans/TestBean.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+
+@Transactional
+@RequestScoped
+@Preferred
+public class TestBean {
+
+    public void m1() {
+        System.out.println("TestBean::m1 called");
+    }
+
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/beans/TransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/beans/TransactionInterceptor.java
new file mode 100644
index 0000000..374113e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/beans/TransactionInterceptor.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+import test.extension.ServiceFrameworkExtension;
+
+@Interceptor
+@Transactional
+public class TransactionInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TransactionInterceptor(ServiceFrameworkExtension myex){ //Injection of portable extension in a bean
+        if(myex == null) {
+            errorMessage += "Portable Extension Injection in Interceptor failed";
+        }
+    }
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("TransactionInterceptor::AroundInvoke");
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/beans/Transactional.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/beans/Transactional.java
new file mode 100644
index 0000000..eef70c9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/beans/Transactional.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.interceptor.InterceptorBinding;
+
+
+@Target({TYPE, METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface Transactional {
+
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/extension/FrameworkServiceFactory.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/extension/FrameworkServiceFactory.java
new file mode 100644
index 0000000..ae66fd9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/extension/FrameworkServiceFactory.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.extension;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.lang.reflect.Type;
+
+import test.fwk.FrameworkService;
+import test.fwk.SomeFwkServiceImpl;
+import test.fwk.SomeFwkServiceInterface;
+
+public class FrameworkServiceFactory {
+    public static Object getService(final Type type, final FrameworkService fs){
+        //NOTE:hard-coded for this test, but ideally should get the
+        //service implementation from the service registry
+        SomeFwkServiceInterface instance = 
+            (SomeFwkServiceInterface) lookupService(type, fs.waitTimeout());
+        
+        if (fs.dynamic()) {
+            InvocationHandler ih = new InvocationHandler() {
+                @Override
+                public Object invoke(Object proxy, Method method, Object[] args)
+                        throws Throwable {
+                    System.out.println("****************** Method " + method + " called on proxy");
+                    return method.invoke(lookupService(type, fs.waitTimeout()), args);
+                }
+            };
+            instance = (SomeFwkServiceInterface) 
+            Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), 
+                    new Class[]{SomeFwkServiceInterface.class}, ih); 
+        }
+        return instance;
+    }
+    
+    private static Object lookupService(Type type, int waitTimeout) {
+        if (type.equals(SomeFwkServiceInterface.class)){ 
+            return new SomeFwkServiceImpl("test");
+        }
+        return null;
+    }
+
+    public static void ungetService(Object serviceInstance){
+        //unget the service instance from the service registry
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/extension/ServiceFrameworkExtension.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/extension/ServiceFrameworkExtension.java
new file mode 100644
index 0000000..8a9f5b8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/extension/ServiceFrameworkExtension.java
@@ -0,0 +1,323 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.extension;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.enterprise.context.Dependent;
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Default;
+import javax.enterprise.inject.spi.AfterBeanDiscovery;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeforeBeanDiscovery;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.ProcessAnnotatedType;
+import javax.enterprise.inject.spi.ProcessBean;
+import javax.enterprise.inject.spi.ProcessInjectionTarget;
+import javax.enterprise.util.AnnotationLiteral;
+
+import test.fwk.FrameworkService;
+import test.fwk.SomeFwkServiceImpl;
+import test.fwk.SomeFwkServiceInterface;
+
+/**
+ * A portable extension that supports injection of custom framework
+ * services into Beans. 
+ * 
+ * @author Sivakumar Thyagarajan
+ */
+public class ServiceFrameworkExtension implements Extension{
+
+    public static boolean beforeBeanDiscoveryCalled = false;
+    public static boolean afterBeanDiscoveryCalled = false;
+    public static boolean afterProcessBeanCalled = false;
+    public static boolean processAnnotatedTypeCalled = false;
+    
+    /*
+     * A map of Framework Service Types to be injected and additional metadata
+     * about the FrameworkService to be injected.
+     */
+    private HashMap<Type, Set<FrameworkService>> frameworkServicesToBeInjected
+                                = new HashMap<Type, Set<FrameworkService>>();
+    private static final boolean DEBUG_ENABLED = false;
+
+
+    //Observers for container lifecycle events
+    void beforeBeanDiscovery(@Observes BeforeBeanDiscovery bdd){
+        debug("beforeBeanDiscovery" + bdd);
+        beforeBeanDiscoveryCalled = true;
+    }
+
+    <T> void processAnnotatedType(@Observes ProcessAnnotatedType<T> pat){
+        debug("Process annotated type" + pat.getAnnotatedType().getBaseType());
+        processAnnotatedTypeCalled = true;
+    }
+    
+    /**
+     * Observer for <code>ProcessInjectionTarget</code> events. This event is
+     * fired for every Java EE component class supporting injection that may be 
+     * instantiated by the container at runtime. Injections points of every 
+     * discovered enabled Java EE component is checked to see if there is a 
+     * request for injection of a framework service. 
+     */
+    void afterProcessInjectionTarget(@Observes ProcessInjectionTarget<?> pb){
+        debug("AfterProcessInjectionTarget" + pb.getAnnotatedType().getBaseType());
+        Set<InjectionPoint> ips = pb.getInjectionTarget().getInjectionPoints();
+        discoverServiceInjectionPoints(ips);
+    }
+    
+    /**
+     * Observer for <code>ProcessInjectionTarget</code> events. This event is
+     * fired fire an event for each enabled bean, interceptor or decorator 
+     * deployed in a bean archive, before registering the Bean object. 
+     * Injections points of every discovered enabled Java EE component is 
+     * checked to see if there is a request for injection of a framework 
+     * service. 
+     */
+    void afterProcessBean(@Observes ProcessBean pb){
+        afterProcessBeanCalled = true;
+        debug("afterProcessBean - " + pb.getAnnotated().getBaseType());
+        Set<InjectionPoint> ips = pb.getBean().getInjectionPoints();
+        discoverServiceInjectionPoints(ips);
+    }
+
+    /*
+     * Discover injection points where the framework service is requested
+     * through the <code>FrameworkService</code> qualifier and a map is 
+     * populated for all framework services that have been requested.
+     */
+    private void discoverServiceInjectionPoints(Set<InjectionPoint> ips) {
+        for (Iterator<InjectionPoint> iterator = ips.iterator(); 
+                                                    iterator.hasNext();) {
+            InjectionPoint injectionPoint = iterator.next();
+            Set<Annotation> qualifs = injectionPoint.getQualifiers();
+            for (Iterator<Annotation> qualifIter = qualifs.iterator(); 
+                                                    qualifIter.hasNext();) {
+                Annotation annotation = qualifIter.next();
+                if (annotation.annotationType().equals(FrameworkService.class)){
+                    printDebugForInjectionPoint(injectionPoint);
+                    //Keep track of service-type and its attributes
+                    System.out.println("---- Injection requested for " +
+                    		"framework service type " + injectionPoint.getType()
+                            + " and annotated with dynamic="
+                            + injectionPoint.getAnnotated()
+                                    .getAnnotation(FrameworkService.class)
+                                    .dynamic()
+                            + ", serviceCriteria="
+                            + injectionPoint.getAnnotated()
+                                    .getAnnotation(FrameworkService.class)
+                                    .serviceCriteria());
+                    //Add to list of framework services to be injected
+                    Type key = injectionPoint.getType();
+                    FrameworkService value = injectionPoint.getAnnotated()
+                    .getAnnotation(FrameworkService.class); 
+                    if (!frameworkServicesToBeInjected.containsKey(key)){
+                        frameworkServicesToBeInjected.put(key, new HashSet<FrameworkService>());
+                    }
+                    frameworkServicesToBeInjected.get(key).add(value);
+                    System.out.println(frameworkServicesToBeInjected.size());
+                    
+                }
+            }
+        }
+    }
+
+    /**
+     * Observer for <code>AfterBeanDiscovery</code> events. This 
+     * observer method is used to register <code>Bean</code>s for the framework
+     * services that have been requested to be injected. 
+     */
+    void afterBeanDiscovery(@Observes AfterBeanDiscovery abd){
+        afterBeanDiscoveryCalled = true;
+        debug("After Bean Discovery");
+        for (Iterator<Type> iterator = this.frameworkServicesToBeInjected.keySet().iterator(); 
+                                                iterator.hasNext();) {
+            Type type =  iterator.next();
+            //If the injection point's type is not a Class or Interface, we
+            //don't know how to handle this. 
+            if (!(type instanceof Class)) {
+                System.out.println("Unknown type:" + type);
+                abd.addDefinitionError(new UnsupportedOperationException(
+                        "Injection target type " + type + "not supported"));
+                break; //abort deployment
+            }
+            //Add the Bean representing the framework service so that it
+            //is available for injection
+            addBean(abd, type, this.frameworkServicesToBeInjected.get(type));
+        }
+    }
+
+    /*
+     * Add a <code>Bean</code> for the framework service requested. Instantiate
+     * or discover the bean from the framework service registry, 
+     * and return a reference to the service if a dynamic reference is requested.
+     */
+    private void addBean(AfterBeanDiscovery abd, final Type type, 
+            final Set<FrameworkService> frameworkServices) {
+        for (Iterator<FrameworkService> iterator = frameworkServices.iterator(); iterator
+                .hasNext();) {
+            final FrameworkService frameworkService = iterator.next();
+            System.out.println(" --- Adding a framework service BEAN " + type + " for " + frameworkService);
+            abd.addBean(new FrameworkServiceBean(type, frameworkService));
+        }
+    }
+    
+
+    private final class FrameworkServiceBean implements Bean {
+        private final Type type;
+        private final FrameworkService frameworkService;
+
+        private FrameworkServiceBean(Type type,
+                FrameworkService frameworkService) {
+            this.type = type;
+            this.frameworkService = frameworkService;
+        }
+
+        @Override
+        public Object create(CreationalContext arg0) {
+            //get the service from the service registry
+            return FrameworkServiceFactory.getService(type, frameworkService);
+        }
+
+        @Override
+        public void destroy(Object instance,
+                CreationalContext creationalContext) {
+          System.out.println("destroy::" + instance);
+          //unget the service reference
+          FrameworkServiceFactory.ungetService(instance);
+        }
+
+        @Override
+        public Class getBeanClass() {
+            return (Class)type;
+        }
+
+        @Override
+        public Set<InjectionPoint> getInjectionPoints() {
+          return Collections.emptySet();
+        }
+
+        @Override
+        public String getName() {
+            return type + "_dynamic_" + frameworkService.dynamic()
+                    + "_criteria_" + frameworkService.serviceCriteria() 
+                    + "_waitTimeout" + frameworkService.waitTimeout();
+        }
+
+        @Override
+        public Set<Annotation> getQualifiers() {
+            Set<Annotation> s = new HashSet<Annotation>();
+            s.add(new AnnotationLiteral<Default>() {});
+            s.add(new AnnotationLiteral<Any>() {});
+            //Add the appropriate parameters to the FrameworkService qualifier
+            //as requested in the injection point
+            s.add(new FrameworkServiceQualifierType(frameworkService)); 
+            return s;
+        }
+
+        @Override
+        public Class<? extends Annotation> getScope() {
+            return Dependent.class;
+        }
+
+        @Override
+        public Set<Class<? extends Annotation>> getStereotypes() {
+            return Collections.emptySet();
+        }
+
+        @Override
+        public Set<Type> getTypes() {
+            Set<Type> s = new HashSet<Type>();
+            s.add(type);
+            s.add(Object.class);
+            return s;
+        }
+
+        @Override
+        public boolean isAlternative() {
+            return false;
+        }
+
+        @Override
+        public boolean isNullable() {
+            return false;
+        }
+    }
+
+    /*
+     * Represents an annotation type instance of FrameworkService
+     * with parameters equal to those specified in the injection point
+     */
+    private final class FrameworkServiceQualifierType 
+    extends AnnotationLiteral<FrameworkService> implements FrameworkService {
+        private String serviceCriteria = "";
+        private boolean dynamic = false;
+        private int waitTimeout = -1;
+
+        public FrameworkServiceQualifierType(FrameworkService frameworkService){
+            this.serviceCriteria = frameworkService.serviceCriteria();
+            this.dynamic = frameworkService.dynamic();
+            this.waitTimeout  = frameworkService.waitTimeout();
+        }
+        @Override
+        public String serviceCriteria(){
+            return this.serviceCriteria;
+        }
+
+        @Override
+        public boolean dynamic() {
+            return this.dynamic;
+        }
+
+        @Override
+        public int waitTimeout() {
+            return this.waitTimeout;
+        }
+    }
+    
+    private void debug(String string) {
+        if(DEBUG_ENABLED)
+            System.out.println("MyExtension:: " + string);
+        
+    }
+
+    private void printDebugForInjectionPoint(InjectionPoint injectionPoint) {
+        if (DEBUG_ENABLED) {
+            System.out.println("@@@@@@@ INJECTION-POINT: Annotation:"
+                    + injectionPoint.getAnnotated()); // annotatedfield
+            System.out.print(" ,Bean:" + injectionPoint.getBean());// bean
+            System.out.print(" ,Class:" + injectionPoint.getClass()); // r untime
+                                                           // class?
+            System.out.print(" ,Member:" + injectionPoint.getMember());// Field
+            System.out.print(" ,Qualifiers:" + injectionPoint.getQualifiers());// qualifiers
+            System.out.print(" ,Type:" + injectionPoint.getType());// type of
+                                                         // injection
+                                                         // point
+        }
+    }
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/fwk/FrameworkService.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/fwk/FrameworkService.java
new file mode 100644
index 0000000..542eef2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/fwk/FrameworkService.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.fwk;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+
+/**
+ * A CDI Qualifier that represents a reference to a
+ * service in the framework. If this qualifiers annotates an injection point, 
+ * the framework extension discovers and instantiates
+ * a service implementing the service interface type of the injection point
+ * and makes it available for injection to that injection point.
+ */ 
+public @interface FrameworkService {
+    /**
+     * Determines if the service reference that is injected
+     * refers to a dynamic proxy or the actual service reference obtained
+     * from the framework service registry  
+     */
+   boolean dynamic() default false; //dynamic
+   
+   /**
+    * service discovery criteria
+    */
+   String serviceCriteria() default ""; 
+   
+   /**
+    * wait specified in millis. -1 indicates indefinite wait
+    */
+   int waitTimeout() default -1; 
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/fwk/SomeFwkServiceImpl.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/fwk/SomeFwkServiceImpl.java
new file mode 100644
index 0000000..fb08b08
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/fwk/SomeFwkServiceImpl.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.fwk;
+
+public class SomeFwkServiceImpl implements SomeFwkServiceInterface {
+    
+    public SomeFwkServiceImpl(String t){
+        System.out.println("SomeFrameworkClass:" + t);
+    }
+
+    @Override
+    public boolean fooMethod() {
+        System.out.println("SomeFwkServiceImpl::fooMethod called");
+        return true;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/fwk/SomeFwkServiceInterface.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/fwk/SomeFwkServiceInterface.java
new file mode 100644
index 0000000..809bbe0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/fwk/SomeFwkServiceInterface.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.fwk;
+
+public interface SomeFwkServiceInterface {
+    public boolean fooMethod();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/servlet/PortableExtensionBeanRegistrationTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/servlet/PortableExtensionBeanRegistrationTestServlet.java
new file mode 100644
index 0000000..f64b749
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/new-bean-registration/servlet/test/servlet/PortableExtensionBeanRegistrationTestServlet.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.lang.reflect.Proxy;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.enterprise.context.Dependent;
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Default;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.util.AnnotationLiteral;
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.Preferred;
+import test.beans.TestBean;
+import test.beans.TransactionInterceptor;
+import test.extension.ServiceFrameworkExtension;
+import test.fwk.FrameworkService;
+import test.fwk.SomeFwkServiceImpl;
+import test.fwk.SomeFwkServiceInterface;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class PortableExtensionBeanRegistrationTestServlet extends HttpServlet {
+    @Inject
+    @Preferred
+    TestBean tb;
+    
+    @Inject
+    BeanManager bm;
+    
+    @Inject
+    @FrameworkService(serviceCriteria="TEST", dynamic=true)
+    SomeFwkServiceInterface sfc_proxy;
+
+    @Inject
+    @FrameworkService(serviceCriteria="FOO", dynamic=false)
+    SomeFwkServiceInterface sfc_unproxied;
+
+    String msg = "";
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+
+        if (tb == null)
+            msg += "Injection of request scoped bean failed";
+
+        tb.m1();
+        if (!TransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke not called";
+        tb.m2();
+        if (TransactionInterceptor.aroundInvokeInvocationCount != 2)
+            msg += "Business method interceptor invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =2, actual="
+                    + TransactionInterceptor.aroundInvokeInvocationCount;
+        if (!TransactionInterceptor.errorMessage.trim().equals(""))
+            msg += TransactionInterceptor.errorMessage;
+        
+        //check if our portable extension was called
+        if (!ServiceFrameworkExtension.beforeBeanDiscoveryCalled)
+            msg += "Portable Extension lifecycle observer method: " +
+            		"beforeBeanDiscovery not called";
+
+        if (!ServiceFrameworkExtension.afterBeanDiscoveryCalled)
+            msg += "Portable Extension lifecycle observer method: " +
+            		"afterBeanDiscovery not called or injection of BeanManager " +
+            		"in an observer method failed";
+        
+        if (!ServiceFrameworkExtension.processAnnotatedTypeCalled)
+            msg += "Portable Extension lifecycle observer method: process " +
+            		"annotated type not called";
+
+        //BeanManager lookup
+        if (bm == null)
+            msg += "Injection of BeanManager into servlet failed";
+        
+        //Get all beans and count the number of beans in the test package
+        Set<Bean<?>> allBeans = bm.getBeans(Object.class, new AnnotationLiteral<Any>(){});
+
+        if (sfc_proxy == null)
+            msg += "Injection of (proxied) service bean added via extension not available";
+
+        if (sfc_unproxied == null)
+            msg += "Injection of (unproxied) service bean added via extension not available";
+
+        //check if proxied service reference is indeed proxied
+        if (!Proxy.isProxyClass(sfc_proxy.getClass()))
+            msg += "Expected Proxied service reference, but got back an " +
+            		"unproxied service reference ";
+        //invoke a method o
+        if(!sfc_proxy.fooMethod())
+            msg += "invocation of method on proxied service failed";
+        
+        //check if unproxied service reference is not proxied
+        if (Proxy.isProxyClass(sfc_unproxied.getClass()))
+            msg += "Expected unProxied service reference, but got back an " +
+                    "proxied service reference ";
+        //invoke a method o
+        if(!sfc_unproxied.fooMethod())
+            msg += "invocation of method on unproxied service failed";
+        
+        for (Iterator<Bean<?>> iterator = allBeans.iterator(); iterator.hasNext();) {
+            Bean<?> bean = iterator.next();
+            if (bean.getBeanClass().getName().contains("SomeFramework")){
+                msg += testFrameworkBean(bean);
+            }
+        }
+        
+        if (!ServiceFrameworkExtension.afterProcessBeanCalled)
+            msg += "Portable Extension lifecycle observer method: after " +
+                    "ProcessBean not called for a bean registered by the portable" +
+                    "extension";
+        
+        writer.write(msg + "\n");
+    }
+
+
+    private String testFrameworkBean(Bean<?> bean) {
+        String msg = "";
+        if (!bean.getQualifiers().contains(new AnnotationLiteral<Any>() {}) 
+                || !bean.getQualifiers().contains(new AnnotationLiteral<Default>() {}))  
+            msg += "FrameworkBean does not have the default expected qualifiers";
+        
+        if (!bean.getScope().equals(Dependent.class))
+            msg += "FrameworkBean scope is not dependent";
+        
+        if(!bean.getBeanClass().getName().equals(SomeFwkServiceImpl.class.getName()))
+            msg += "Framework Bean: Incorrect bean class";
+        return msg;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/README b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/README
new file mode 100644
index 0000000..19a31f9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/README
@@ -0,0 +1,2 @@
+Test to reproduce issue 11923
+package private constructor for an Extension
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/build.properties b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/build.properties
new file mode 100644
index 0000000..8dd1c12
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-package-private-constructor-in-portable-extension"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/build.xml b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/build.xml
new file mode 100644
index 0000000..8894688
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/build.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/>
+        	<param name="cdi-extension.service" value="cdi-extension.service"/>
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/cdi-extension.service b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/cdi-extension.service
new file mode 100644
index 0000000..dc65430
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/cdi-extension.service
@@ -0,0 +1 @@
+test.extension.PackagePrivateConstructorExtension
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/client/test/client/WebTest.java
new file mode 100644
index 0000000..61bcfa7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/client/test/client/WebTest.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "package-private-constructor-in-portable-extension";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for portable extensions");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/descriptor/beans.xml
new file mode 100644
index 0000000..f075638
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/descriptor/beans.xml
@@ -0,0 +1,28 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+   <interceptors>
+      <class>test.beans.TransactionInterceptor</class>
+   </interceptors>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/beans/DuplicateTestBean.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/beans/DuplicateTestBean.java
new file mode 100644
index 0000000..e44cd09
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/beans/DuplicateTestBean.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+
+@Transactional
+@RequestScoped
+@Preferred
+public class DuplicateTestBean extends TestBean{
+
+    public void m1() {
+        System.out.println("TestBean::m1 called");
+    }
+
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/beans/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/beans/Preferred.java
new file mode 100644
index 0000000..fa8fdb7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/beans/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/beans/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/beans/TestBean.java
new file mode 100644
index 0000000..4792d26
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/beans/TestBean.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+
+@Transactional
+@RequestScoped
+@Preferred
+public class TestBean {
+
+    public void m1() {
+        System.out.println("TestBean::m1 called");
+    }
+
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/beans/TestDependentBean.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/beans/TestDependentBean.java
new file mode 100644
index 0000000..1c15313
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/beans/TestDependentBean.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public class TestDependentBean {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/beans/TransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/beans/TransactionInterceptor.java
new file mode 100644
index 0000000..13d1aea
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/beans/TransactionInterceptor.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+import test.extension.PackagePrivateConstructorExtension;
+
+@Interceptor
+@Transactional
+public class TransactionInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestDependentBean tb;
+    
+    @Inject
+    TransactionInterceptor(PackagePrivateConstructorExtension myex){ //Injection of portable extension in a bean
+        if(myex == null) {
+            errorMessage += "Portable Extension Injection in Interceptor failed";
+        }
+    }
+    
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("TransactionInterceptor::AroundInvoke");
+        if (tb == null) errorMessage += "Dependency Injection " +
+        		"into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/beans/Transactional.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/beans/Transactional.java
new file mode 100644
index 0000000..eef70c9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/beans/Transactional.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.interceptor.InterceptorBinding;
+
+
+@Target({TYPE, METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface Transactional {
+
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/extension/Interceptors.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/extension/Interceptors.java
new file mode 100644
index 0000000..b4c87e5
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/extension/Interceptors.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.extension;
+
+
+import javax.inject.Inject;
+
+public class Interceptors
+{
+   
+   @Inject
+   private PackagePrivateConstructorExtension interceptorExtension;
+   
+   private Interceptors()
+   {
+   }
+   
+   public boolean isInterceptorEnabled(Class<?> clazz)
+   {
+      return interceptorExtension.getEnabledInterceptors().contains(clazz);
+   }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/extension/PackagePrivateConstructorExtension.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/extension/PackagePrivateConstructorExtension.java
new file mode 100644
index 0000000..87c672b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/extension/PackagePrivateConstructorExtension.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.extension;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.AfterBeanDiscovery;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.BeforeBeanDiscovery;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.Interceptor;
+import javax.enterprise.inject.spi.ProcessAnnotatedType;
+import javax.enterprise.inject.spi.ProcessBean;
+
+import test.beans.DuplicateTestBean;
+
+public class PackagePrivateConstructorExtension implements Extension{
+    public static boolean beforeBeanDiscoveryCalled = false;
+    public static boolean afterBeanDiscoveryCalled = false;
+    public static boolean processAnnotatedTypeCalled = false;
+    public static boolean packagePrivateConstructorCalled = false;
+    private Collection<Class<?>> enabledInterceptors;
+    /* package private */ PackagePrivateConstructorExtension(){
+        System.out.println("In MyExtension ctor");
+        PackagePrivateConstructorExtension.packagePrivateConstructorCalled = true;
+        this.enabledInterceptors = Collections.synchronizedSet(new
+                HashSet<Class<?>>());
+    }
+    
+   @SuppressWarnings("unused")
+   void observeInterceptors(@Observes ProcessBean<?> pmb)
+   {
+      if (pmb.getBean() instanceof Interceptor<?>)
+      {
+         this.enabledInterceptors.add(pmb.getBean().getBeanClass());
+      }
+   }
+   
+   Collection<Class<?>> getEnabledInterceptors()
+   {
+      return enabledInterceptors;
+   }
+    
+    void beforeBeanDiscovery(@Observes BeforeBeanDiscovery bdd){
+        System.out.println("MyExtension::beforeBeanDiscovery" + bdd);
+        beforeBeanDiscoveryCalled = true;
+    }
+    
+    <T> void processAnnotatedType(@Observes ProcessAnnotatedType<T> pat){
+        System.out.println("MyExtension:Process annotated type" + pat.getAnnotatedType().getBaseType());
+        processAnnotatedTypeCalled = true;
+        //Vetoing the processing of DuplicateTestBean
+        //If this is not vetoed, at the InjectionPoint in Servlet, there would be
+        //an ambiguous dependency due to TestBean and DuplicateTestBean
+        if (pat.getAnnotatedType().getBaseType().equals(DuplicateTestBean.class)){
+            pat.veto();
+        }
+    }
+    
+    void afterBeanDiscovery(@Observes AfterBeanDiscovery abd, BeanManager bm){
+        System.out.println("MyExtension: abd: " + abd + " BeanManager: " + bm);
+        
+        if (bm != null) {
+            //ensure a valid BeanManager is injected
+            afterBeanDiscoveryCalled = true;
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/servlet/PackagePrivateConstructorInPortableExtensionTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/servlet/PackagePrivateConstructorInPortableExtensionTestServlet.java
new file mode 100644
index 0000000..8f312d1
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/package-private-extension-constructor/servlet/test/servlet/PackagePrivateConstructorInPortableExtensionTestServlet.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.util.AnnotationLiteral;
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.Preferred;
+import test.beans.TestBean;
+import test.beans.TransactionInterceptor;
+import test.extension.PackagePrivateConstructorExtension;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class PackagePrivateConstructorInPortableExtensionTestServlet extends HttpServlet {
+    @Inject
+    @Preferred
+    TestBean tb;
+    
+    @Inject
+    BeanManager bm;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        if (tb == null)
+            msg += "Injection of request scoped bean failed";
+
+        tb.m1();
+        if (!TransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke not called";
+        tb.m2();
+        if (TransactionInterceptor.aroundInvokeInvocationCount != 2)
+            msg += "Business method interceptor invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =2, actual="
+                    + TransactionInterceptor.aroundInvokeInvocationCount;
+        if (!TransactionInterceptor.errorMessage.trim().equals(""))
+            msg += TransactionInterceptor.errorMessage;
+        
+        //check if our portable extension was called
+        if (!PackagePrivateConstructorExtension.packagePrivateConstructorCalled)
+            msg += "Portable Extension package private constructor:  not called";
+        
+        if (!PackagePrivateConstructorExtension.beforeBeanDiscoveryCalled)
+            msg += "Portable Extension lifecycle observer method: " +
+            		"beforeBeanDiscovery not called";
+
+        if (!PackagePrivateConstructorExtension.afterBeanDiscoveryCalled)
+            msg += "Portable Extension lifecycle observer method: " +
+            		"afterBeanDiscovery not called or injection of BeanManager " +
+            		"in an observer method failed";
+        
+        if (!PackagePrivateConstructorExtension.processAnnotatedTypeCalled)
+            msg += "Portable Extension lifecycle observer method: process " +
+            		"annotated type not called";
+
+        if((bm.getBeans(PackagePrivateConstructorExtension.class, new AnnotationLiteral<Any>(){}).iterator().next().getClass()) == null) 
+            msg += "Portable Extension not available for lookup through BeanManager";
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/process-injection-target/README b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/process-injection-target/README
new file mode 100644
index 0000000..eac5e9a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/process-injection-target/README
@@ -0,0 +1,4 @@
+Test
+ Test for issue: 11135
+ Extension sets its own InjectionTarget and check if that object is used
+ for injection
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/process-injection-target/build.properties b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/process-injection-target/build.properties
new file mode 100644
index 0000000..e72b444
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/process-injection-target/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-process-injection-target"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/process-injection-target/build.xml b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/process-injection-target/build.xml
new file mode 100644
index 0000000..8894688
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/process-injection-target/build.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/>
+        	<param name="cdi-extension.service" value="cdi-extension.service"/>
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/process-injection-target/cdi-extension.service b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/process-injection-target/cdi-extension.service
new file mode 100644
index 0000000..4d6314f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/process-injection-target/cdi-extension.service
@@ -0,0 +1 @@
+test.extension.MyExtension
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/process-injection-target/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/process-injection-target/client/test/client/WebTest.java
new file mode 100644
index 0000000..c574dfd
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/process-injection-target/client/test/client/WebTest.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * @author Jitendra Kotamraju
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = 
+		"portable-extensions-process-injection-target";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private final String host;
+    private final String port;
+    private final String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for process injection target extension");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl";
+        System.out.println("opening connection to " + url);
+
+        InputStream in = new URL(url).openStream();
+        BufferedReader rdr = new BufferedReader(new InputStreamReader(in));
+        String line = rdr.readLine();
+        if (EXPECTED_RESPONSE.equals(line)) {
+            stat.addStatus(TEST_NAME, stat.PASS);
+        } else {
+            System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        }
+        rdr.close();
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/process-injection-target/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/process-injection-target/descriptor/beans.xml
new file mode 100644
index 0000000..1d355f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/process-injection-target/descriptor/beans.xml
@@ -0,0 +1,25 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/process-injection-target/servlet/test/extension/MyExtension.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/process-injection-target/servlet/test/extension/MyExtension.java
new file mode 100644
index 0000000..6472681
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/process-injection-target/servlet/test/extension/MyExtension.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.extension;
+
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.*;
+import javax.enterprise.context.spi.*;
+
+import test.servlet.PortableExtensionInjectionTargetTestServlet;
+
+import java.util.Set;
+
+/**
+ * Test for issue: 11135
+ *
+ * Extension sets its own injection target and check if that object is used
+ * for injection
+ *
+ * @author Jitendra Kotamraju
+ */
+public class MyExtension implements Extension {
+    public static boolean processAnnotatedTypeCalled = false;
+
+    public void observe(final @Observes ProcessInjectionTarget<PortableExtensionInjectionTargetTestServlet> pit) {
+        PortableExtensionInjectionTargetTestServlet.pitCalled = true;
+
+        final InjectionTarget<PortableExtensionInjectionTargetTestServlet> it = pit.getInjectionTarget();
+        pit.setInjectionTarget(new InjectionTarget<PortableExtensionInjectionTargetTestServlet>() {
+
+            public void inject(PortableExtensionInjectionTargetTestServlet instance, CreationalContext<PortableExtensionInjectionTargetTestServlet> ctx) {
+                it.inject(instance, ctx);
+                instance.pitsInjectionTargetUsed = true;
+            }
+
+            public void postConstruct(PortableExtensionInjectionTargetTestServlet instance) {
+                it.postConstruct(instance);
+            }
+
+            public void preDestroy(PortableExtensionInjectionTargetTestServlet instance) {
+                it.preDestroy(instance);
+            }
+
+            public void dispose(PortableExtensionInjectionTargetTestServlet instance) {        
+            }
+
+            public Set<InjectionPoint> getInjectionPoints() {
+                return it.getInjectionPoints();
+            }
+
+            public PortableExtensionInjectionTargetTestServlet produce(CreationalContext<PortableExtensionInjectionTargetTestServlet> ctx) {
+                return it.produce(ctx);
+            }
+
+        });
+
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/process-injection-target/servlet/test/servlet/PortableExtensionInjectionTargetTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/process-injection-target/servlet/test/servlet/PortableExtensionInjectionTargetTestServlet.java
new file mode 100644
index 0000000..e2e9d9d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/process-injection-target/servlet/test/servlet/PortableExtensionInjectionTargetTestServlet.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.enterprise.context.ConversationScoped;
+import javax.enterprise.context.RequestScoped;
+import javax.enterprise.context.SessionScoped;
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.InjectionTarget;
+import javax.inject.Inject;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author Jitendra Kotamraju
+ */
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class PortableExtensionInjectionTargetTestServlet extends HttpServlet {
+    
+//    @Inject
+//    BeanManager bm;
+    
+    String msg = "";
+
+    public static volatile boolean pitCalled;
+    public volatile boolean pitsInjectionTargetUsed;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+
+        if (!pitCalled) {
+            msg += " MyExtension's observe(ProcessInjectionTarget) is not called";
+        }
+
+        if (!pitsInjectionTargetUsed) {
+            msg += " MyExtension's replaced InjectionTarget is not used";
+        }
+        
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/README b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/README
new file mode 100644
index 0000000..bd0e702
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/README
@@ -0,0 +1,9 @@
+Test
+- Testing portable extensions support 
+    - Creating a portable extension and registering the extension as a 
+    service provider
+    - Injection of Extension in Beans(Interceptor)
+    - Extensions can observe container lifecycle events
+    - Extensions can modify container's metamodel (veto an annotated type's 
+    processing)
+    - Extension's observer method may inject a BeanManager  
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/build.properties b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/build.properties
new file mode 100644
index 0000000..e784675
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-simple-portable-extension"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/build.xml b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/build.xml
new file mode 100644
index 0000000..8894688
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/build.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/>
+        	<param name="cdi-extension.service" value="cdi-extension.service"/>
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/cdi-extension.service b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/cdi-extension.service
new file mode 100644
index 0000000..4d6314f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/cdi-extension.service
@@ -0,0 +1 @@
+test.extension.MyExtension
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/client/test/client/WebTest.java
new file mode 100644
index 0000000..174d171
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/client/test/client/WebTest.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "portable-extensions-simple-extension";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for portable extensions");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/descriptor/beans.xml
new file mode 100644
index 0000000..f075638
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/descriptor/beans.xml
@@ -0,0 +1,28 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+   <interceptors>
+      <class>test.beans.TransactionInterceptor</class>
+   </interceptors>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/servlet/test/beans/DuplicateTestBean.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/servlet/test/beans/DuplicateTestBean.java
new file mode 100644
index 0000000..e44cd09
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/servlet/test/beans/DuplicateTestBean.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+
+@Transactional
+@RequestScoped
+@Preferred
+public class DuplicateTestBean extends TestBean{
+
+    public void m1() {
+        System.out.println("TestBean::m1 called");
+    }
+
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/servlet/test/beans/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/servlet/test/beans/Preferred.java
new file mode 100644
index 0000000..fa8fdb7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/servlet/test/beans/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/servlet/test/beans/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/servlet/test/beans/TestBean.java
new file mode 100644
index 0000000..4792d26
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/servlet/test/beans/TestBean.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+
+@Transactional
+@RequestScoped
+@Preferred
+public class TestBean {
+
+    public void m1() {
+        System.out.println("TestBean::m1 called");
+    }
+
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/servlet/test/beans/TestDependentBean.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/servlet/test/beans/TestDependentBean.java
new file mode 100644
index 0000000..1c15313
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/servlet/test/beans/TestDependentBean.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public class TestDependentBean {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/servlet/test/beans/TransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/servlet/test/beans/TransactionInterceptor.java
new file mode 100644
index 0000000..0b78e5f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/servlet/test/beans/TransactionInterceptor.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+import test.extension.MyExtension;
+
+@Interceptor
+@Transactional
+public class TransactionInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestDependentBean tb;
+    
+    @Inject
+    TransactionInterceptor(MyExtension myex){ //Injection of portable extension in a bean
+        if(myex == null) {
+            errorMessage += "Portable Extension Injection in Interceptor failed";
+        }
+    }
+    
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("TransactionInterceptor::AroundInvoke");
+        if (tb == null) errorMessage += "Dependency Injection " +
+        		"into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/servlet/test/beans/Transactional.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/servlet/test/beans/Transactional.java
new file mode 100644
index 0000000..eef70c9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/servlet/test/beans/Transactional.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.interceptor.InterceptorBinding;
+
+
+@Target({TYPE, METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface Transactional {
+
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/servlet/test/extension/MyExtension.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/servlet/test/extension/MyExtension.java
new file mode 100644
index 0000000..22c7415
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/servlet/test/extension/MyExtension.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.extension;
+
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.AfterBeanDiscovery;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.BeforeBeanDiscovery;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.ProcessAnnotatedType;
+
+import test.beans.DuplicateTestBean;
+
+public class MyExtension implements Extension{
+    public static boolean beforeBeanDiscoveryCalled = false;
+    public static boolean afterBeanDiscoveryCalled = false;
+    public static boolean processAnnotatedTypeCalled = false;
+    public MyExtension(){
+        System.out.println("In MyExtension ctor");
+        //new Throwable().printStackTrace();
+    }
+    
+    void beforeBeanDiscovery(@Observes BeforeBeanDiscovery bdd){
+        System.out.println("MyExtension::beforeBeanDiscovery" + bdd);
+        beforeBeanDiscoveryCalled = true;
+    }
+    
+    <T> void processAnnotatedType(@Observes ProcessAnnotatedType<T> pat){
+        System.out.println("MyExtension:Process annotated type" + pat.getAnnotatedType().getBaseType());
+        processAnnotatedTypeCalled = true;
+        //Vetoing the processing of DuplicateTestBean
+        //If this is not vetoed, at the InjectionPoint in Servlet, there would be
+        //an ambiguous dependency due to TestBean and DuplicateTestBean
+        if (pat.getAnnotatedType().getBaseType().equals(DuplicateTestBean.class)){
+            pat.veto();
+        }
+    }
+    
+    void afterBeanDiscovery(@Observes AfterBeanDiscovery abd, BeanManager bm){
+        System.out.println("MyExtension: abd: " + abd + " BeanManager: " + bm);
+        
+        if (bm != null) {
+            //ensure a valid BeanManager is injected
+            afterBeanDiscoveryCalled = true;
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/servlet/test/servlet/SimplePortableExtensionTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/servlet/test/servlet/SimplePortableExtensionTestServlet.java
new file mode 100644
index 0000000..032fefd
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/portable-extensions/simple-portable-extension/servlet/test/servlet/SimplePortableExtensionTestServlet.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.util.AnnotationLiteral;
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.Preferred;
+import test.beans.TestBean;
+import test.beans.TransactionInterceptor;
+import test.extension.MyExtension;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class SimplePortableExtensionTestServlet extends HttpServlet {
+    @Inject
+    @Preferred
+    TestBean tb;
+    
+    @Inject
+    BeanManager bm;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        if (tb == null)
+            msg += "Injection of request scoped bean failed";
+
+        tb.m1();
+        if (!TransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke not called";
+        tb.m2();
+        if (TransactionInterceptor.aroundInvokeInvocationCount != 2)
+            msg += "Business method interceptor invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =2, actual="
+                    + TransactionInterceptor.aroundInvokeInvocationCount;
+        if (!TransactionInterceptor.errorMessage.trim().equals(""))
+            msg += TransactionInterceptor.errorMessage;
+        
+        //check if our portable extension was called
+        if (!MyExtension.beforeBeanDiscoveryCalled)
+            msg += "Portable Extension lifecycle observer method: " +
+            		"beforeBeanDiscovery not called";
+
+        if (!MyExtension.afterBeanDiscoveryCalled)
+            msg += "Portable Extension lifecycle observer method: " +
+            		"afterBeanDiscovery not called or injection of BeanManager " +
+            		"in an observer method failed";
+        
+        if (!MyExtension.processAnnotatedTypeCalled)
+            msg += "Portable Extension lifecycle observer method: process " +
+            		"annotated type not called";
+
+        if((bm.getBeans(MyExtension.class, new AnnotationLiteral<Any>(){}).iterator().next().getClass()) == null) 
+            msg += "Portable Extension not available for lookup through BeanManager";
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/build.xml b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/build.xml
new file mode 100644
index 0000000..b1febf6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/build.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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="prodmeth-test" default="usage" basedir=".">
+
+    <property name="prodmeth-target" value="all"/>
+
+    <target name="run-test">
+        <antcall target="prodmeth">
+        <param name="prodmeth-target" value="run-test"/>
+        </antcall>
+    </target>
+
+    <target name="all">
+        <antcall target="prodmeth">
+        <param name="prodmeth-target" value="all"/>
+        </antcall>
+    </target>
+
+    <target name="clean">
+        <antcall target="prodmeth">
+        <param name="prodmeth-target" value="clean"/>
+        </antcall>
+    </target>
+
+    <target name="build">
+        <antcall target="prodmeth">
+        <param name="prodmeth-target" value="build"/>
+        </antcall>
+    </target>
+
+    <target name="setup">
+        <antcall target="prodmeth">
+        <param name="prodmeth-target" value="setup"/>
+        </antcall>
+    </target>
+
+    <target name="deploy">
+        <antcall target="prodmeth">
+        <param name="prodmeth-target" value="deploy"/>
+        </antcall>
+    </target>
+
+    <target name="undeploy">
+        <antcall target="prodmeth">
+        <param name="prodmeth-target" value="undeploy"/>
+        </antcall>
+    </target>
+
+    <target name="unsetup">
+        <antcall target="prodmeth">
+        <param name="prodmeth-target" value="unsetup"/>
+        </antcall>
+    </target>
+
+    <target name="run">
+        <antcall target="prodmeth">
+        <param name="prodmeth-target" value="run"/>
+        </antcall>
+    </target>
+
+    <target name="prodmeth">
+        <record name="prodmeth.output" action="start" />
+            <ant dir="producer-method-disposes" target="${prodmeth-target}"/>
+            <ant dir="producer-method-qualifiers" target="${prodmeth-target}"/>
+            <ant dir="producer-method-runtimepolymorphism" target="${prodmeth-target}"/>
+        <record name="prodmeth.output" action="stop" />
+    </target>
+
+    <target name="usage">
+	<echo> Usage:
+		ant all (Executes all the prodmeth tests)
+		ant clean (cleans all the prodmeth tests)
+		ant build (builds all the prodmeth tests)
+		ant setup (sets up all resources for prodmeth tests)
+		ant deploy (deploys all the prodmeth apps)
+		ant run (Executes all the prodmeth tests)
+		ant undeploy (undeploys all the  prodmeth apps)
+		ant unsetup (unsets all resources for prodmeth tests)
+	</echo>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/README b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/README
new file mode 100644
index 0000000..96ee3ef
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/README
@@ -0,0 +1,3 @@
+Test
+- Destruction of a bean by a matching disposer method, defined by the same class as the producer method
+- Test injection of method parameters into disposer methods
\ No newline at end of file
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/build.properties b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/build.properties
new file mode 100644
index 0000000..99e385b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-producer-methods-disposermethods"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/build.xml b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/build.xml
new file mode 100644
index 0000000..0b9b3a3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/build.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/client/test/client/WebTest.java
new file mode 100644
index 0000000..c007bb6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/client/test/client/WebTest.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "producer-methods-disposer";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for producer methods");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception{
+        actual_invoke("myurl1");
+        actual_invoke("myurl2");
+    }
+    private void actual_invoke(String urlFragment) throws Exception {
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/" + urlFragment;
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/servlet/test/beans/BeanSetup.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/servlet/test/beans/BeanSetup.java
new file mode 100644
index 0000000..1736754
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/servlet/test/beans/BeanSetup.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+import javax.enterprise.inject.Disposes;
+import javax.enterprise.inject.Produces;
+
+public class BeanSetup {
+    public static boolean disposeCalledForPreferred = false;
+    public static String disposeCalledForTestQualifierError = "";
+
+    @RequestScoped
+    @Produces
+    @Preferred
+    public TestRequestScopedBean get(TestRequestScopedBean trs) {
+        return trs;
+    }
+
+    void dispose(@Disposes @Preferred TestRequestScopedBean trs) {
+        System.out
+                .println("Dispose method in BeanSetup for Preferred called");
+        disposeCalledForPreferred = true;
+    }
+
+    @RequestScoped
+    @Produces
+    @TestQualifier
+    public TestRequestScopedBean getTestQualifier(TestRequestScopedBean trs) {
+        return trs;
+    }
+
+    //test injection of TestBean in this disposer method
+    void disposeTestQualifier(
+            @Disposes @TestQualifier TestRequestScopedBean trs, TestBean tb) {
+        System.out
+                .println("Dispose method in BeanSetup for testQualifier called");
+        if (tb != null) {
+            disposeCalledForTestQualifierError = "dispose method for testqualifier " +
+            		"called without injecting TestBean";
+        }
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/servlet/test/beans/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/servlet/test/beans/Preferred.java
new file mode 100644
index 0000000..e8dfef4
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/servlet/test/beans/Preferred.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({TYPE, METHOD, PARAMETER, FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/servlet/test/beans/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/servlet/test/beans/TestBean.java
new file mode 100644
index 0000000..49b95c1
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/servlet/test/beans/TestBean.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+
+public class TestBean {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/servlet/test/beans/TestQualifier.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/servlet/test/beans/TestQualifier.java
new file mode 100644
index 0000000..971a9a3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/servlet/test/beans/TestQualifier.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({TYPE, METHOD, PARAMETER, FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface TestQualifier {
+
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/servlet/test/beans/TestRequestScopedBean.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/servlet/test/beans/TestRequestScopedBean.java
new file mode 100644
index 0000000..69a8672
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/servlet/test/beans/TestRequestScopedBean.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+
+public class TestRequestScopedBean {
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/servlet/test/servlet/ProducerMethodDisposesTestServlet1.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/servlet/test/servlet/ProducerMethodDisposesTestServlet1.java
new file mode 100644
index 0000000..ac4dea8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/servlet/test/servlet/ProducerMethodDisposesTestServlet1.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.Preferred;
+import test.beans.TestQualifier;
+import test.beans.TestRequestScopedBean;
+
+@WebServlet(name = "mytest1", urlPatterns = { "/myurl1" })
+public class ProducerMethodDisposesTestServlet1 extends HttpServlet {
+
+    @Inject @Preferred
+    TestRequestScopedBean trs;
+    
+    @Inject @TestQualifier
+    TestRequestScopedBean trs2;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        System.out.println("trs: " + trs);
+        String msg = "";
+
+        if (trs == null)
+            msg += "RequestScoped Bean injection into Servlet of Bean created through "
+                    + "programmatic instantiation in producer method (Preferred) failed";
+        if (trs2 == null)
+            msg += "RequestScoped Bean injection into Servlet of Bean created through "
+                    + "programmatic instantiation in producer method (TestQualifier) failed";
+        
+        writer.write(msg + "\n");
+    }
+
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/servlet/test/servlet/ProducerMethodDisposesTestServlet2.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/servlet/test/servlet/ProducerMethodDisposesTestServlet2.java
new file mode 100644
index 0000000..70fa961
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-disposes/servlet/test/servlet/ProducerMethodDisposesTestServlet2.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.BeanSetup;
+import test.beans.TestRequestScopedBean;
+
+@WebServlet(name = "mytest2", urlPatterns = { "/myurl2" })
+public class ProducerMethodDisposesTestServlet2 extends HttpServlet {
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        if (!BeanSetup.disposeCalledForPreferred)
+            msg += "Disposer method for preferred not called";
+        if (!(BeanSetup.disposeCalledForTestQualifierError.trim().length() == 0))
+            msg += BeanSetup.disposeCalledForTestQualifierError;
+        
+        writer.write(msg + "\n");
+    }
+
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/README b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/README
new file mode 100644
index 0000000..2be97bf
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/README
@@ -0,0 +1,4 @@
+Test
+- Use of Producer Methods to act as a source of injectable bean instances
+- Qualifiers in Producer Methods to dynamically provide an instance of a bean type for injection
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/WebTest.java
new file mode 100644
index 0000000..1b6e97c
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/WebTest.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "producer-methods-qualifiers";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0. initParams: n1=v1, n2=v2";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for @WebServlet");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/build.properties b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/build.properties
new file mode 100644
index 0000000..eef7060
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-producer-methods-qualifiers"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/build.xml b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/build.xml
new file mode 100644
index 0000000..83ad666
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/build.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/servlet/BeanToTestQualiferInProducerMethods.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/servlet/BeanToTestQualiferInProducerMethods.java
new file mode 100644
index 0000000..0f5641e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/servlet/BeanToTestQualiferInProducerMethods.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 javax.enterprise.inject.Produces;
+import javax.inject.Named;
+
+@Named
+public class BeanToTestQualiferInProducerMethods {
+
+    private static final boolean lesserThanHundred = true;
+    //choose a number lesser than hundred
+
+    @Produces
+    int getRandomInt(
+            @RandomGreaterThanHundred int greater,
+            @RandomLessThanOrEqualToHundred int lesser) {
+        if (lesserThanHundred) {
+            return lesser;
+        } else {
+            return greater;
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/servlet/ProducerMethodTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/servlet/ProducerMethodTestServlet.java
new file mode 100644
index 0000000..641a6d8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/servlet/ProducerMethodTestServlet.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" }, initParams = {
+        @WebInitParam(name = "n1", value = "v1"),
+        @WebInitParam(name = "n2", value = "v2") })
+public class ProducerMethodTestServlet extends HttpServlet {
+    @Inject
+    TestBean tb;
+
+    @Inject
+    @RandomLessThanOrEqualToHundred
+    int randomNumber;
+
+    @Inject
+    @RandomLessThanOrEqualToHundred
+    int randomNumber2;
+
+    @Inject
+    @RandomGreaterThanHundred
+    int randomNumber3;
+
+    @Inject
+    @RandomGreaterThanHundred
+    int randomNumber4;
+
+    @Inject
+    int rng;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+        System.out.println("RandomNumbers are " + randomNumber + ","
+                + randomNumber2 + "," + randomNumber3 + "," + randomNumber4);
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0. ");
+        String msg = "n1=" + getInitParameter("n1") + ", n2="
+                + getInitParameter("n2");
+        if (tb == null)
+            msg += "Bean injection into Servlet failed";
+        boolean randomNumberTestSuccess = (randomNumber < 101)
+                && (randomNumber2 < 100) && (randomNumber3 > 100)
+                && (randomNumber3 > 100);
+        if (!randomNumberTestSuccess) {
+            msg += "RandomNumber Producer Test Failed";
+        }
+        if (!tb.testProducerMethod()) {
+            msg += "Producer Method to dynamically select a bean type implementation failed";
+        }
+        writer.write("initParams: " + msg + "\n");
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/servlet/RandomGreaterThanHundred.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/servlet/RandomGreaterThanHundred.java
new file mode 100644
index 0000000..eaa4ec0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/servlet/RandomGreaterThanHundred.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({TYPE, METHOD, PARAMETER, FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface RandomGreaterThanHundred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/servlet/RandomLessThanOrEqualToHundred.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/servlet/RandomLessThanOrEqualToHundred.java
new file mode 100644
index 0000000..49ddef8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/servlet/RandomLessThanOrEqualToHundred.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import static java.lang.annotation.ElementType.*;
+
+import javax.inject.Qualifier;
+
+
+@Qualifier
+@Target({TYPE, METHOD, PARAMETER, FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface RandomLessThanOrEqualToHundred {
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/servlet/RandomNumberGenerator.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/servlet/RandomNumberGenerator.java
new file mode 100644
index 0000000..7774fa5
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/servlet/RandomNumberGenerator.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+import javax.inject.Named;
+
+
+@ApplicationScoped
+public class RandomNumberGenerator {
+    private static int lessThan100 = 99;
+    private static int greaterThan100 = 101;
+
+    //Generate a number less than or equal to hundred
+    @Produces @Named @RandomLessThanOrEqualToHundred int getRandomNumber(){
+        return lessThan100--;
+    }
+    
+    //Generate a number greater than 100
+    @Produces @Named @RandomGreaterThanHundred int getRandomNumberGreatherThanHundred(){
+        return greaterThan100++;
+    }
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/servlet/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/servlet/TestBean.java
new file mode 100644
index 0000000..1c88c96
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-qualifiers/servlet/TestBean.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 javax.inject.Inject;
+public class TestBean {
+ 
+    //This should use the int chosen in BeanToTestQualiferInProducerMethods 
+    @Inject int rng;
+    
+    public boolean testProducerMethod(){
+        return rng <= 100;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/README b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/README
new file mode 100644
index 0000000..acba5a9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/README
@@ -0,0 +1,7 @@
+Test
+- Use of Producer Methods to act as a source of injectable bean instances
+- Use of producer methods and qualifiers to enable runtime polymorphism (runtime
+selection of beans to inject)
+    - The beans can either be programmatically instantiated (new)
+    - or via Injection (if a request-scoped bean is injected and the producer 
+    method is annotated session-scoped, use @New to create a new Dependent object)  
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/build.properties b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/build.properties
new file mode 100644
index 0000000..eef7060
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-producer-methods-qualifiers"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/build.xml b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/build.xml
new file mode 100644
index 0000000..0b9b3a3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/build.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/client/test/client/WebTest.java
new file mode 100644
index 0000000..1dc1ea1
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/client/test/client/WebTest.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "producer-methods-runtimepolymorphism";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for producer methods");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/beans/ChequePaymentStrategy.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/beans/ChequePaymentStrategy.java
new file mode 100644
index 0000000..ccbc64b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/beans/ChequePaymentStrategy.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import java.io.Serializable;
+
+public class ChequePaymentStrategy implements PaymentStrategy, Serializable {
+
+    @Override
+    public boolean credit(int val) {
+        return false;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/beans/CreditCardPaymentStrategy.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/beans/CreditCardPaymentStrategy.java
new file mode 100644
index 0000000..0e3e7c9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/beans/CreditCardPaymentStrategy.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import java.io.Serializable;
+
+import javax.enterprise.context.RequestScoped;
+
+@RequestScoped 
+//Note: This is request scoped bean
+public class CreditCardPaymentStrategy implements PaymentStrategy, Serializable {
+
+    @Override
+    public boolean credit(int val) {
+        return false;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/beans/PayPalPaymentStrategy.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/beans/PayPalPaymentStrategy.java
new file mode 100644
index 0000000..204c482
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/beans/PayPalPaymentStrategy.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import java.io.Serializable;
+
+public class PayPalPaymentStrategy implements PaymentStrategy, Serializable {
+
+    @Override
+    public boolean credit(int val) {
+        return false;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/beans/PaymentStrategy.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/beans/PaymentStrategy.java
new file mode 100644
index 0000000..9c87550
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/beans/PaymentStrategy.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public interface PaymentStrategy {
+    boolean credit(int val);
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/beans/PaymentStrategyType.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/beans/PaymentStrategyType.java
new file mode 100644
index 0000000..73e5a9f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/beans/PaymentStrategyType.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public enum PaymentStrategyType {
+    CREDIT_CARD, CHECK, PAYPAL;
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/beans/Preferences.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/beans/Preferences.java
new file mode 100644
index 0000000..46091cb
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/beans/Preferences.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import java.io.Serializable;
+
+import javax.enterprise.context.SessionScoped;
+import javax.enterprise.inject.New;
+import javax.enterprise.inject.Produces;
+
+public class Preferences implements Serializable {
+
+    private PaymentStrategyType paymentStrategy;
+
+    @Produces
+    @Preferred_CreatedProgrammatically
+    //In this producer method, we are manually creating the
+    //bean instance
+    public PaymentStrategy getPaymentStrategy() {
+        if (true)
+            paymentStrategy = PaymentStrategyType.CREDIT_CARD;
+        // set CREDIT_CARD as preferred always
+
+        switch (paymentStrategy) {
+        case CREDIT_CARD:
+            return new CreditCardPaymentStrategy();
+        case CHECK:
+            return new ChequePaymentStrategy();
+        case PAYPAL:
+            return new PayPalPaymentStrategy();
+        default:
+            return null;
+        }
+    }
+
+    @Produces
+    @Preferred_CreatedViaInjection
+    @SessionScoped
+    // This class is SessionScoped, so if we inject CreditCardPaymentStrategy
+    // (which is RequestScoped)
+    // we would incorrectly be promoting a request scoped object to a
+    // session-scoped object
+    // so we use @New for CreditCardPaymentStrategy alone. The rest of the
+    // payment
+    // strategies are Dependent anyway as they are not scoped explicitly in
+    // their
+    // classes
+    public PaymentStrategy getPaymentStrategy(
+            @New CreditCardPaymentStrategy ccps, ChequePaymentStrategy cps,
+            PayPalPaymentStrategy pps) {
+        // set CREDIT_CARD as preferred always
+        paymentStrategy = PaymentStrategyType.CREDIT_CARD;
+
+        switch (paymentStrategy) {
+        case CREDIT_CARD:
+            return ccps;
+        case CHECK:
+            return cps;
+        case PAYPAL:
+            return pps;
+        default:
+            return null;
+        }
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/beans/Preferred_CreatedProgrammatically.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/beans/Preferred_CreatedProgrammatically.java
new file mode 100644
index 0000000..f797a5a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/beans/Preferred_CreatedProgrammatically.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({TYPE, METHOD, PARAMETER, FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred_CreatedProgrammatically {
+
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/beans/Preferred_CreatedViaInjection.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/beans/Preferred_CreatedViaInjection.java
new file mode 100644
index 0000000..d71a27c
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/beans/Preferred_CreatedViaInjection.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+
+@Qualifier
+@Target({TYPE, METHOD, PARAMETER, FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred_CreatedViaInjection {
+
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/servlet/ProducerMethodRuntimePolymorhpismTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/servlet/ProducerMethodRuntimePolymorhpismTestServlet.java
new file mode 100644
index 0000000..7cfb8c3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/producer-methods/producer-method-runtimepolymorphism/servlet/test/servlet/ProducerMethodRuntimePolymorhpismTestServlet.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.enterprise.context.SessionScoped;
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.CreditCardPaymentStrategy;
+import test.beans.PaymentStrategy;
+import test.beans.Preferred_CreatedProgrammatically;
+import test.beans.Preferred_CreatedViaInjection;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class ProducerMethodRuntimePolymorhpismTestServlet extends HttpServlet {
+
+    @Inject
+    @Preferred_CreatedProgrammatically
+    PaymentStrategy payCreate;
+
+    @Inject
+    @Preferred_CreatedViaInjection
+    PaymentStrategy payInject;
+
+    @Inject
+    @Preferred_CreatedViaInjection
+    PaymentStrategy payInject2;
+    
+    @Inject
+    CreditCardPaymentStrategy ccps;// This should be the request-scoped
+                                   // instance.
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        if (payCreate == null)
+            msg += "Bean injection into Servlet of Bean created through "
+                    + "programmatic instantiation in producer method failed";
+
+        if (payInject == null)
+            msg += "Bean injection into Servlet of Bean created through "
+                    + "injection into producer method failed";
+
+        if (!(payCreate instanceof PaymentStrategy))
+            msg += "Bean runtime polymorphism in producer method " +
+            		"in Preferences failed";
+        if (!(payInject instanceof PaymentStrategy))
+            msg += "Bean runtime polymorphism in producer method(dep injection " +
+            		"in method parameters in Preferences failed";
+
+        if (areInjectedInstancesEqual(ccps, payInject))
+            msg += "Use of @New to create new Dependent object while injecting " +
+            		"in producer method failed";
+
+        if (!areInjectedInstancesEqual(payInject, payInject2))
+            msg += "Session-scoped producer method created Bean injected in " +
+            		"different injection points are not equal";
+
+        writer.write(msg + "\n");
+    }
+
+    private boolean areInjectedInstancesEqual(Object o1, Object o2) {
+        return (o1.equals(o2)) & (o1 == o2);
+    }
+
+    // Tests if the bean instance is a client proxy
+    private boolean testIsClientProxy(Object beanInstance, Class beanType) {
+        boolean isSameClass = beanInstance.getClass().equals(beanType);
+        boolean isProxyAssignable = beanType.isAssignableFrom(beanInstance
+                .getClass());
+        System.out.println(beanInstance + "whose class is "
+                + beanInstance.getClass() + " is same class of " + beanType
+                + " = " + isSameClass);
+        System.out.println(beanType + " is assignable from " + beanInstance
+                + " = " + isProxyAssignable);
+        boolean isAClientProxy = !isSameClass && isProxyAssignable;
+        return isAClientProxy;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/README b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/README
new file mode 100644
index 0000000..e59123b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/README
@@ -0,0 +1,4 @@
+Test
+- Programmatic lookup: specifying bean type and qualifiers(with 
+and without members) dynamically at runtime, @Any
+- Injection of @Dependent unproxyable deps
diff --git a/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/WebTest.java
new file mode 100644
index 0000000..35f7518
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/WebTest.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "programmatic-lookup-tests";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0. initParams: n1=v1, n2=v2";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Testing Programmatic Lookup");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+        System.out.println("TESTNAME " + TEST_NAME);
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/build.properties b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/build.properties
new file mode 100644
index 0000000..57ba5ff
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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-programmatic-lookup"/>
+<property name="appname" value="${module}-servlet-annotation"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/build.xml b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/build.xml
new file mode 100644
index 0000000..c0d904d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/build.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/descriptor/beans.xml
new file mode 100644
index 0000000..c0da4fc
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/descriptor/beans.xml
@@ -0,0 +1,26 @@
+<!--
+
+    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
+
+-->
+
+<beans 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/beans_1_0.xsd">
+  <alternatives>
+    <class>test.artifacts.MockPaymentProcessor</class>
+  </alternatives>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/Asynchronous.java b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/Asynchronous.java
new file mode 100644
index 0000000..ca0dd14
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/Asynchronous.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+import static java.lang.annotation.ElementType.*;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({TYPE, METHOD, PARAMETER, FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+
+public @interface Asynchronous {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/AsynchronousPaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/AsynchronousPaymentProcessor.java
new file mode 100644
index 0000000..9e0c62b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/AsynchronousPaymentProcessor.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+@Asynchronous
+public class AsynchronousPaymentProcessor implements PaymentProcessor {
+
+    @Override
+    public boolean processPayment() {
+        return false;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/CashReliablePaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/CashReliablePaymentProcessor.java
new file mode 100644
index 0000000..a72f9db
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/CashReliablePaymentProcessor.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+@PayBy(value=PaymentMethod.CASH) @Reliable
+//To test multiple qualifiers
+public class CashReliablePaymentProcessor implements PaymentProcessor {
+
+    @Override
+    public boolean processPayment() {
+        return false;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/ChequePaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/ChequePaymentProcessor.java
new file mode 100644
index 0000000..9fe824b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/ChequePaymentProcessor.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+@PayBy(PaymentMethod.CHEQUE)
+public class ChequePaymentProcessor implements PaymentProcessor {
+
+    @Override
+    public boolean processPayment() {
+        return false;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/MockPaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/MockPaymentProcessor.java
new file mode 100644
index 0000000..8d736e2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/MockPaymentProcessor.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+
+import javax.enterprise.inject.Alternative;
+
+@Alternative @Asynchronous @Synchronous
+public class MockPaymentProcessor implements PaymentProcessor{
+
+    @Override
+    public boolean processPayment() {
+        return true;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/PayBy.java b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/PayBy.java
new file mode 100644
index 0000000..179aca6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/PayBy.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+import static java.lang.annotation.ElementType.*;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.enterprise.util.Nonbinding;
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target( { TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface PayBy {
+    PaymentMethod value() default PaymentMethod.CHEQUE;
+
+    @Nonbinding
+    String comment() default ""; // A Non-Binding member. Is ignored during
+                                 // dependency resolution
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/PaymentMethod.java b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/PaymentMethod.java
new file mode 100644
index 0000000..82e7eb6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/PaymentMethod.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+public enum PaymentMethod {
+    CHEQUE, CASH
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/PaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/PaymentProcessor.java
new file mode 100644
index 0000000..3e25336
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/PaymentProcessor.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+
+public interface PaymentProcessor {
+    boolean processPayment();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/Reliable.java b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/Reliable.java
new file mode 100644
index 0000000..8ece693
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/Reliable.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+import static java.lang.annotation.ElementType.*;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({TYPE, METHOD, PARAMETER, FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Reliable {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/Synchronous.java b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/Synchronous.java
new file mode 100644
index 0000000..b4c5d7e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/Synchronous.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+import static java.lang.annotation.ElementType.*;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({TYPE, METHOD, PARAMETER, FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Synchronous {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/SynchronousPaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/SynchronousPaymentProcessor.java
new file mode 100644
index 0000000..921cd3e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/SynchronousPaymentProcessor.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+@Synchronous
+public class SynchronousPaymentProcessor implements PaymentProcessor {
+
+    @Override
+    public boolean processPayment() {
+        return false;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/TestApplicationScopedBean.java b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/TestApplicationScopedBean.java
new file mode 100644
index 0000000..c8a651c
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/TestApplicationScopedBean.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
+@ApplicationScoped
+public class TestApplicationScopedBean {
+    @Inject
+    TestSessionScopedBean tsb;
+    
+    public TestSessionScopedBean getSessionScopedBean(){
+        return tsb;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/TestSessionScopedBean.java b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/TestSessionScopedBean.java
new file mode 100644
index 0000000..272d946
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/TestSessionScopedBean.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+
+import java.io.Serializable;
+
+import javax.enterprise.context.SessionScoped;
+
+@SessionScoped
+public class TestSessionScopedBean implements Serializable{
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/UnproxyableFinalClass.java b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/UnproxyableFinalClass.java
new file mode 100644
index 0000000..cd00eed
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/UnproxyableFinalClass.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+
+import java.io.Serializable;
+
+import javax.enterprise.context.Dependent;
+
+@Dependent
+public final class UnproxyableFinalClass implements UnproxyableType,  Serializable{
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/UnproxyableType.java b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/UnproxyableType.java
new file mode 100644
index 0000000..4a93c39
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/UnproxyableType.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+
+public interface UnproxyableType {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/UnproxyableTypeWithNoPublicNullConstructor.java b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/UnproxyableTypeWithNoPublicNullConstructor.java
new file mode 100644
index 0000000..a92bd4d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/artifacts/UnproxyableTypeWithNoPublicNullConstructor.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+
+import java.io.Serializable;
+
+import javax.enterprise.context.Dependent;
+
+@Dependent
+public class UnproxyableTypeWithNoPublicNullConstructor implements UnproxyableType, Serializable{
+    //private null ctor
+    private UnproxyableTypeWithNoPublicNullConstructor(){
+        
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/beans/BeanToTestProgrammaticLookup.java b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/beans/BeanToTestProgrammaticLookup.java
new file mode 100644
index 0000000..15122d6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/beans/BeanToTestProgrammaticLookup.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Instance;
+import javax.inject.Inject;
+
+import test.artifacts.Asynchronous;
+import test.artifacts.MockPaymentProcessor;
+import test.artifacts.PaymentProcessor;
+import test.artifacts.Synchronous;
+import test.artifacts.UnproxyableType;
+
+//Alternatives injection and test for availability of other beans via @Any
+public class BeanToTestProgrammaticLookup {
+    private int numberOfPaymentProcessors = 0;
+    private int numberOfUnproxyableTypes = 0;
+
+    @Inject
+    @Asynchronous
+    @Synchronous
+    private PaymentProcessor pp;
+
+    @Inject
+    public void initPaymentProcessors(
+            @Any Instance<PaymentProcessor> payInstances) {
+        for (PaymentProcessor p : payInstances) {
+            System.out.println("Payment Processor #"
+                    + numberOfPaymentProcessors + ":" + p);
+            numberOfPaymentProcessors++;
+        }
+    }
+
+    @Inject
+    public void initUnproxyableTypes(
+            @Any Instance<UnproxyableType> unproxyableTypes) {
+        for (UnproxyableType p : unproxyableTypes) {
+            System.out.println("UnproxyableType #" + numberOfUnproxyableTypes
+                    + ":" + p);
+            numberOfUnproxyableTypes++;
+        }
+    }
+
+    public boolean testInjection() {
+        System.out.println("# of Payment processors:"
+                + numberOfPaymentProcessors);
+        System.out.println("# of Unproxyable types:"
+                + numberOfUnproxyableTypes);
+        System.out.println("mock payment procssor:" + pp);
+        
+        return (numberOfPaymentProcessors == 5)
+        // Async, Sync, Cheque,
+                // ReliableCash,
+                // MockPaymentProcessor
+                && (numberOfUnproxyableTypes == 2)
+                // UnproxyableFinalClass
+                // UnproxyableTypeWithNoPublicNullConstructor
+                && (pp instanceof MockPaymentProcessor);
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/servlets/ProgrammaticLookupServlet.java b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/servlets/ProgrammaticLookupServlet.java
new file mode 100644
index 0000000..a24772c
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/programmatic-lookup/servlet/test/servlets/ProgrammaticLookupServlet.java
@@ -0,0 +1,184 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlets;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Iterator;
+
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Instance;
+import javax.enterprise.util.AnnotationLiteral;
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.artifacts.Asynchronous;
+import test.artifacts.ChequePaymentProcessor;
+import test.artifacts.MockPaymentProcessor;
+import test.artifacts.PayBy;
+import test.artifacts.PaymentMethod;
+import test.artifacts.PaymentProcessor;
+import test.artifacts.Synchronous;
+import test.artifacts.TestApplicationScopedBean;
+import test.artifacts.TestSessionScopedBean;
+import test.artifacts.UnproxyableType;
+import test.beans.BeanToTestProgrammaticLookup;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" }, initParams = {
+        @WebInitParam(name = "n1", value = "v1"),
+        @WebInitParam(name = "n2", value = "v2") })
+public class ProgrammaticLookupServlet extends HttpServlet {
+
+    @Inject
+    BeanToTestProgrammaticLookup tb;
+
+    @Inject
+    @Synchronous
+    Instance<PaymentProcessor> synchronousPaymentProcessor;
+
+    @Inject
+    @Asynchronous
+    Instance<PaymentProcessor> asynchronousPaymentProcessor;
+
+    @Inject
+    @Any
+    Instance<PaymentProcessor> anyPaymentProcessors;
+
+    @Inject
+    @Any
+    Instance<UnproxyableType> unpnc;
+
+    @Inject
+    TestApplicationScopedBean tasb;
+
+    @Inject
+    TestSessionScopedBean tssb;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0. ");
+        String msg = "n1=" + getInitParameter("n1") + ", n2="
+                + getInitParameter("n2");
+
+        if (!tb.testInjection())
+            msg += "Alternatives injection and test for availability of other "
+                    + "beans via @Any Failed";
+
+        boolean specifiedAtInjectionPoint = synchronousPaymentProcessor.get() instanceof MockPaymentProcessor
+                && asynchronousPaymentProcessor.get() instanceof MockPaymentProcessor;
+        if (!specifiedAtInjectionPoint)
+            msg += "Qualifier based(specified at injection point) programmatic "
+                    + "injection into Servlet Failed";
+
+        PaymentProcessor pp1, pp2;
+        // using anonymous inner classes
+        pp1 = anyPaymentProcessors.select(
+                new AnnotationLiteral<Asynchronous>() {
+                }).get();
+        pp2 = anyPaymentProcessors.select(
+                new AnnotationLiteral<Synchronous>() {
+                }).get();
+        boolean specifiedQualifierDynamically = pp1 instanceof MockPaymentProcessor
+                && pp2 instanceof MockPaymentProcessor;
+        if (!specifiedQualifierDynamically)
+            msg += "Qualifier based(specified dynamically through "
+                    + "instance.select()) programmatic injection into Servlet Failed";
+
+        // using concrete implementations of the annotation type
+        pp1 = anyPaymentProcessors.select(new AsynchronousQualifier()).get();
+        pp2 = anyPaymentProcessors.select(new SynchronousQualifier()).get();
+        boolean specifiedQualifierDynamicallyThroughConcreteTypes = pp1 instanceof MockPaymentProcessor
+                && pp2 instanceof MockPaymentProcessor;
+        if (!specifiedQualifierDynamicallyThroughConcreteTypes)
+            msg += "Qualifier based(specified dynamically through "
+                    + "instance.select() through a concrete annotation type "
+                    + "implementation) programmatic injection into Servlet Failed";
+
+        PaymentProcessor chequePaymentProcessor = anyPaymentProcessors
+                .select(new ChequeQualifier()).get();
+        boolean specifiedQualifierWithMembersDynamicallyThroughConcreteTypes = chequePaymentProcessor instanceof ChequePaymentProcessor;
+        if (!specifiedQualifierWithMembersDynamicallyThroughConcreteTypes)
+            msg += "Qualifier with members based(specified dynamically through "
+                    + "instance.select() through a concrete annotation type "
+                    + "implementation) programmatic injection into Servlet Failed";
+
+        // Ensure unproxabletypes are injectable
+        for (Iterator iterator = unpnc.iterator(); iterator.hasNext();) {
+            UnproxyableType type = (UnproxyableType) iterator.next();
+            if (type == null) {
+                System.out.println("UnproxyableType is null "
+                        + type.getClass());
+                msg += "Unproxyable type (class with non-public null constructor) Injection failed";
+            }
+        }
+
+        // Ensure application-scoped bean has a reference to a session-scoped
+        // bean
+        // via a client proxy
+        TestSessionScopedBean tsb = tasb.getSessionScopedBean();
+        boolean isAClientProxy = testIsClientProxy(tsb,
+                TestSessionScopedBean.class);
+        if (!isAClientProxy)
+            msg += "Session scoped bean is not a proxy class";
+
+        writer.write("initParams: " + msg + "\n");
+    }
+
+    // Tests if the bean instance is a client proxy
+    private boolean testIsClientProxy(Object beanInstance, Class beanType) {
+        boolean isSameClass = beanInstance.getClass().equals(beanType);
+        boolean isProxyAssignable = beanType.isAssignableFrom(beanInstance
+                .getClass());
+        System.out.println(beanInstance + "whose class is "
+                + beanInstance.getClass() + " is same class of " + beanType
+                + " = " + isSameClass);
+        System.out.println(beanType + " is assignable from " + beanInstance
+                + " = " + isProxyAssignable);
+        boolean isAClientProxy = !isSameClass && isProxyAssignable;
+        return isAClientProxy;
+    }
+
+    // concrete implementations of the qualifier annotation types to be used in
+    // Instance.select()
+    class AsynchronousQualifier extends AnnotationLiteral<Asynchronous>
+            implements Asynchronous {
+    }
+
+    class SynchronousQualifier extends AnnotationLiteral<Synchronous>
+            implements Synchronous {
+    }
+
+    class ChequeQualifier extends AnnotationLiteral<PayBy> implements PayBy {
+        @Override
+        public PaymentMethod value() {
+            return PaymentMethod.CHEQUE;
+        }
+
+        @Override
+        public String comment() {
+            return "";
+        }
+
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/qualifiers/README b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/README
new file mode 100644
index 0000000..5c7e1c2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/README
@@ -0,0 +1,7 @@
+Test
+- Use Qualifier annotations to specify exactly which bean instnace should be injected
+- @Any
+- @Default
+- Constructor, Initializer Method and Field injection of Qualified Bean types
+- Qualifiers with members, non-binding members
+- Multiple Qualifiers
diff --git a/appserver/tests/appserv-tests/devtests/cdi/qualifiers/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/WebTest.java
new file mode 100644
index 0000000..64c7643
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/WebTest.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "qualifier-tests";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0. initParams: n1=v1, n2=v2";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Testing Qualifiers");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+        System.out.println("TESTNAME " + TEST_NAME);
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/qualifiers/build.properties b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/build.properties
new file mode 100644
index 0000000..0a1ecbd
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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-qualifiers"/>
+<property name="appname" value="${module}-servlet-annotation"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/qualifiers/build.xml b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/build.xml
new file mode 100644
index 0000000..c0d904d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/build.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/qualifiers/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/QualifierServlet.java b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/QualifierServlet.java
new file mode 100644
index 0000000..2123b1e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/QualifierServlet.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.artifacts.Asynchronous;
+import test.artifacts.AsynchronousPaymentProcessor;
+import test.artifacts.PaymentProcessor;
+import test.artifacts.Synchronous;
+import test.artifacts.SynchronousPaymentProcessor;
+import test.beans.BeanToTestAny;
+import test.beans.BeanToTestConstructorInjection;
+import test.beans.BeanToTestInitializerMethodInjection;
+import test.beans.BeanToTestMultipleQualifiers;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" }, initParams = {
+        @WebInitParam(name = "n1", value = "v1"),
+        @WebInitParam(name = "n2", value = "v2") })
+public class QualifierServlet extends HttpServlet {
+    
+    @Inject
+    BeanToTestInitializerMethodInjection tb;
+
+    @Inject
+    BeanToTestConstructorInjection tb2;
+
+    @Inject
+    BeanToTestAny tb3;
+    
+    @Inject
+    BeanToTestMultipleQualifiers tb4;
+
+    @Inject
+    @Synchronous
+    PaymentProcessor synchronousPaymentProcessor;
+    @Inject
+    @Asynchronous
+    PaymentProcessor asynchronousPaymentProcessor;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0. ");
+        String msg = "n1=" + getInitParameter("n1") + ", n2="
+                + getInitParameter("n2");
+        if (tb == null)
+            msg += "Bean injection into Servlet failed";
+
+        boolean qualifierTestSuccess = synchronousPaymentProcessor instanceof SynchronousPaymentProcessor
+                && asynchronousPaymentProcessor instanceof AsynchronousPaymentProcessor;
+        if (!qualifierTestSuccess)
+            msg += "Qualifier based injection into Servlet Failed";
+        if (!tb.testInjection())
+            msg += "Qualifier based injection into BeanToTestInitializerMethodInjection (initializer method injection) Failed";
+        if (!tb2.testInjection())
+            msg += "Qualifier based injection into BeanToTestConstructorMethodInjection (constructor method injection) Failed";
+        if (!tb3.testInjection())
+            msg += "Qualifier based @Any injection into BeanToTestAny Failed";
+        if (!tb4.testInjection()) 
+            msg += "Multiple qualifiers test failed";
+
+        writer.write("initParams: " + msg + "\n");
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/Asynchronous.java b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/Asynchronous.java
new file mode 100644
index 0000000..ca0dd14
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/Asynchronous.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+import static java.lang.annotation.ElementType.*;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({TYPE, METHOD, PARAMETER, FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+
+public @interface Asynchronous {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/AsynchronousPaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/AsynchronousPaymentProcessor.java
new file mode 100644
index 0000000..9e0c62b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/AsynchronousPaymentProcessor.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+@Asynchronous
+public class AsynchronousPaymentProcessor implements PaymentProcessor {
+
+    @Override
+    public boolean processPayment() {
+        return false;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/CashReliablePaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/CashReliablePaymentProcessor.java
new file mode 100644
index 0000000..a72f9db
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/CashReliablePaymentProcessor.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+@PayBy(value=PaymentMethod.CASH) @Reliable
+//To test multiple qualifiers
+public class CashReliablePaymentProcessor implements PaymentProcessor {
+
+    @Override
+    public boolean processPayment() {
+        return false;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/ChequePaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/ChequePaymentProcessor.java
new file mode 100644
index 0000000..9fe824b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/ChequePaymentProcessor.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+@PayBy(PaymentMethod.CHEQUE)
+public class ChequePaymentProcessor implements PaymentProcessor {
+
+    @Override
+    public boolean processPayment() {
+        return false;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/PayBy.java b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/PayBy.java
new file mode 100644
index 0000000..179aca6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/PayBy.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+import static java.lang.annotation.ElementType.*;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.enterprise.util.Nonbinding;
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target( { TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface PayBy {
+    PaymentMethod value() default PaymentMethod.CHEQUE;
+
+    @Nonbinding
+    String comment() default ""; // A Non-Binding member. Is ignored during
+                                 // dependency resolution
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/PaymentMethod.java b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/PaymentMethod.java
new file mode 100644
index 0000000..82e7eb6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/PaymentMethod.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+public enum PaymentMethod {
+    CHEQUE, CASH
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/PaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/PaymentProcessor.java
new file mode 100644
index 0000000..3e25336
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/PaymentProcessor.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+
+public interface PaymentProcessor {
+    boolean processPayment();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/Reliable.java b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/Reliable.java
new file mode 100644
index 0000000..8ece693
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/Reliable.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+import static java.lang.annotation.ElementType.*;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({TYPE, METHOD, PARAMETER, FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Reliable {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/Synchronous.java b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/Synchronous.java
new file mode 100644
index 0000000..b4c5d7e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/Synchronous.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+import static java.lang.annotation.ElementType.*;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({TYPE, METHOD, PARAMETER, FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Synchronous {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/SynchronousPaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/SynchronousPaymentProcessor.java
new file mode 100644
index 0000000..921cd3e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/artifacts/SynchronousPaymentProcessor.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+@Synchronous
+public class SynchronousPaymentProcessor implements PaymentProcessor {
+
+    @Override
+    public boolean processPayment() {
+        return false;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/beans/BeanToTestAny.java b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/beans/BeanToTestAny.java
new file mode 100644
index 0000000..688b54d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/beans/BeanToTestAny.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Instance;
+import javax.inject.Inject;
+
+import test.artifacts.PaymentProcessor;
+
+public class BeanToTestAny {
+    private int numberOfPaymentProcessors = 0;
+
+    @Inject
+    public void init(@Any Instance<PaymentProcessor> payInstances) {
+        for (PaymentProcessor p : payInstances) {
+            System.out.println("Payment Processor #"
+                    + numberOfPaymentProcessors + ":" + p);
+            numberOfPaymentProcessors++;
+        }
+    }
+
+    public boolean testInjection() {
+        return (numberOfPaymentProcessors == 4); //Async, Sync, Cheque, ReliableCash
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/beans/BeanToTestConstructorInjection.java b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/beans/BeanToTestConstructorInjection.java
new file mode 100644
index 0000000..620cc44
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/beans/BeanToTestConstructorInjection.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+
+import test.artifacts.Asynchronous;
+import test.artifacts.AsynchronousPaymentProcessor;
+import test.artifacts.PaymentProcessor;
+import test.artifacts.Synchronous;
+import test.artifacts.SynchronousPaymentProcessor;
+
+
+public class BeanToTestConstructorInjection {
+    private PaymentProcessor syncPay;
+    private PaymentProcessor asyncPay;
+    
+    @Inject
+    public BeanToTestConstructorInjection(@Synchronous PaymentProcessor syncPay,
+            @Asynchronous PaymentProcessor asyncPay) {
+        this.syncPay = syncPay;
+        this.asyncPay = asyncPay;
+    }
+    
+    public boolean testInjection(){
+        return (syncPay instanceof SynchronousPaymentProcessor &&
+        asyncPay instanceof AsynchronousPaymentProcessor);
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/beans/BeanToTestInitializerMethodInjection.java b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/beans/BeanToTestInitializerMethodInjection.java
new file mode 100644
index 0000000..9562fd6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/beans/BeanToTestInitializerMethodInjection.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+
+import test.artifacts.Asynchronous;
+import test.artifacts.AsynchronousPaymentProcessor;
+import test.artifacts.PaymentProcessor;
+import test.artifacts.Synchronous;
+import test.artifacts.SynchronousPaymentProcessor;
+
+public class BeanToTestInitializerMethodInjection {
+    private PaymentProcessor syncPay;
+    private PaymentProcessor asyncPay;
+    
+    @Inject
+    public void setPaymentProcessor(@Synchronous PaymentProcessor syncPay,
+            @Asynchronous PaymentProcessor asyncPay) {
+        this.syncPay = syncPay;
+        this.asyncPay = asyncPay;
+    }
+    
+    public boolean testInjection(){
+        return (syncPay instanceof SynchronousPaymentProcessor &&
+        asyncPay instanceof AsynchronousPaymentProcessor);
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/beans/BeanToTestMultipleQualifiers.java b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/beans/BeanToTestMultipleQualifiers.java
new file mode 100644
index 0000000..6e94fa1
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/beans/BeanToTestMultipleQualifiers.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+
+import test.artifacts.CashReliablePaymentProcessor;
+import test.artifacts.PayBy;
+import test.artifacts.PaymentMethod;
+import test.artifacts.PaymentProcessor;
+import test.artifacts.Reliable;
+
+public class BeanToTestMultipleQualifiers {
+    PaymentProcessor pp;
+    @Inject
+    public void init(@Reliable @PayBy(PaymentMethod.CASH) PaymentProcessor cashProcessor) {
+        this.pp = cashProcessor;
+    }
+
+    public boolean testInjection() {
+        return ((this.pp != null) && (this.pp instanceof CashReliablePaymentProcessor));
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/beans/BeanToTestQualifierWithMembers.java b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/beans/BeanToTestQualifierWithMembers.java
new file mode 100644
index 0000000..14c8550
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/qualifiers/servlet/test/beans/BeanToTestQualifierWithMembers.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+
+import test.artifacts.ChequePaymentProcessor;
+import test.artifacts.PayBy;
+import test.artifacts.PaymentMethod;
+import test.artifacts.PaymentProcessor;
+
+public class BeanToTestQualifierWithMembers {
+    @Inject
+    @PayBy(value = PaymentMethod.CHEQUE, comment = "Test Comment")
+    PaymentProcessor pp;
+
+    public boolean testInjection() {
+        return pp instanceof ChequePaymentProcessor;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/report.xml b/appserver/tests/appserv-tests/devtests/cdi/report.xml
new file mode 100644
index 0000000..dde5850
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/report.xml
@@ -0,0 +1,42 @@
+<!--
+
+    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
+
+-->
+
+<property name="stylesheet" value="${env.APS_HOME}/config/j2eeReporter.xsl" />
+<property name="xmlfile" value="${env.APS_HOME}/test_resultsValid.xml" />
+<property name="htmlfile" value="${env.APS_HOME}/test_results.html" />
+
+<target name="report">
+<echo message="Comparing results with expected results"/>
+
+ 
+    <xslt style="${stylesheet}"
+            in="${xmlfile}"
+            out="${htmlfile}"
+            basedir="."
+            destdir="."/>
+    <antcall target="report-sh"/>
+    <!--
+    <ant dir="${env.APS_HOME}/util/filediff" target="modifyReport"/>
+    -->
+</target>
+
+<target name="report-sh">
+    <exec executable="sh">
+        <arg value="./resultCount.sh"/>
+    </exec>
+</target>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/resultCount.sh b/appserver/tests/appserv-tests/devtests/cdi/resultCount.sh
new file mode 100755
index 0000000..f3d7be7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/resultCount.sh
@@ -0,0 +1,51 @@
+#!/bin/sh
+#
+# 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
+#
+
+
+#FILE=$APS_HOME/devtests/cdi/cdi.output
+FILE=$APS_HOME/test_resultsValid.xml
+echo "input file=$FILE"
+
+TOTAL=119
+PASSED=`grep "\"pass\"" $FILE | wc -l`
+FAILED=`grep "\"fail\"" $FILE | wc -l`
+TOTAL_RUN=`expr $PASSED + $FAILED `
+DNR=`expr $TOTAL - $TOTAL_RUN `
+
+echo ""
+echo "************************"
+echo "PASSED=   $PASSED"
+echo "------------  ========="
+echo "FAILED=   $FAILED"
+echo "------------  ========="
+echo "DID NOT RUN=   $DNR"
+echo "------------  ========="
+echo "Total Expected=$TOTAL"
+echo "************************"
+echo ""
+
+echo "************************">>$APS_HOME/devtests/cdi/count.txt;
+date>>$APS_HOME/devtests/cdi/count.txt;
+echo "-----------------------">>$APS_HOME/devtests/cdi/count.txt;
+echo "PASSED=   $PASSED">>$APS_HOME/devtests/cdi/count.txt;
+echo "------------  =========">>$APS_HOME/devtests/cdi/count.txt;
+echo "FAILED=   $FAILED">>$APS_HOME/devtests/cdi/count.txt;
+echo "------------  =========">>$APS_HOME/devtests/cdi/count.txt;
+echo "DID NOT RUN=   $DNR">>$APS_HOME/devtests/cdi/count.txt;
+echo "------------  =========">>$APS_HOME/devtests/cdi/count.txt;
+echo "Total Expected=$TOTAL">>$APS_HOME/devtests/cdi/count.txt;
+echo "************************">>$APS_HOME/devtests/cdi/count.txt;
diff --git a/appserver/tests/appserv-tests/devtests/cdi/run_test.sh b/appserver/tests/appserv-tests/devtests/cdi/run_test.sh
new file mode 100755
index 0000000..7b90362
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/run_test.sh
@@ -0,0 +1,80 @@
+#!/bin/bash -ex
+#
+# 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
+#
+
+test_run(){
+	#Fix for false positive
+	echo "<property name=\"libraries\" value=\"' '\"/>" >> smoke-tests/simple-wab-with-cdi/build.properties
+	find . -name "RepRunConf.txt" | xargs rm -f
+	rm 	-rf *.output alltests.res $APS_HOME/test_results*
+	# Run the tests
+	set +e
+	ant clean
+	$S1AS_HOME/bin/asadmin start-domain
+	$S1AS_HOME/bin/asadmin start-database
+	ant $TARGET | tee $TEST_RUN_LOG
+	$S1AS_HOME/bin/asadmin stop-domain
+	$S1AS_HOME/bin/asadmin stop-database
+	set -e
+}
+
+get_test_target(){
+	case $1 in
+		cdi_all )
+			TARGET=all
+			export TARGET;;
+	esac
+
+}
+
+
+run_test_id(){
+	source `dirname $0`/../../../common_test.sh
+	kill_process
+	delete_gf
+	download_test_resources glassfish.zip version-info.txt
+	unzip_test_resources $WORKSPACE/bundles/glassfish.zip
+	cd `dirname $0`
+	test_init
+	get_test_target $1
+	test_run
+	check_successful_run
+    generate_junit_report $1
+    change_junit_report_class_names
+}
+
+post_test_run(){
+    copy_test_artifects
+    upload_test_results
+    delete_bundle
+    cd -
+}
+
+
+list_test_ids(){
+	echo cdi_all
+}
+
+OPT=$1
+TEST_ID=$2
+
+case $OPT in
+	list_test_ids )
+		list_test_ids;;
+	run_test_id )
+		trap post_test_run EXIT
+		run_test_id $TEST_ID ;;
+esac
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/build.xml b/appserver/tests/appserv-tests/devtests/cdi/scopes/build.xml
new file mode 100644
index 0000000..7b3acdd
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/build.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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="scopes-test" default="usage" basedir=".">
+
+    <property name="scopes-target" value="all"/>
+
+    <target name="run-test">
+        <antcall target="scopes">
+        <param name="scopes-target" value="run-test"/>
+        </antcall>
+    </target>
+
+    <target name="all">
+        <antcall target="scopes">
+        <param name="scopes-target" value="all"/>
+        </antcall>
+    </target>
+
+    <target name="clean">
+        <antcall target="scopes">
+        <param name="scopes-target" value="clean"/>
+        </antcall>
+    </target>
+
+    <target name="build">
+        <antcall target="scopes">
+        <param name="scopes-target" value="build"/>
+        </antcall>
+    </target>
+
+    <target name="setup">
+        <antcall target="scopes">
+        <param name="scopes-target" value="setup"/>
+        </antcall>
+    </target>
+
+    <target name="deploy">
+        <antcall target="scopes">
+        <param name="scopes-target" value="deploy"/>
+        </antcall>
+    </target>
+
+    <target name="undeploy">
+        <antcall target="scopes">
+        <param name="scopes-target" value="undeploy"/>
+        </antcall>
+    </target>
+
+    <target name="unsetup">
+        <antcall target="scopes">
+        <param name="scopes-target" value="unsetup"/>
+        </antcall>
+    </target>
+
+    <target name="run">
+        <antcall target="scopes">
+        <param name="scopes-target" value="run"/>
+        </antcall>
+    </target>
+
+    <target name="scopes">
+        <record name="scopes.output" action="start" />
+            <ant dir="dependent-scope" target="${scopes-target}"/>
+            <ant dir="new-qualifier" target="${scopes-target}"/>
+        <!--
+        Not running until
+        https://issues.jboss.org/browse/WELD-1345 is fixed.
+        In 1.1.10.Final the test passes.
+        In 2.0 Beta it fails.
+        -->
+        <ant dir="request-and-application-scope-ejb-mdb" target="${scopes-target}"/>
+        <ant dir="singleton-scope" target="${scopes-target}"/>
+        <record name="scopes.output" action="stop" />
+    </target>
+
+    <target name="usage">
+	<echo> Usage:
+		ant all (Executes all the scopes tests)
+		ant clean (cleans all the scopes tests)
+		ant build (builds all the scopes tests)
+		ant setup (sets up all resources for scopes tests)
+		ant deploy (deploys all the scopes apps)
+		ant run (Executes all the scopes tests)
+		ant undeploy (undeploys all the  scopes apps)
+		ant unsetup (unsets all resources for scopes tests)
+	</echo>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/dependent-scope/README b/appserver/tests/appserv-tests/devtests/cdi/scopes/dependent-scope/README
new file mode 100644
index 0000000..d1d0427
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/dependent-scope/README
@@ -0,0 +1,5 @@
+Test that Dependent scoped
+- bean is instantiated once per injection point
+- don't have a proxy
+- beans injected across two different injection points or differnt clients are 
+not the same
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/dependent-scope/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/scopes/dependent-scope/WebTest.java
new file mode 100644
index 0000000..ff0180a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/dependent-scope/WebTest.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+    private static final String TEST_NAME = "cdi-scopes-dependent";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for @WebServlet");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: "
+                        + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/dependent-scope/build.properties b/appserver/tests/appserv-tests/devtests/cdi/scopes/dependent-scope/build.properties
new file mode 100644
index 0000000..c1893f3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/dependent-scope/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-dependent-scope"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/dependent-scope/build.xml b/appserver/tests/appserv-tests/devtests/cdi/scopes/dependent-scope/build.xml
new file mode 100644
index 0000000..83ad666
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/dependent-scope/build.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/dependent-scope/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/scopes/dependent-scope/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/dependent-scope/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/dependent-scope/servlet/test/beans/TestDependentScopedBean.java b/appserver/tests/appserv-tests/devtests/cdi/scopes/dependent-scope/servlet/test/beans/TestDependentScopedBean.java
new file mode 100644
index 0000000..b978e60
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/dependent-scope/servlet/test/beans/TestDependentScopedBean.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+
+
+//Simple TestBean to test CDI dependent pseudo-scope.
+//note: NOT serializable. So special care must be taken when injected
+//into session scoped or conversation scoped bean
+public class TestDependentScopedBean {
+    private static int instantiationCounter = 0;
+    
+    public TestDependentScopedBean(){
+        instantiationCounter++;
+    }
+    
+    public int getInstancesCount(){
+        return this.instantiationCounter;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/dependent-scope/servlet/test/beans/TestRequestScopedBean.java b/appserver/tests/appserv-tests/devtests/cdi/scopes/dependent-scope/servlet/test/beans/TestRequestScopedBean.java
new file mode 100644
index 0000000..bcec05a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/dependent-scope/servlet/test/beans/TestRequestScopedBean.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+
+@RequestScoped
+public class TestRequestScopedBean {
+
+    @Inject
+    private TestDependentScopedBean tdsb;
+    
+    public TestDependentScopedBean getDependentScopedBean(){
+        return this.tdsb;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/dependent-scope/servlet/test/servlets/DependentScopeTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/scopes/dependent-scope/servlet/test/servlets/DependentScopeTestServlet.java
new file mode 100644
index 0000000..d166a62
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/dependent-scope/servlet/test/servlets/DependentScopeTestServlet.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlets;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.enterprise.inject.spi.BeanManager;
+import javax.inject.Inject;
+import javax.naming.InitialContext;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.TestDependentScopedBean;
+import test.beans.TestRequestScopedBean;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class DependentScopeTestServlet extends HttpServlet {
+    @Inject
+    TestDependentScopedBean tb;
+    @Inject
+    TestDependentScopedBean anotherInjectedDependentInstance;
+
+    @Inject
+    TestRequestScopedBean trsb;
+    @Inject
+    BeanManager bm;
+    BeanManager bm1;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+        if (tb == null)
+            msg += "Singleton pseudo-scope Bean injection into Servlet failed";
+        if (bm == null)
+            msg += "BeanManager Injection via @Inject failed";
+        try {
+            bm1 = (BeanManager) ((new InitialContext())
+                    .lookup("java:comp/BeanManager"));
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            msg += "BeanManager Injection via component environment lookup failed";
+        }
+        if (bm1 == null)
+            msg += "BeanManager Injection via component environment lookup failed";
+        if (areInjectecedInstancesEqual(tb, anotherInjectedDependentInstance))
+            msg += "Dependent scoped beans across two different injections points must not point to the same bean instance";
+        if (areInjectecedInstancesEqual(tb, trsb.getDependentScopedBean()))
+            msg += "Dependent scoped beans across two different clients must not point to the same bean instance";
+
+        // 2 to account for the two injections
+        // in this servlet and 1 more for the injection in TestRequestScopedBean
+        if (tb.getInstancesCount() != 3)
+            msg += "Dependent scoped bean created more than the expected number of times";
+
+        if (testIsClientProxy(tb, TestDependentScopedBean.class))
+            msg += "Beans with dependent pseudo-scope should not have a proxy";
+
+        writer.write(msg + "\n");
+    }
+
+    private boolean areInjectecedInstancesEqual(Object o1, Object o2) {
+        return (o1.equals(o2)) & (o1 == o2);
+    }
+
+    // Tests if the bean instance is a client proxy
+    private boolean testIsClientProxy(Object beanInstance, Class beanType) {
+        boolean isSameClass = beanInstance.getClass().equals(beanType);
+        boolean isProxyAssignable = beanType.isAssignableFrom(beanInstance
+                .getClass());
+        System.out.println(beanInstance + "whose class is "
+                + beanInstance.getClass() + " is same class of " + beanType
+                + " = " + isSameClass);
+        System.out.println(beanType + " is assignable from " + beanInstance
+                + " = " + isProxyAssignable);
+        boolean isAClientProxy = !isSameClass && isProxyAssignable;
+        return isAClientProxy;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/new-qualifier/README b/appserver/tests/appserv-tests/devtests/cdi/scopes/new-qualifier/README
new file mode 100644
index 0000000..ca575bc
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/new-qualifier/README
@@ -0,0 +1,4 @@
+Test that injection points annotated with @New qualifer
+- results in a new RequestScoped bean
+- is not equal to the actual request scoped bean
+- ensure that no more than valid # of instantiations of the request scoped bean happens
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/new-qualifier/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/scopes/new-qualifier/WebTest.java
new file mode 100644
index 0000000..c873c03
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/new-qualifier/WebTest.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+    private static final String TEST_NAME = "cdi-new-qualifier";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for @WebServlet");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: "
+                        + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/new-qualifier/build.properties b/appserver/tests/appserv-tests/devtests/cdi/scopes/new-qualifier/build.properties
new file mode 100644
index 0000000..eafeb8f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/new-qualifier/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-new-qualifier"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/new-qualifier/build.xml b/appserver/tests/appserv-tests/devtests/cdi/scopes/new-qualifier/build.xml
new file mode 100644
index 0000000..83ad666
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/new-qualifier/build.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/new-qualifier/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/scopes/new-qualifier/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/new-qualifier/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/new-qualifier/servlet/test/beans/TestRequestScopedBean.java b/appserver/tests/appserv-tests/devtests/cdi/scopes/new-qualifier/servlet/test/beans/TestRequestScopedBean.java
new file mode 100644
index 0000000..e854645
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/new-qualifier/servlet/test/beans/TestRequestScopedBean.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+
+@RequestScoped
+public class TestRequestScopedBean {
+    private static int instantiationCount = 0;
+    
+    public TestRequestScopedBean(){
+        instantiationCount++;
+    }
+    
+    public int getInstantiationCount(){
+        System.out.println("Instances of TestRequestScopedBean=" + instantiationCount);
+        return this.instantiationCount;
+    }
+
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/new-qualifier/servlet/test/servlets/NewQualifierTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/scopes/new-qualifier/servlet/test/servlets/NewQualifierTestServlet.java
new file mode 100644
index 0000000..f47409e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/new-qualifier/servlet/test/servlets/NewQualifierTestServlet.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlets;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.enterprise.inject.New;
+import javax.enterprise.inject.Instance;
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.TestRequestScopedBean;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class NewQualifierTestServlet extends HttpServlet {
+
+    @Inject
+    TestRequestScopedBean trsb;
+    
+    @Inject
+    TestRequestScopedBean anotherRefToRequestScopedBean;
+
+    @Inject
+    @New
+    TestRequestScopedBean newRequestScopedBean;
+
+    @Inject
+    @New
+    Instance<TestRequestScopedBean> newRequestScopedBeanProgrammaticLookup;
+    
+    @Inject
+    @New(TestRequestScopedBean.class)
+    Instance<TestRequestScopedBean> newRequestScopedBeanProgrammaticLookup2;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        // 2 to account for the two injections in this servlet
+        // XXX: For some weld instantiates the request scoped bean thrice(twice
+        // during
+        // the instantiation of the servlet and once during the servicing of the
+        // servlet request
+        if (!(trsb.getInstantiationCount() == 3))
+            msg += "Request scoped bean created more than the expected number of times";
+
+        if (!areInjectecedInstancesEqual(trsb, anotherRefToRequestScopedBean)) 
+            msg += "Two references to the same request scoped bean are not equal";
+        
+        if (areInjectecedInstancesEqual(trsb, newRequestScopedBean))
+            msg += "Request scoped Bean injected with @New qualifier must not be equal to the normal Request scoped bean";
+
+        if (!testIsClientProxy(trsb, TestRequestScopedBean.class))
+            msg += "Request scoped beans must be injected as a client proxy";
+        
+        if(newRequestScopedBeanProgrammaticLookup.get() == null) 
+            msg += "A new instance of Request Scoped Bean obtained through programmatic lookup failed";
+        
+        if(newRequestScopedBeanProgrammaticLookup2.get() == null) 
+            msg += "A new(complex type specification scenario) instance of Request Scoped Bean obtained through programmatic lookup failed";
+
+        writer.write(msg + "\n");
+    }
+
+    private boolean areInjectecedInstancesEqual(Object o1, Object o2) {
+        return (o1.equals(o2)) & (o1 == o2);
+    }
+
+    // Tests if the bean instance is a client proxy
+    private boolean testIsClientProxy(Object beanInstance, Class beanType) {
+        boolean isSameClass = beanInstance.getClass().equals(beanType);
+        boolean isProxyAssignable = beanType.isAssignableFrom(beanInstance
+                .getClass());
+        System.out.println(beanInstance + "whose class is "
+                + beanInstance.getClass() + " is same class of " + beanType
+                + " = " + isSameClass);
+        System.out.println(beanType + " is assignable from " + beanInstance
+                + " = " + isProxyAssignable);
+        boolean isAClientProxy = !isSameClass && isProxyAssignable;
+        return isAClientProxy;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/README b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/README
new file mode 100644
index 0000000..1d7fbc4
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/README
@@ -0,0 +1,8 @@
+Test
+- availability of application and request scoped beans in 
+   - invocation of EJB remote methods
+   - invocation of MDB message delivery
+   - invocation of EJB timer timeout methods
+
+- TODO: check availability in invocation of
+   - async EJB methods, MDB (Connector), WS HAndler 
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/build.properties b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/build.properties
new file mode 100644
index 0000000..d64848e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/build.properties
@@ -0,0 +1,37 @@
+<!--
+
+    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-hello-mdb"/>
+<property name="appname" value="${module}"/>         
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="test.client" 
+	value="Client"/>
+<property name="simple.client" value="com.sun.s1asdev.cdi.hello.mdb.client.Client"/>
+<property name="application.xml" value="descriptor/application.xml"/>
+<property name="sun-application.xml" value="descriptor/sun-application.xml"/>
+<property name="ejb-jar.xml" value="descriptor/ejb-jar.xml"/>
+<property name="sun-ejb-jar.xml" value="descriptor/sun-ejb-jar.xml"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
+<property name="application-client.xml" 
+	value="descriptor/application-client.xml"/>
+<property name="sun-application-client.xml" 
+	value="descriptor/sun-application-client.xml"/>
+<property name="appclientjar.files" value="${build.classes.dir}"/>         
+<property name="appclient.jar" value="${assemble.dir}/${appname}-client.jar"/>
+<property name="app.type" value="application"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/build.xml b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/build.xml
new file mode 100644
index 0000000..9f1d49a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/build.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="cdi-hello-mdbApp" default="usage" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+
+    <target name="all" depends="clean,build,create-resources,deploy,run,undeploy,delete-resources"/>
+
+    <target name="clean" depends="init-common">
+      <antcall  target="clean-common"/>
+    </target>
+ 
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="src"/>
+        </antcall>
+        <antcall target="compile-common">
+            <param name="src" value="client"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <antcall target="build-ear-common">
+            <param name="ejbjar.classes" 
+              value="**/*Bean*.class,**/*Hello*" />
+            <param name="appclientjar.classes" 
+              value="**/*Client*.class, test/ejb/session/HelloSless*.class" />
+        </antcall>
+    </target> 
+    
+    <target name="deploy" 
+            depends="init-common">
+        <antcall target="deploy-common"/>
+    </target>
+
+    <target name="create-resources" depends="init-common">
+        <antcall target="asadmin-batch-common">
+          <param name="asadmin.file" value="create_resources.asadmin"/>
+        </antcall>
+    </target>
+    
+    <target name="delete-resources" depends="init-common">
+        <antcall target="asadmin-batch-common">
+          <param name="asadmin.file" value="delete_resources.asadmin"/>
+        </antcall>
+    </target>
+
+    <target name="run" depends="init-common">
+        <antcall target="runclient-common">
+          <param name="appclient.application.args" value="1"/>
+        </antcall>
+    </target>
+
+    <target name="run_standaloneclient" depends="init-common">
+       <java  fork="on" 
+              failonerror="true"
+              classpath="${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/modules/javax.jms.jar:${env.S1AS_HOME}/lib/gf-client.jar:${build.classes.dir}:${env.APS_HOME}/lib/reporter.jar"
+              classname="${simple.client}">
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+        <echo>         
+          ant create-resources Create all destinations and connection factories
+          ant delete-resources Delete all destinations and connection factories
+        </echo>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/client/Client.java b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/client/Client.java
new file mode 100644
index 0000000..085a41f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/client/Client.java
@@ -0,0 +1,168 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.cdi.hello.mdb.client;
+
+import javax.annotation.Resource;
+import javax.ejb.EJB;
+import javax.jms.Destination;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.QueueConnection;
+import javax.jms.QueueConnectionFactory;
+import javax.jms.QueueReceiver;
+import javax.jms.QueueSender;
+import javax.jms.QueueSession;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+import javax.naming.InitialContext;
+
+import test.ejb.session.HelloSless;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+public class Client {
+
+    // in milli-seconds
+    private static long TIMEOUT = 90000;
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+    private static final String TEST_NAME = "request-and-application-scope-ejb-mdb";
+
+    public static void main(String[] args) {
+        Client client = new Client(args);
+
+        stat.addDescription("cdi-hello-mdb");
+        client.doTest();
+        stat.printSummary("cdi-hello-mdbID");
+        System.exit(0);
+    }
+
+    @Resource(name = "FooCF", mappedName = "jms/cdi_hello_mdb_QCF")
+    private static QueueConnectionFactory queueConFactory;
+
+    @Resource(name = "MsgBeanQueue", mappedName = "jms/cdi_hello_mdb_InQueue")
+    private static javax.jms.Queue msgBeanQueue;
+
+    @Resource(name = "ClientQueue", mappedName = "foo")
+    private static javax.jms.Queue clientQueue;
+
+    private QueueConnection queueCon;
+    private QueueSession queueSession;
+    private QueueSender queueSender;
+    private QueueReceiver queueReceiver;
+
+    // Only one target bean with Remote intf SlessSub so no linking info
+    // necessary
+    private static @EJB
+    HelloSless helloStatelessRemoteBean;
+
+    private int numMessages = 2;
+
+    public Client(String[] args) {
+
+        if (args.length == 1) {
+            numMessages = new Integer(args[0]).intValue();
+        }
+
+    }
+
+    private void doTest() {
+        try {
+            if (queueConFactory == null) {
+
+                System.out.println("Java SE mode...");
+                InitialContext ic = new InitialContext();
+                queueConFactory = (javax.jms.QueueConnectionFactory) ic
+                        .lookup("jms/cdi_hello_mdb_QCF");
+                msgBeanQueue = (javax.jms.Queue) ic
+                        .lookup("jms/cdi_hello_mdb_InQueue");
+                clientQueue = (javax.jms.Queue) ic
+                        .lookup("jms/cdi_hello_mdb_OutQueue");
+
+            }
+
+            setup();
+            doTest(numMessages);
+            stat.addStatus(TEST_NAME, stat.PASS);
+        } catch (Throwable t) {
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            t.printStackTrace();
+        } finally {
+            cleanup();
+        }
+    }
+
+    private void setup() throws Exception {
+        queueCon = queueConFactory.createQueueConnection();
+        queueSession = queueCon.createQueueSession(false,
+                Session.AUTO_ACKNOWLEDGE);
+        // Producer will be specified when actual msg is sent.
+        queueSender = queueSession.createSender(null);
+        queueReceiver = queueSession.createReceiver(clientQueue);
+        queueCon.start();
+    }
+
+    private void cleanup() {
+        try {
+            if (queueCon != null) {
+                queueCon.close();
+            }
+        } catch (Throwable t) {
+            t.printStackTrace();
+        }
+    }
+
+    private void sendMsgs(javax.jms.Queue queue, Message msg, int num)
+            throws JMSException {
+        for (int i = 0; i < num; i++) {
+            System.out.println("Sending message " + i + " to " + queue
+                    + " at time " + System.currentTimeMillis());
+            queueSender.send(queue, msg);
+            System.out.println("Sent message " + i + " to " + queue
+                    + " at time " + System.currentTimeMillis());
+        }
+    }
+
+    private void doTest(int num) throws Exception {
+
+        Destination dest = msgBeanQueue;
+
+        Message message = queueSession.createTextMessage("foo");
+
+        message.setBooleanProperty("flag", true);
+        message.setIntProperty("num", 2);
+        sendMsgs((javax.jms.Queue) dest, message, num);
+        
+        System.out.println("remote bean:" + helloStatelessRemoteBean);
+        String response = helloStatelessRemoteBean.hello();
+        if (!response.equals("hello")){
+            System.out.println("Expected hello, but instead got" + response);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        }
+
+        System.out.println("Waiting for queue message");
+        Message recvdmessage = queueReceiver.receive(TIMEOUT);
+        if (recvdmessage != null) {
+            System.out.println("Received message : "
+                    + ((TextMessage) recvdmessage).getText());
+        } else {
+            System.out.println("timeout after " + TIMEOUT + " seconds");
+            throw new JMSException("timeout" + TIMEOUT + " seconds");
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/client/MANIFEST.MF b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/client/MANIFEST.MF
new file mode 100644
index 0000000..1ed692b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/client/MANIFEST.MF
@@ -0,0 +1,4 @@
+Manifest-Version: 1.0
+Created-By: 1.4.0-beta3 (Sun Microsystems Inc.)
+Main-Class: com.sun.s1asdev.cdi.hello.mdb.client.Client
+Class-Path: reporter.jar
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/create_resources.asadmin b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/create_resources.asadmin
new file mode 100644
index 0000000..78a6f43
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/create_resources.asadmin
@@ -0,0 +1,5 @@
+create-jms-resource --restype javax.jms.QueueConnectionFactory jms/cdi_hello_mdb_QCF
+create-jmsdest --desttype queue cdi_hello_mdb_InQueue 
+create-jms-resource --restype javax.jms.Queue --property imqDestinationName=cdi_hello_mdb_InQueue jms/cdi_hello_mdb_InQueue
+create-jmsdest --desttype queue cdi_hello_mdb_OutQueue 
+create-jms-resource --restype javax.jms.Queue --property imqDestinationName=cdi_hello_mdb_OutQueue jms/cdi_hello_mdb_OutQueue
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/delete_resources.asadmin b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/delete_resources.asadmin
new file mode 100644
index 0000000..69af651
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/delete_resources.asadmin
@@ -0,0 +1,5 @@
+delete-jms-resource jms/cdi_hello_mdb_QCF
+delete-jms-resource jms/cdi_hello_mdb_InQueue
+delete-jmsdest --desttype queue cdi_hello_mdb_InQueue
+delete-jms-resource jms/cdi_hello_mdb_OutQueue
+delete-jmsdest --desttype queue cdi_hello_mdb_OutQueue
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/descriptor/application.xml b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/descriptor/application.xml
new file mode 100644
index 0000000..448b864
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/descriptor/application.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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="5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">
+  <display-name>cdi-hello-mdbApp</display-name>
+  <module>
+    <ejb>cdi-hello-mdb-ejb.jar</ejb>
+  </module>
+  <module>
+    <java>cdi-hello-mdb-client.jar</java>
+  </module>
+</application>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/descriptor/sun-application-client.xml b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/descriptor/sun-application-client.xml
new file mode 100644
index 0000000..3cb8ad5
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/descriptor/sun-application-client.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 sun-application-client PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Application Client 5.0//EN" "http://www.sun.com/software/appserver/dtds/sun-application-client_5_0-0.dtd">
+<sun-application-client>
+  <message-destination-ref>
+      <message-destination-ref-name>ClientQueue</message-destination-ref-name>
+      <jndi-name>jms/cdi_hello_mdb_OutQueue</jndi-name>
+  </message-destination-ref>
+</sun-application-client>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/beans/BeanToTestTimerUse.java b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/beans/BeanToTestTimerUse.java
new file mode 100644
index 0000000..ca77e52
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/beans/BeanToTestTimerUse.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Singleton;
+
+
+//Simple TestBean to test CDI. 
+
+@Singleton
+public class BeanToTestTimerUse implements java.io.Serializable{
+    private boolean testToCheckIfTimerInvoked = false;
+    
+    public void setResult(boolean val) {
+        this.testToCheckIfTimerInvoked = val;
+    }
+    
+    public boolean getResult() {
+        return this.testToCheckIfTimerInvoked;
+    }
+  
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/beans/TestApplicationScopedBean.java b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/beans/TestApplicationScopedBean.java
new file mode 100644
index 0000000..aa487ef
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/beans/TestApplicationScopedBean.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.ApplicationScoped;
+
+//Simple TestBean to test CDI. 
+@ApplicationScoped
+public class TestApplicationScopedBean
+{}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/beans/TestRequestScopedBean.java b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/beans/TestRequestScopedBean.java
new file mode 100644
index 0000000..15a8ea0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/beans/TestRequestScopedBean.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+
+//Simple TestBean to test CDI. 
+@RequestScoped
+public class TestRequestScopedBean
+{}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/ejb/mdb/MessageBean.java b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/ejb/mdb/MessageBean.java
new file mode 100644
index 0000000..665278f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/ejb/mdb/MessageBean.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.mdb;
+
+import javax.annotation.Resource;
+import javax.ejb.EJB;
+import javax.ejb.MessageDriven;
+import javax.ejb.NoSuchEJBException;
+import javax.ejb.TransactionManagement;
+import javax.ejb.TransactionManagementType;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.inject.Inject;
+import javax.jms.Message;
+import javax.jms.MessageListener;
+import javax.jms.Queue;
+import javax.jms.QueueConnection;
+import javax.jms.QueueConnectionFactory;
+import javax.jms.QueueSender;
+import javax.jms.QueueSession;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+
+import test.beans.TestApplicationScopedBean;
+import test.beans.TestRequestScopedBean;
+import test.ejb.session.Hello1;
+import test.ejb.session.Hello2;
+
+@TransactionManagement(TransactionManagementType.BEAN)
+@MessageDriven(mappedName = "jms/cdi_hello_mdb_InQueue", description = "mymessagedriven bean description")
+public class MessageBean implements MessageListener {
+
+    @EJB
+    private Hello1 hello1;
+    @EJB
+    private Hello2 hello2;
+
+    @Resource(name = "jms/MyQueueConnectionFactory", mappedName = "jms/cdi_hello_mdb_QCF")
+    QueueConnectionFactory qcFactory;
+
+    @Resource(mappedName = "jms/cdi_hello_mdb_OutQueue")
+    Queue clientQueue;
+
+    @Inject
+    TestApplicationScopedBean tasb;
+    @Inject
+    TestRequestScopedBean trsb;
+    
+    @Inject BeanManager bm;
+
+    public void onMessage(Message message) {
+
+        QueueConnection connection = null;
+        try {
+
+            System.out.println("Calling hello1 stateless bean");
+            hello1.hello("local ejb3.0 stateless");
+            System.out.println("Calling hello2 stateful bean");
+            hello2.hello("local ejb3.0 stateful");
+            hello2.removeMethod();
+            try {
+                hello2.hello("this call should not go through");
+                throw new Exception("bean should have been removed "
+                        + "after removeMethod()");
+            } catch (NoSuchEJBException e) {
+                System.out.println("Successfully caught EJBException after "
+                        + " accessing removed SFSB");
+            }
+
+            System.out.println("Application scoped test bean:"+ tasb);
+            System.out.println("Request scoped test bean:"+ trsb);
+            if (tasb == null)
+                throw new Exception(
+                        "Injection of application scoped Bean in MDB failed");
+            if (trsb == null)
+                throw new Exception(
+                        "Injection of request scoped Bean in MDB failed");
+            
+            connection = qcFactory.createQueueConnection();
+            QueueSession session = connection.createQueueSession(false,
+                    Session.AUTO_ACKNOWLEDGE);
+            QueueSender sender = session.createSender(clientQueue);
+            TextMessage tmessage = session.createTextMessage();
+            tmessage.setText("mdb() invoked");
+            System.out.println("Sending message");
+            sender.send(tmessage);
+            System.out.println("message sent");
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (connection != null) {
+                    connection.close();
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/ejb/session/Hello1.java b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/ejb/session/Hello1.java
new file mode 100644
index 0000000..6773b31
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/ejb/session/Hello1.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.session;
+
+public interface Hello1 {
+
+    public void hello(String s);
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/ejb/session/Hello2.java b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/ejb/session/Hello2.java
new file mode 100644
index 0000000..0a4d4b9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/ejb/session/Hello2.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.session;
+
+public interface Hello2 extends java.io.Serializable {
+
+    public void hello(String s);
+
+    public void removeMethod();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/ejb/session/HelloSless.java b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/ejb/session/HelloSless.java
new file mode 100644
index 0000000..37c0953
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/ejb/session/HelloSless.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.session;
+
+//Remote business interface
+
+public interface HelloSless
+{
+    public String hello();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/ejb/session/HelloStateful.java b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/ejb/session/HelloStateful.java
new file mode 100644
index 0000000..7ef8e89
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/ejb/session/HelloStateful.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.session;
+
+import javax.ejb.Stateful;
+import javax.ejb.Remove;
+import javax.annotation.PreDestroy;
+
+@Stateful(description="my stateful bean description")
+public class HelloStateful implements Hello2 {
+
+    private String msg;
+
+    public void hello(String s) {
+        msg = s;
+        System.out.println("HelloStateful: " + s);
+    }
+
+    @Remove public void removeMethod() {
+        System.out.println("Business method marked with @Remove called in " +
+                           msg);
+    }
+    
+    @PreDestroy public void myPreDestroyMethod() {
+        System.out.println("PRE-DESTROY callback received in " + msg);        
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/ejb/session/HelloStateless.java b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/ejb/session/HelloStateless.java
new file mode 100644
index 0000000..f3e09ec
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/ejb/session/HelloStateless.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.session;
+
+import javax.ejb.Stateless;
+
+// Hello1 interface is not annotated with @Local. If the
+// bean only implements one interface it is assumed to be
+// a local business interface.
+
+@Stateless(description="my stateless bean description") 
+public class HelloStateless implements Hello1 {
+
+    public void hello(String s) {
+        System.out.println("HelloStateless: " + s);
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/ejb/session/HelloStatelessRemoteBean.java b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/ejb/session/HelloStatelessRemoteBean.java
new file mode 100644
index 0000000..f286061
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/ejb/session/HelloStatelessRemoteBean.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.session;
+
+import javax.annotation.PostConstruct;
+import javax.ejb.Remote;
+import javax.ejb.Stateless;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.inject.Inject;
+
+import test.beans.BeanToTestTimerUse;
+import test.beans.TestApplicationScopedBean;
+import test.beans.TestRequestScopedBean;
+
+@Stateless
+@Remote( { HelloSless.class })
+public class HelloStatelessRemoteBean implements HelloSless {
+
+    @Inject
+    TestApplicationScopedBean tasb;
+    @Inject
+    TestRequestScopedBean trsb;
+
+    @Inject
+    BeanManager bm;
+    
+    @Inject BeanToTestTimerUse timerBeanTest;
+
+    @PostConstruct
+    public void afterCreate() {
+        System.out
+                .println("In StatelessRemoteBean::afterCreate() marked as PostConstruct");
+    }
+
+    public String hello() {
+        System.out.println("In HelloStatelessRemoteBean:hello()");
+        String msg = "hello";
+        System.out.println("tasb=" + tasb);
+        System.out.println("trsb=" + trsb);
+        if (tasb == null)
+            msg += "Injection of Application scoped bean in EJB remote method failed";
+        if (trsb == null)
+            msg += "Injection of Request scoped bean in EJB remote method failed";
+        
+        if (!timerBeanTest.getResult()) 
+            msg += "Injection of session scoped bean into EJB timer beans failed";
+                
+        return msg;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/ejb/timer/TestEJBTimerBean.java b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/ejb/timer/TestEJBTimerBean.java
new file mode 100644
index 0000000..22599dd
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/request-and-application-scope-ejb-mdb/src/test/ejb/timer/TestEJBTimerBean.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.timer;
+
+import javax.ejb.Schedule;
+import javax.ejb.Stateless;
+import javax.ejb.Timer;
+import javax.inject.Inject;
+
+import test.beans.BeanToTestTimerUse;
+import test.beans.TestApplicationScopedBean;
+import test.beans.TestRequestScopedBean;
+
+@Stateless
+public class TestEJBTimerBean {
+    @Inject
+    BeanToTestTimerUse bean;
+    @Inject
+    TestApplicationScopedBean tasb;
+    @Inject
+    TestRequestScopedBean trsb;
+
+    /**
+     * Default constructor.
+     */
+    public TestEJBTimerBean() {
+    }
+
+    // We assume that the other tests would atleast take 2 seconds
+    // and this timer bean would get invoked
+    @SuppressWarnings("unused")
+    @Schedule(second = "*/2", minute = "*", hour = "*", dayOfWeek = "*", dayOfMonth = "*", month = "*", year = "*", info = "MyTimer")
+    private void scheduledTimeout(final Timer t) {
+        System.out.println("@Schedule called at: " + new java.util.Date());
+        System.out.println("trsb: " + trsb + " tasb " + tasb);
+        if (tasb != null && trsb != null) {
+            bean.setResult(true);
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/singleton-scope/README b/appserver/tests/appserv-tests/devtests/cdi/scopes/singleton-scope/README
new file mode 100644
index 0000000..3618b42
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/singleton-scope/README
@@ -0,0 +1,4 @@
+Test that Singleton scoped
+- bean is instantiated once
+- don't have a proxy
+- allow injection of non-serializable singleton scoped beans into serializable beans like SessionScoped beans through Instance<T>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/singleton-scope/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/scopes/singleton-scope/WebTest.java
new file mode 100644
index 0000000..09292da
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/singleton-scope/WebTest.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+    private static final String TEST_NAME = "cdi-scopes-singleton";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for @WebServlet");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: "
+                        + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/singleton-scope/build.properties b/appserver/tests/appserv-tests/devtests/cdi/scopes/singleton-scope/build.properties
new file mode 100644
index 0000000..45980f4
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/singleton-scope/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-singleton-scope"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/singleton-scope/build.xml b/appserver/tests/appserv-tests/devtests/cdi/scopes/singleton-scope/build.xml
new file mode 100644
index 0000000..83ad666
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/singleton-scope/build.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/singleton-scope/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/scopes/singleton-scope/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/singleton-scope/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/singleton-scope/servlet/test/beans/TestSessionScopedBean.java b/appserver/tests/appserv-tests/devtests/cdi/scopes/singleton-scope/servlet/test/beans/TestSessionScopedBean.java
new file mode 100644
index 0000000..7cb3552
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/singleton-scope/servlet/test/beans/TestSessionScopedBean.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import java.io.Serializable;
+
+import javax.enterprise.context.SessionScoped;
+import javax.enterprise.inject.Instance;
+import javax.inject.Inject;
+
+@SessionScoped
+public class TestSessionScopedBean implements Serializable{
+    @Inject
+    Instance<TestSingletonScopedBean> tssInstance;
+    
+    public TestSingletonScopedBean getSingletonScopedBean(){
+        return tssInstance.get();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/singleton-scope/servlet/test/beans/TestSingletonScopedBean.java b/appserver/tests/appserv-tests/devtests/cdi/scopes/singleton-scope/servlet/test/beans/TestSingletonScopedBean.java
new file mode 100644
index 0000000..f51d7ca
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/singleton-scope/servlet/test/beans/TestSingletonScopedBean.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Singleton;
+
+//Simple TestBean to test CDI Singleton pseudo-scope.
+@Singleton
+//note: NOT serializable. So special care must be taken when injected
+//into session scoped or conversation scoped bean
+public class TestSingletonScopedBean {
+    private static int instantiationCounter = 0;
+    
+    public TestSingletonScopedBean(){
+        instantiationCounter++;
+    }
+    
+    public int getInstancesCount(){
+        return this.instantiationCounter;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/scopes/singleton-scope/servlet/test/servlets/SingletonScopedServlet.java b/appserver/tests/appserv-tests/devtests/cdi/scopes/singleton-scope/servlet/test/servlets/SingletonScopedServlet.java
new file mode 100644
index 0000000..019f00d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/scopes/singleton-scope/servlet/test/servlets/SingletonScopedServlet.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlets;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.enterprise.inject.spi.BeanManager;
+import javax.inject.Inject;
+import javax.naming.InitialContext;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.TestSessionScopedBean;
+import test.beans.TestSingletonScopedBean;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class SingletonScopedServlet extends HttpServlet {
+    @Inject
+    TestSingletonScopedBean tb;
+    @Inject
+    TestSingletonScopedBean anotherInjectedSingletonInstance;
+
+    @Inject
+    BeanManager bm;
+    BeanManager bm1;
+
+    @Inject
+    TestSessionScopedBean tssb;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+        if (tb == null)
+            msg += "Singleton pseudo-scope Bean injection into Servlet failed";
+        if (bm == null)
+            msg += "BeanManager Injection via @Inject failed";
+        try {
+            bm1 = (BeanManager) ((new InitialContext())
+                    .lookup("java:comp/BeanManager"));
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            msg += "BeanManager Injection via component environment lookup failed";
+        }
+        if (bm1 == null)
+            msg += "BeanManager Injection via component environment lookup failed";
+        if (tb.getInstancesCount() > 1) 
+            msg += "Singleton scoped bean must be created only once";
+        if (!areInjectecedInstancesEqual(tb, anotherInjectedSingletonInstance))
+            msg += "Two different injection of a Singleton pseudo-scoped Bean must point to the same bean instance";
+        if (testIsClientProxy(tb, TestSingletonScopedBean.class))
+            msg += "Beans with Singleton pseudo-scope should not have a proxy";
+        if (testIsClientProxy(tssb.getSingletonScopedBean(),
+                TestSingletonScopedBean.class))
+            msg += "Non-serializable Beans with Singleton pseudo-scope injected via Instance<T> into a session scoped bean should not have a proxy";
+
+        writer.write(msg + "\n");
+    }
+
+    private boolean areInjectecedInstancesEqual(Object o1, Object o2) {
+        return (o1.equals(o2)) & (o1 == o2);
+    }
+
+    // Tests if the bean instance is a client proxy
+    private boolean testIsClientProxy(Object beanInstance, Class beanType) {
+        boolean isSameClass = beanInstance.getClass().equals(beanType);
+        boolean isProxyAssignable = beanType.isAssignableFrom(beanInstance
+                .getClass());
+        System.out.println(beanInstance + "whose class is "
+                + beanInstance.getClass() + " is same class of " + beanType
+                + " = " + isSameClass);
+        System.out.println(beanType + " is assignable from " + beanInstance
+                + " = " + isProxyAssignable);
+        boolean isAClientProxy = !isSameClass && isProxyAssignable;
+        return isAClientProxy;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/README b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/README
new file mode 100644
index 0000000..a954e0a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/README
@@ -0,0 +1,10 @@
+This directory has skeleton harnesses for testing CDI usecases. They also test simple typesafe injection.
+- Simple EAR
+- Simple EJB
+- Simple EJB Singleton
+- Simple ManagedBean
+- Simple ManagedBean with Interceptors
+- Simple MDB
+- Simple Servlet 3.0 Annotations
+
+Use these to implement particular CDI usecases.
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/build.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/build.xml
new file mode 100644
index 0000000..7dee092
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/build.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../config/common.xml">
+<!ENTITY commonRun SYSTEM "./../../../config/run.xml">
+<!ENTITY reporting   SYSTEM "../report.xml">
+]>
+
+<project name="smoke-test" default="usage" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &commonRun;
+    &reporting;
+    
+    <property name="smoke-target" value="all"/>
+
+    <taskdef resource="net/sf/antcontrib/antcontrib.properties">
+        <classpath>
+            <pathelement location="${env.APS_HOME}/devtests/cdi/lib/ant-contrib-1.0b3.jar"/>
+        </classpath>
+    </taskdef>
+
+    <target name="run-test">
+        <antcall target="smoke">
+        <param name="smoke-target" value="run-test"/>
+        </antcall>
+    </target>
+
+    <target name="all">
+        <antcall target="smoke">
+        <param name="smoke-target" value="all"/>
+        </antcall>
+    </target>
+
+    <target name="clean">
+        <antcall target="smoke">
+        <param name="smoke-target" value="clean"/>
+        </antcall>
+    </target>
+
+    <target name="build">
+        <antcall target="smoke">
+        <param name="smoke-target" value="build"/>
+        </antcall>
+    </target>
+
+    <target name="setup">
+        <antcall target="smoke">
+        <param name="smoke-target" value="setup"/>
+        </antcall>
+    </target>
+
+    <target name="deploy">
+        <antcall target="smoke">
+        <param name="smoke-target" value="deploy"/>
+        </antcall>
+    </target>
+
+    <target name="undeploy">
+        <antcall target="smoke">
+        <param name="smoke-target" value="undeploy"/>
+        </antcall>
+    </target>
+
+    <target name="unsetup">
+        <antcall target="smoke">
+        <param name="smoke-target" value="unsetup"/>
+        </antcall>
+    </target>
+
+    <target name="run">
+        <antcall target="smoke">
+        <param name="smoke-target" value="run"/>
+        </antcall>
+    </target>
+
+    <target name="smoke">
+        <record name="smoke.output" action="start" />
+            <if>
+                <equals arg1="${test.embedded.mode}" arg2="true"/>
+                <then>
+                    <echo> Excluding testcase simple-wab-with-cdi and slf4j-visibility for embedded mode</echo>
+                </then>
+                <else>
+                    <ant dir="simple-wab-with-cdi" target="${smoke-target}"/>
+                    <ant dir="slf4j-visibility" target="${smoke-target}"/>
+                </else>
+            </if>
+            <ant dir="simple-ejb-cdi" target="${smoke-target}"/>
+
+        <!--
+        Not running until
+        https://issues.jboss.org/browse/WELD-1345 is fixed.
+        In 1.1.10.Final the test passes.
+        In 2.0 Beta it fails.
+        -->
+        <ant dir="simple-mdb" target="${smoke-target}"/>
+        <ant dir="simple-ejb-singleton/hello" target="${smoke-target}"/>
+<!--
+            <ant dir="singleton-startup/hello" target="${smoke-target}"/>
+-->
+            <ant dir="simple-managed-bean" target="${smoke-target}"/>
+            <ant dir="simple-managed-bean-interceptor-nonnull-package" target="${smoke-target}"/>
+            <ant dir="cdi-servlet-3.0-annotation" target="${smoke-target}"/>
+            <ant dir="cdi-servlet-filter-3.0-annotation" target="${smoke-target}"/>
+            <ant dir="simple-ear" target="${smoke-target}"/>
+            <ant dir="optional-unbundled-beans" target="${smoke-target}"/>
+        <record name="smoke.output" action="stop" />
+    </target>
+
+    <target name="usage">
+	<echo> Usage:
+		ant all (Executes all the smoke tests)
+		ant clean (cleans all the smoke tests)
+		ant build (builds all the smoke tests)
+		ant setup (sets up all resources for smoke tests)
+		ant deploy (deploys all the smoke apps)
+		ant run (Executes all the smoke tests)
+		ant undeploy (undeploys all the  smoke apps)
+		ant unsetup (unsets all resources for smoke tests)
+	</echo>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/WebTest.java
new file mode 100644
index 0000000..fee7d18
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/WebTest.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "cdi-servlet-annotation";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0. initParams: n1=v1, n2=v2";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for @WebServlet");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/build.properties b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/build.properties
new file mode 100644
index 0000000..d2f36aa
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-servlet-annotation"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/build.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/build.xml
new file mode 100644
index 0000000..83ad666
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/build.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/lib/slf4j-api-1.7.25.jar b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/lib/slf4j-api-1.7.25.jar
new file mode 100644
index 0000000..0143c09
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/lib/slf4j-api-1.7.25.jar
Binary files differ
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/lib/slf4j-simple-1.7.25.jar b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/lib/slf4j-simple-1.7.25.jar
new file mode 100644
index 0000000..a7260f3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/lib/slf4j-simple-1.7.25.jar
Binary files differ
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/servlet/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/servlet/TestBean.java
new file mode 100644
index 0000000..6d059e2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/servlet/TestBean.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+//Simple TestBean to test CDI. 
+//This bean implements Serializable as it needs to be placed into a Stateful Bean
+public class TestBean
+{}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/servlet/TestLoggerProducer.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/servlet/TestLoggerProducer.java
new file mode 100644
index 0000000..04785e9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/servlet/TestLoggerProducer.java
@@ -0,0 +1,29 @@
+/*
+ * 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 javax.enterprise.inject.Produces;
+import org.jboss.logging.Logger;
+
+
+public class TestLoggerProducer {
+    @Produces
+    public org.jboss.logging.Logger getLogger(){
+        Logger l = Logger.getLogger(TestLoggerProducer.class);
+        System.out.println("getLogger:: " + l);
+        return l;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/servlet/TestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/servlet/TestServlet.java
new file mode 100644
index 0000000..baa7aae
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-3.0-annotation/servlet/TestServlet.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.IOException;
+import java.io.PrintWriter;
+import java.util.Enumeration;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.inject.Inject;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.naming.InitialContext;
+
+@WebServlet(name="mytest",
+        urlPatterns={"/myurl"},
+        initParams={ @WebInitParam(name="n1", value="v1"), @WebInitParam(name="n2", value="v2") } )
+public class TestServlet extends HttpServlet {
+    @Inject TestBean tb;
+    @Inject BeanManager bm;
+    BeanManager bm1;
+    
+    @Inject 
+    private transient org.jboss.logging.Logger log;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0. ");
+        String msg = "n1=" + getInitParameter("n1") +
+            ", n2=" + getInitParameter("n2");
+        if (tb == null) msg += "Bean injection into Servlet failed";
+        if (bm == null) msg += "BeanManager Injection via @Inject failed";
+        try {
+            bm1 = (BeanManager)((new InitialContext()).lookup("java:comp/BeanManager"));
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            msg += "BeanManager Injection via component environment lookup failed";
+        }
+        if (bm1 == null) msg += "BeanManager Injection via component environment lookup failed";
+        
+        System.out.println("BeanManager is " + bm);
+        System.out.println("BeanManager via lookup is " + bm1);
+        writer.write("initParams: " + msg + "\n");
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-filter-3.0-annotation/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-filter-3.0-annotation/WebTest.java
new file mode 100644
index 0000000..b2da7d5
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-filter-3.0-annotation/WebTest.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "cdi-servlet-filter-annotation";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for @WebServlet");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-filter-3.0-annotation/build.properties b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-filter-3.0-annotation/build.properties
new file mode 100644
index 0000000..a9ba810
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-filter-3.0-annotation/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-servlet-filter-annotation"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-filter-3.0-annotation/build.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-filter-3.0-annotation/build.xml
new file mode 100644
index 0000000..83ad666
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-filter-3.0-annotation/build.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-filter-3.0-annotation/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-filter-3.0-annotation/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-filter-3.0-annotation/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-filter-3.0-annotation/servlet/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-filter-3.0-annotation/servlet/TestBean.java
new file mode 100644
index 0000000..6d059e2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-filter-3.0-annotation/servlet/TestBean.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+//Simple TestBean to test CDI. 
+//This bean implements Serializable as it needs to be placed into a Stateful Bean
+public class TestBean
+{}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-filter-3.0-annotation/servlet/TestFilter.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-filter-3.0-annotation/servlet/TestFilter.java
new file mode 100644
index 0000000..7137f70
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-filter-3.0-annotation/servlet/TestFilter.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.IOException;
+
+import javax.enterprise.inject.spi.BeanManager;
+import javax.inject.Inject;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.annotation.WebFilter;
+
+@WebFilter(urlPatterns = "/*")
+public class TestFilter implements Filter {
+    @Inject
+    TestBean tb;
+    @Inject
+    BeanManager bm;
+
+    @Override
+    public void destroy() {
+        System.out.println("TestFilter:destroy()");
+
+    }
+
+    @Override
+    public void doFilter(ServletRequest req, ServletResponse res,
+            FilterChain fc) throws IOException, ServletException {
+        System.out.println("TestFilter:doFilter()");
+        System.out.println("TestBean injected:"+ tb);
+        System.out.println("BeanManager injected:"+ bm);
+        if (tb == null)
+            throw new ServletException("Injection of TestBean in ServletFilter failed");
+        if (bm == null)
+            throw new ServletException("Injection of BeanManager in ServletFilter failed");
+        fc.doFilter(req, res);
+    }
+
+    @Override
+    public void init(FilterConfig arg0) throws ServletException {
+        System.out.println("TestFilter:init()");
+    }
+
+}
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-filter-3.0-annotation/servlet/TestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-filter-3.0-annotation/servlet/TestServlet.java
new file mode 100644
index 0000000..475d9fa
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/cdi-servlet-filter-3.0-annotation/servlet/TestServlet.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.IOException;
+import java.io.PrintWriter;
+
+import javax.enterprise.inject.spi.BeanManager;
+import javax.inject.Inject;
+import javax.naming.InitialContext;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@WebServlet(name="mytest", urlPatterns={"/myurl"})
+public class TestServlet extends HttpServlet {
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/README b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/README
new file mode 100644
index 0000000..b38dca5
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/README
@@ -0,0 +1,2 @@
+Regression test for GLASSFISH-16318
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/WebTest.java
new file mode 100644
index 0000000..bcd25ae
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/WebTest.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "optional-unbundled-beans";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0. initParams: n1=v1, n2=v2";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for @WebServlet");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.properties b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.properties
new file mode 100644
index 0000000..36b4298
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-optional-unbundled-beans"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml
new file mode 100644
index 0000000..2ba7c3a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+
+        <!-- remove the class that needs to be unavailable in the deployment archive -->
+        <delete file="${build.classes.dir}/ClassUnavailableAtRuntime.class"/>
+ 
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/foo.txt b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/foo.txt
new file mode 100644
index 0000000..34945c0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/foo.txt
@@ -0,0 +1,1987 @@
+Apache Ant version 1.7.1 compiled on June 27 2008
+Buildfile: build.xml
+Detected Java version: 1.6 in: /space/apps/jdk1.6.0_22/jre
+Detected OS: Linux
+parsing buildfile /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml with URI = file:/export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml
+Project base dir set to: /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/config/properties.xml
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/config/common.xml
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.properties
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/config/run.xml
+[antlib:org.apache.tools.ant] Could not load definitions from resource org/apache/tools/ant/antlib.xml. It could not be found.
+ [property] Loading Environment env.
+Property "BASH_SOURCE" has not been set
+Property "LINENO" has not been set
+Property "FUNCNAME[0]" has not been set
+Property "NEW_PWD" has not been set
+Property "build.classes.dir" has not been set
+ [macrodef] creating macro  run-test
+Build sequence for target(s) `clean' is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean]
+Complete build sequence is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean, restart-instance-common, execute-sql-common, deploy-rar-common, undeploy, deploy-jdbc-common, undeploy-rar-common, set-derby-connpool-props, create-sql-common, deploy-war-no-context-root-pe, verifier-common, start-server-unix, test-tagfiles-exist, create-PermSize, execute-ejb-sql-common, undeploy-client-common, prepare-keystore-common, deploy-verify-common-ee, startDerby, confirmMissingReport-common, create-connector-resource-common, asadmin-common, create-connector-connpool, delete-connector-connpool-common, verifier, start-clean-server, runwebclient-common, deploy-common-ee, startDerbyNonMac, webclient-war-common, flush-connpool-common, stopDerby, clean-webapps-common, delete-jdbc-connpool-common, prepare-truststore-common, deploy-verify-common, run, test-tlds-exist, deploy-verify-common-pe, undeploy-common, undeploy-jar-common, deploy-client-common, enterprise-common, create-javamail-resource-common, package-persistence-common, deploy-war-commonee, startDomainWindows, set-derby-driver-connpool-props, deploy-war-no-context-root, undeploy-jdbc-common, deploy-common-pe, clear, copy-tagfiles, compile, build, deploy, restart-server-instance-common, deploy-jar-common, delete-domain-common, stopPB, compile-common-with-endorsed-dir, import-wsdl, deploy-war-commonpe, compile-common, restart-server, runclient-common, package-appclientjar-common, ee-common, copy-tlds, delete-persistence-resource-common, undeploy-jms-common, asadmin-common-ignore-fail, startDomainUnix, startDomain, fixFiles, ejb-jar-common, appclient-jar-common, build-ear-common, publish-war-common, build-publish-war, stop-server-unix, clean-classes-common, clean-common, create-jdbc-connpool-common, dev-report, startDerbyMac, deploy-jms-common, package-war-common, package-ejbjar-common, delete-connector-resource-common, deploy-jsp-common, unsetupTimer, undeploy-war-common, change-orb-port, delete-javamail-resource-common, deploy-common, create-jms-resource-common, setup-mq-common, delete-jdbc-resource-common, start-server-windows, dumpThreadStack, setupTimer, deploy-war-common, start-server, ee, checkReporting-common, testTimer, stop-server, create-jdbc-driver-connpool-common, all, platform-common, create-jms-connection-common, undeploy-war-name, cleanAS, deploy-dir, preparePB, stop-server-windows, confirmReportPresent-common, delete-jms-resource-common, pb, runtest, create-jvm-options, clean-jars-common, restart-instance, stopDomain, create-connector-connpool-common, set-pointbase-driver-connpool-props, delete-sql-common, deploy-jdbc-driver-common, create-domain-common, delete-jvm-options, create-jdbc-resource-common, prepare-truststore-certutil-common, create-user-common, asadmin-batch-common, delete-user-common, prepare-truststore-keytool-common, convWin, create-persistence-resource-common, get-version-common, startPB, delete-jms-connection-common, usage-common, deploy-war-no-context-root-ee, set-pointbase-connpool-props, usage, convUnix, staticCheck-common, ear-common, deploy-war-name, ]
+
+setToolWin:
+Skipped because property 'isWindows' not set.
+
+setS1ASclassPath:
+[pathconvert] Set property s1as.classpath = /export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/acc-config.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/admin-cli.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/admin-core.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/admin-util.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/amx-all.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/annotation-framework.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/ant.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/antlr-repackaged.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/api-exporter.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/appclient-connector.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/appclient-server-core.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/appclient.security.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/asm-all-repackaged.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/auto-depends.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/autostart/org.apache.felix.bundlerepository.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/autostart/org.apache.felix.eventadmin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/autostart/org.apache.felix.scr.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/autostart/osgi-cdi.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/autostart/osgi-ee-resources.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/autostart/osgi-ejb-container.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/autostart/osgi-javaee-base.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/autostart/osgi-jdbc.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/autostart/osgi-jpa.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/autostart/osgi-jta.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/autostart/osgi-web-container.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/backup.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/bean-validator.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/branding.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/class-model.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cli-optional.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cluster-admin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cluster-cli.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cluster-common.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cluster-ssh.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cmp-ejb-mapping.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cmp-enhancer.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cmp-generator-database.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cmp-internal-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cmp-model.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cmp-support-ejb.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cmp-support-sqlstore.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cmp-utility.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/common-util.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/config-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/config-types.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/config.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/connectors-admin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/connectors-inbound-runtime.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/connectors-internal-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/connectors-runtime.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-cluster-plugin-help.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-cluster-plugin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-common-full-plugin-help.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-common-full-plugin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-common-help.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-common.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-community-branding-plugin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-corba-plugin-help.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-corba-plugin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-ejb-lite-plugin-help.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-ejb-lite-plugin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-ejb-plugin-help.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-ejb-plugin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-jca-plugin-help.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-jca-plugin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-jdbc-plugin-help.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-jdbc-plugin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-jms-plugin-help.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-jms-plugin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-jts-plugin-help.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-jts-plugin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-plugin-service.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-updatecenter-plugin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-web-plugin-help.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-web-plugin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/container-common.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/dataprovider.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/dbschema-repackaged.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/deployment-admin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/deployment-autodeploy.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/deployment-client.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/deployment-common.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/deployment-javaee-core.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/deployment-javaee-full.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/dol.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/ejb-container.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/ejb-internal-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/ejb.security.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/el-impl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/endorsed/javax.annotation.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/endorsed/jaxb-api-osgi.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/endorsed/webservices-api-osgi.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/flashlight-extra-jdk-packages.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/flashlight-framework.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/gf-client-module.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/gf-connectors-connector.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/gf-ejb-connector.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/gf-web-connector.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-corba-asm.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-corba-codegen.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-corba-csiv2-idl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-corba-internal-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-corba-newtimer.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-corba-omgapi.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-corba-orb.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-corba-orbgeneric.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-ee-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-extra-jre-packages.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-mbeanserver.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-naming.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-oracle-jdbc-driver-packages.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-registration.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/gmbal-api-only.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/gmbal.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/gms-adapter.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/gms-bootstrap.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/grizzly-comet.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/grizzly-config.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/grizzly-container.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/grizzly-framework-tests.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/grizzly-framework.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/grizzly-http-ajp.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/grizzly-http-server.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/grizzly-http-servlet.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/grizzly-http.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/grizzly-portunif.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/grizzly-rcm.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/grizzly-websockets.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/ha-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/ha-file-store.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/ha-shoal-cache-bootstrap.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/ha-shoal-cache-store.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/hk2-core.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/hk2.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/inmemory.jacc.provider.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/internal-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jackson-core-asl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jackson-jaxrs.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jackson-mapper-asl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jackson-xc.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jaspic.provider.framework.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javaee-kernel.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.ejb.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.enterprise.deploy.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.jms.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.mail.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.management.j2ee.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.persistence.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.resource.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.security.auth.message.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.security.jacc.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.servlet.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.servlet.jsp.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.servlet.jsp.jstl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.transaction.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jaxb-osgi.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jaxrpc-api-osgi.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jdbc-admin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jersey-client.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jersey-core.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jersey-gf-server.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jersey-gf-statsproviders.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jersey-grizzly2.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jersey-json.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jersey-multipart.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jettison.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jms-admin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jms-core.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jmxremote_optional-repackaged.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jpa-connector.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jsf-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jsf-connector.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jsf-impl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jsftemplating.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jsp-impl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jspcaching-connector.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jsr109-impl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jstl-connector.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jstl-impl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jta.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jts.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/kernel.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/launcher.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/ldapbp-repackaged.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/libpam4j-repackaged.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/libvirt.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/load-balancer-admin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/logging.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/management-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/metro-glue.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/mimepull.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/monitoring-core.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/orb-connector.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/orb-enabler.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/orb-iiop.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.apache.felix.configadmin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.apache.felix.fileinstall.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.apache.felix.gogo.command.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.apache.felix.gogo.runtime.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.apache.felix.gogo.shell.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.apache.felix.shell.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.apache.felix.shell.remote.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.apache.felix.shell.tui.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.eclipse.persistence.antlr.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.eclipse.persistence.asm.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.eclipse.persistence.core.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.eclipse.persistence.jpa.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.eclipse.persistence.jpa.modelgen.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.eclipse.persistence.oracle.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/osgi-adapter.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/osgi-container.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/osgi-jpa-extension.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/osgi-main.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/osgi-resource-locator.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/persistence-common.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/pkg-client.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/registration-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/registration-impl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/rest-service.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/scattered-archive-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/schema2beans-repackaged.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/security.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/server-mgmt.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/shoal-cache.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/shoal-gms-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/shoal-gms-impl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/simple-glassfish-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/soap-tcp.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/ssl-impl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/stats77.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/transaction-internal-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/trilead-ssh2-repackaged.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/virt-core.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/war-util.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/web-cli.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/web-core.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/web-embed-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/web-embed-impl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/web-glue.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/web-gui-plugin-common.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/web-ha.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/web-naming.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/websecurity.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/webservices-connector.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/webservices-extra-jdk-packages.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/webservices-osgi.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/webservices.security.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/weld-integration-fragment.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/weld-integration.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/weld-osgi-bundle.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/woodstox-osgi.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/work-management.jar
+
+init-common:
+     [echo] Loading props from file /export/work/workspaces/gfv3/appserv-tests/config.properties
+ [property] Loading /export/work/workspaces/gfv3/appserv-tests/config.properties
+     [echo] admin.domain domain1
+     [echo] admin.user admin
+     [echo] admin.port 4848
+     [echo] http.port 8080
+     [echo] http.host localhost
+ [property] Loading /export/work/workspaces/gfv3/appserv-tests/config/derby.properties
+Property "env.JAVKE_HOME" has not been set
+Property "Derby.classpath" has not been set
+Override ignored for property "cluster.name"
+
+clean:
+Project base dir set to: /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans
+  [antcall] calling target(s) [clean-common] in build file /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml
+parsing buildfile /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml with URI = file:/export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml
+Project base dir set to: /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/config/properties.xml
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/config/common.xml
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.properties
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/config/run.xml
+ [property] Loading Environment env.
+Override ignored for property "env.SESSION_MANAGER"
+Override ignored for property "env.LESSOPEN"
+Override ignored for property "env.NORMBGCOLOR"
+Override ignored for property "env.CVSROOT"
+Override ignored for property "env.MY_ANT_HOME"
+Override ignored for property "env.PWD"
+Override ignored for property "env.XDG_SESSION_COOKIE"
+Override ignored for property "env.LANG"
+Override ignored for property "env.WS"
+Override ignored for property "env.AWT_TOOLKIT"
+Override ignored for property "env.DEFAULTS_PATH"
+Override ignored for property "env.HISTSIZE"
+Override ignored for property "env.INSTALL_ROOT"
+Override ignored for property "env.DISPLAY"
+Override ignored for property "env._"
+Override ignored for property "env.USER"
+Override ignored for property "env.HISTCONTROL"
+Override ignored for property "env.SHELL"
+Override ignored for property "env.NLSPATH"
+Override ignored for property "env.XDG_DATA_DIRS"
+Override ignored for property "env.DESKTOP_SESSION"
+Override ignored for property "env.HISTFILESIZE"
+Override ignored for property "env.APS_HOME"
+Override ignored for property "env.WIDTH"
+Override ignored for property "env.JAVANETCVSROOT"
+Override ignored for property "env.PATH"
+Override ignored for property "env.no_proxy"
+Override ignored for property "env.NORMFGCOLOR"
+Override ignored for property "env.LC_CTYPE"
+Override ignored for property "env.DBUS_SESSION_BUS_ADDRESS"
+Override ignored for property "env.REALPLAYER_HOME"
+Override ignored for property "env.SSH_AGENT_PID"
+Override ignored for property "env.SHLVL"
+Override ignored for property "env.GDMSESSION"
+Override ignored for property "env.GNOME_DESKTOP_SESSION_ID"
+Override ignored for property "env.GDM_KEYBOARD_LAYOUT"
+Override ignored for property "env.GNOME_KEYRING_PID"
+Override ignored for property "env.OS"
+Override ignored for property "env.LOGNAME"
+Override ignored for property "env.ALSA_OUTPUT_PORTS"
+Override ignored for property "env.SCUMMVM_PORT"
+Override ignored for property "env.JAVA_HOME"
+Override ignored for property "env.TERM"
+Override ignored for property "env.QLTESTRES"
+Override ignored for property "env.NO_PROXY"
+Override ignored for property "env.GDM_LANG"
+Override ignored for property "env.DTACH_HOME"
+Override ignored for property "env.OLDPWD"
+Override ignored for property "env.DEBUG"
+Override ignored for property "env.GCONF_LOCAL_LOCKS"
+Override ignored for property "env.M2_HOME"
+Override ignored for property "env.EC2_CERT"
+Override ignored for property "env.WINDOWID"
+Override ignored for property "env.EC2_PRIVATE_KEY"
+Override ignored for property "env.REDCVSROOT"
+Override ignored for property "env.MOZ_DISABLE_PANGO"
+Override ignored for property "env.XFILESEARCHPATH"
+Override ignored for property "env.HOME"
+Override ignored for property "env.ANT_HOME"
+Override ignored for property "env.LD_LIBRARY_PATH"
+Override ignored for property "env.MAVEN_OPTS"
+Override ignored for property "env.SSH_AUTH_SOCK"
+Override ignored for property "env.RBARWIDTH"
+Override ignored for property "env.S1AS_HOME"
+Property "BASH_SOURCE" has not been set
+Property "LINENO" has not been set
+Property "FUNCNAME[0]" has not been set
+Override ignored for property "env.PS4"
+Override ignored for property "env.MAVEN_HOME"
+Override ignored for property "env.XAUTHORITY"
+Property "NEW_PWD" has not been set
+Override ignored for property "env.PS1"
+Override ignored for property "env.MANDATORY_PATH"
+Override ignored for property "env.SPEECHD_PORT"
+Override ignored for property "env.GTK_MODULES"
+Override ignored for property "env.WINDOW_MANAGER"
+Override ignored for property "env.DTRX_HOME"
+Override ignored for property "env.COLORTERM"
+Override ignored for property "env.EDITOR"
+Override ignored for property "env.MALLOC_CHECK_"
+Override ignored for property "env.ORBIT_SOCKETDIR"
+Override ignored for property "env.WP_INSTALL_ROOT"
+Override ignored for property "env.USERNAME"
+Override ignored for property "env.SCALA_HOME"
+Override ignored for property "env.COPE_PATH"
+Override ignored for property "env.QL_HOME"
+Override ignored for property "env.AS_ADMIN_READTIMEOUT"
+Override ignored for property "env.MY_SCRIPT_DIR"
+Override ignored for property "env.GNOME_KEYRING_CONTROL"
+Override ignored for property "env.XDG_CONFIG_DIRS"
+Override ignored for property "env.TODOTXT_HOME"
+Override ignored for property "env.LESSCLOSE"
+Override ignored for property "module"
+Override ignored for property "appname"
+Override ignored for property "assemble"
+Override ignored for property "contextroot"
+Override ignored for property "beans.xml"
+Override ignored for property "target-to-run"
+ [macrodef] creating macro  run-test
+Build sequence for target(s) `clean-common' is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean-common]
+Complete build sequence is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean-common, restart-instance-common, execute-sql-common, deploy-rar-common, undeploy, deploy-jdbc-common, undeploy-rar-common, set-derby-connpool-props, create-sql-common, deploy-war-no-context-root-pe, verifier-common, start-server-unix, test-tagfiles-exist, create-PermSize, execute-ejb-sql-common, undeploy-client-common, prepare-keystore-common, deploy-verify-common-ee, startDerby, confirmMissingReport-common, create-connector-resource-common, asadmin-common, create-connector-connpool, delete-connector-connpool-common, verifier, start-clean-server, runwebclient-common, deploy-common-ee, startDerbyNonMac, webclient-war-common, flush-connpool-common, stopDerby, clean-webapps-common, delete-jdbc-connpool-common, prepare-truststore-common, deploy-verify-common, run, test-tlds-exist, deploy-verify-common-pe, undeploy-common, undeploy-jar-common, deploy-client-common, enterprise-common, create-javamail-resource-common, package-persistence-common, deploy-war-commonee, startDomainWindows, set-derby-driver-connpool-props, deploy-war-no-context-root, undeploy-jdbc-common, deploy-common-pe, clear, copy-tagfiles, clean, compile, build, deploy, restart-server-instance-common, deploy-jar-common, delete-domain-common, stopPB, compile-common-with-endorsed-dir, import-wsdl, deploy-war-commonpe, compile-common, restart-server, runclient-common, package-appclientjar-common, ee-common, copy-tlds, delete-persistence-resource-common, undeploy-jms-common, asadmin-common-ignore-fail, startDomainUnix, startDomain, fixFiles, ejb-jar-common, appclient-jar-common, build-ear-common, publish-war-common, build-publish-war, stop-server-unix, clean-classes-common, create-jdbc-connpool-common, dev-report, startDerbyMac, deploy-jms-common, package-war-common, package-ejbjar-common, delete-connector-resource-common, deploy-jsp-common, unsetupTimer, undeploy-war-common, change-orb-port, delete-javamail-resource-common, deploy-common, create-jms-resource-common, setup-mq-common, delete-jdbc-resource-common, start-server-windows, dumpThreadStack, setupTimer, deploy-war-common, start-server, ee, checkReporting-common, testTimer, stop-server, create-jdbc-driver-connpool-common, all, platform-common, create-jms-connection-common, undeploy-war-name, cleanAS, deploy-dir, preparePB, stop-server-windows, confirmReportPresent-common, delete-jms-resource-common, pb, runtest, create-jvm-options, clean-jars-common, restart-instance, stopDomain, create-connector-connpool-common, set-pointbase-driver-connpool-props, delete-sql-common, deploy-jdbc-driver-common, create-domain-common, delete-jvm-options, create-jdbc-resource-common, prepare-truststore-certutil-common, create-user-common, asadmin-batch-common, delete-user-common, prepare-truststore-keytool-common, convWin, create-persistence-resource-common, get-version-common, startPB, delete-jms-connection-common, usage-common, deploy-war-no-context-root-ee, set-pointbase-connpool-props, usage, convUnix, staticCheck-common, ear-common, deploy-war-name, ]
+  [antcall] Entering /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml...
+Build sequence for target(s) `clean-common' is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean-common]
+Complete build sequence is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean-common, restart-instance-common, execute-sql-common, deploy-rar-common, undeploy, deploy-jdbc-common, undeploy-rar-common, set-derby-connpool-props, create-sql-common, deploy-war-no-context-root-pe, verifier-common, start-server-unix, test-tagfiles-exist, create-PermSize, execute-ejb-sql-common, undeploy-client-common, prepare-keystore-common, deploy-verify-common-ee, startDerby, confirmMissingReport-common, create-connector-resource-common, asadmin-common, create-connector-connpool, delete-connector-connpool-common, verifier, start-clean-server, runwebclient-common, deploy-common-ee, startDerbyNonMac, webclient-war-common, flush-connpool-common, stopDerby, clean-webapps-common, delete-jdbc-connpool-common, prepare-truststore-common, deploy-verify-common, run, test-tlds-exist, deploy-verify-common-pe, undeploy-common, undeploy-jar-common, deploy-client-common, enterprise-common, create-javamail-resource-common, package-persistence-common, deploy-war-commonee, startDomainWindows, set-derby-driver-connpool-props, deploy-war-no-context-root, undeploy-jdbc-common, deploy-common-pe, clear, copy-tagfiles, clean, compile, build, deploy, restart-server-instance-common, deploy-jar-common, delete-domain-common, stopPB, compile-common-with-endorsed-dir, import-wsdl, deploy-war-commonpe, compile-common, restart-server, runclient-common, package-appclientjar-common, ee-common, copy-tlds, delete-persistence-resource-common, undeploy-jms-common, asadmin-common-ignore-fail, startDomainUnix, startDomain, fixFiles, ejb-jar-common, appclient-jar-common, build-ear-common, publish-war-common, build-publish-war, stop-server-unix, clean-classes-common, create-jdbc-connpool-common, dev-report, startDerbyMac, deploy-jms-common, package-war-common, package-ejbjar-common, delete-connector-resource-common, deploy-jsp-common, unsetupTimer, undeploy-war-common, change-orb-port, delete-javamail-resource-common, deploy-common, create-jms-resource-common, setup-mq-common, delete-jdbc-resource-common, start-server-windows, dumpThreadStack, setupTimer, deploy-war-common, start-server, ee, checkReporting-common, testTimer, stop-server, create-jdbc-driver-connpool-common, all, platform-common, create-jms-connection-common, undeploy-war-name, cleanAS, deploy-dir, preparePB, stop-server-windows, confirmReportPresent-common, delete-jms-resource-common, pb, runtest, create-jvm-options, clean-jars-common, restart-instance, stopDomain, create-connector-connpool-common, set-pointbase-driver-connpool-props, delete-sql-common, deploy-jdbc-driver-common, create-domain-common, delete-jvm-options, create-jdbc-resource-common, prepare-truststore-certutil-common, create-user-common, asadmin-batch-common, delete-user-common, prepare-truststore-keytool-common, convWin, create-persistence-resource-common, get-version-common, startPB, delete-jms-connection-common, usage-common, deploy-war-no-context-root-ee, set-pointbase-connpool-props, usage, convUnix, staticCheck-common, ear-common, deploy-war-name, ]
+
+setOSConditions:
+Override ignored for property "isUnix"
+
+setToolWin:
+Skipped because property 'isWindows' not set.
+
+setToolUnix:
+Override ignored for property "APPCLIENT"
+Override ignored for property "ASADMIN"
+Override ignored for property "ASANT"
+Override ignored for property "CAPTURESCHEMA"
+Override ignored for property "CHECKPATCH"
+Override ignored for property "INSTALLPATCH"
+Override ignored for property "JSPC"
+Override ignored for property "LISTPATCH"
+Override ignored for property "PACKAGE-APPCLIENT"
+Override ignored for property "VERIFIER"
+Override ignored for property "RMIC"
+Override ignored for property "TNAMESERV"
+Override ignored for property "WSCOMPILE"
+Override ignored for property "WSIMPORT"
+Override ignored for property "pb.start.server"
+Override ignored for property "pb.start.server1"
+Override ignored for property "IMQDBMGR"
+Override ignored for property "ld.library.path"
+
+setS1ASclassPath:
+Skipped because property 's1as.classpath' set.
+
+init-common:
+     [echo] Loading props from file /export/work/workspaces/gfv3/appserv-tests/config.properties
+Override ignored for property "pe"
+ [property] Loading /export/work/workspaces/gfv3/appserv-tests/config.properties
+Override ignored for property "instance.https.port"
+Override ignored for property "admin.domain"
+Override ignored for property "admin.password"
+Override ignored for property "http.address"
+Override ignored for property "http.alternate.port"
+Override ignored for property "ssl.password"
+Override ignored for property "instance.http.port"
+Override ignored for property "resources.dottedname.prefix"
+Override ignored for property "results.mailer"
+Override ignored for property "admin.domain.dir"
+Override ignored for property "admin.user"
+Override ignored for property "config.dottedname.prefix"
+Override ignored for property "instance.name"
+Override ignored for property "precompilejsp"
+Override ignored for property "admin.password.file"
+Override ignored for property "http.port"
+Override ignored for property "https.port"
+Override ignored for property "results.mailee"
+Override ignored for property "appserver.instance.name"
+Override ignored for property "master.password"
+Override ignored for property "http.host"
+Override ignored for property "instance.http.port.3"
+Override ignored for property "instance.http.port.2"
+Override ignored for property "admin.port"
+Override ignored for property "cluster.name"
+Override ignored for property "appserver.instance.dir"
+Override ignored for property "autodeploy.dir"
+Override ignored for property "orb.port"
+Override ignored for property "admin.host"
+Override ignored for property "instance.name.3"
+Override ignored for property "instance.name.2"
+Override ignored for property "results.mailhost"
+     [echo] admin.domain domain1
+     [echo] admin.user admin
+     [echo] admin.port 4848
+     [echo] http.port 8080
+     [echo] http.host localhost
+Override ignored for property "as.props"
+Override ignored for property "authrealmname"
+Override ignored for property "apptype"
+Override ignored for property "db.root"
+Override ignored for property "db.dir"
+Override ignored for property "db.classpath"
+ [property] Loading /export/work/workspaces/gfv3/appserv-tests/config/derby.properties
+Override ignored for property "db.host"
+Override ignored for property "db.url"
+Override ignored for property "db.xaclass"
+Override ignored for property "db.name"
+Override ignored for property "db.driver"
+Override ignored for property "db.port"
+Override ignored for property "db.port.2"
+Override ignored for property "db.class"
+Override ignored for property "db.user"
+Override ignored for property "db.pwd"
+Override ignored for property "db.type"
+Property "env.JAVKE_HOME" has not been set
+Override ignored for property "javke.home"
+Override ignored for property "dest.type"
+Override ignored for property "dest.name"
+Override ignored for property "jms.factory.name"
+Override ignored for property "jms.factory.type"
+Override ignored for property "jms.resource.name"
+Override ignored for property "jms.resource.type"
+Override ignored for property "jdbc.conpool.name"
+Override ignored for property "jdbc.resource.name"
+Override ignored for property "jdbc.resource.type"
+Override ignored for property "pm.resource.name"
+Override ignored for property "pm.factory.class"
+Override ignored for property "appclient.application.args"
+Override ignored for property "build.base.dir"
+Override ignored for property "build.webapps.dir"
+Override ignored for property "build.classes.dir"
+Override ignored for property "assemble.dir"
+Override ignored for property "results.dir"
+Property "Derby.classpath" has not been set
+Override ignored for property "s1astest.classpath"
+Override ignored for property "ejbjar.classes"
+Override ignored for property "appclientjar.classes"
+Override ignored for property "webclient.war.files"
+Override ignored for property "webclient.war.classes"
+Override ignored for property "test.name"
+Override ignored for property "test.description"
+Override ignored for property "test.count"
+Override ignored for property "cluster.name"
+Override ignored for property "clustered.server.name"
+Override ignored for property "clustered.server.name.two"
+Override ignored for property "nodeagent.name"
+Override ignored for property "das.host"
+Override ignored for property "das.jmx.port"
+Override ignored for property "http.listener1.port"
+Override ignored for property "http.listener2.port"
+Override ignored for property "orb.listener1.port"
+Override ignored for property "ssl.port"
+Override ignored for property "ssl.mutualauth.port"
+Override ignored for property "jmx.system.connector.port"
+Override ignored for property "http.listener1.port.two"
+Override ignored for property "http.listener2.port.two"
+Override ignored for property "orb.listener1.port.two"
+Override ignored for property "ssl.port.two"
+Override ignored for property "ssl.mutualauth.port.two"
+Override ignored for property "jmx.system.connector.port.two"
+Override ignored for property "cert.nickname"
+
+clean-common:
+Project base dir set to: /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans
+  [antcall] calling target(s) [clean-classes-common] in build file /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml
+parsing buildfile /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml with URI = file:/export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml
+Project base dir set to: /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/config/properties.xml
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/config/common.xml
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.properties
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/config/run.xml
+ [property] Loading Environment env.
+Override ignored for property "env.SESSION_MANAGER"
+Override ignored for property "env.LESSOPEN"
+Override ignored for property "env.NORMBGCOLOR"
+Override ignored for property "env.CVSROOT"
+Override ignored for property "env.MY_ANT_HOME"
+Override ignored for property "env.PWD"
+Override ignored for property "env.XDG_SESSION_COOKIE"
+Override ignored for property "env.LANG"
+Override ignored for property "env.WS"
+Override ignored for property "env.AWT_TOOLKIT"
+Override ignored for property "env.DEFAULTS_PATH"
+Override ignored for property "env.HISTSIZE"
+Override ignored for property "env.INSTALL_ROOT"
+Override ignored for property "env.DISPLAY"
+Override ignored for property "env._"
+Override ignored for property "env.USER"
+Override ignored for property "env.HISTCONTROL"
+Override ignored for property "env.SHELL"
+Override ignored for property "env.NLSPATH"
+Override ignored for property "env.XDG_DATA_DIRS"
+Override ignored for property "env.DESKTOP_SESSION"
+Override ignored for property "env.HISTFILESIZE"
+Override ignored for property "env.APS_HOME"
+Override ignored for property "env.WIDTH"
+Override ignored for property "env.JAVANETCVSROOT"
+Override ignored for property "env.PATH"
+Override ignored for property "env.no_proxy"
+Override ignored for property "env.NORMFGCOLOR"
+Override ignored for property "env.LC_CTYPE"
+Override ignored for property "env.DBUS_SESSION_BUS_ADDRESS"
+Override ignored for property "env.REALPLAYER_HOME"
+Override ignored for property "env.SSH_AGENT_PID"
+Override ignored for property "env.SHLVL"
+Override ignored for property "env.GDMSESSION"
+Override ignored for property "env.GNOME_DESKTOP_SESSION_ID"
+Override ignored for property "env.GDM_KEYBOARD_LAYOUT"
+Override ignored for property "env.GNOME_KEYRING_PID"
+Override ignored for property "env.OS"
+Override ignored for property "env.LOGNAME"
+Override ignored for property "env.ALSA_OUTPUT_PORTS"
+Override ignored for property "env.SCUMMVM_PORT"
+Override ignored for property "env.JAVA_HOME"
+Override ignored for property "env.TERM"
+Override ignored for property "env.QLTESTRES"
+Override ignored for property "env.NO_PROXY"
+Override ignored for property "env.GDM_LANG"
+Override ignored for property "env.DTACH_HOME"
+Override ignored for property "env.OLDPWD"
+Override ignored for property "env.DEBUG"
+Override ignored for property "env.GCONF_LOCAL_LOCKS"
+Override ignored for property "env.M2_HOME"
+Override ignored for property "env.EC2_CERT"
+Override ignored for property "env.WINDOWID"
+Override ignored for property "env.EC2_PRIVATE_KEY"
+Override ignored for property "env.REDCVSROOT"
+Override ignored for property "env.MOZ_DISABLE_PANGO"
+Override ignored for property "env.XFILESEARCHPATH"
+Override ignored for property "env.HOME"
+Override ignored for property "env.ANT_HOME"
+Override ignored for property "env.LD_LIBRARY_PATH"
+Override ignored for property "env.MAVEN_OPTS"
+Override ignored for property "env.SSH_AUTH_SOCK"
+Override ignored for property "env.RBARWIDTH"
+Override ignored for property "env.S1AS_HOME"
+Property "BASH_SOURCE" has not been set
+Property "LINENO" has not been set
+Property "FUNCNAME[0]" has not been set
+Override ignored for property "env.PS4"
+Override ignored for property "env.MAVEN_HOME"
+Override ignored for property "env.XAUTHORITY"
+Property "NEW_PWD" has not been set
+Override ignored for property "env.PS1"
+Override ignored for property "env.MANDATORY_PATH"
+Override ignored for property "env.SPEECHD_PORT"
+Override ignored for property "env.GTK_MODULES"
+Override ignored for property "env.WINDOW_MANAGER"
+Override ignored for property "env.DTRX_HOME"
+Override ignored for property "env.COLORTERM"
+Override ignored for property "env.EDITOR"
+Override ignored for property "env.MALLOC_CHECK_"
+Override ignored for property "env.ORBIT_SOCKETDIR"
+Override ignored for property "env.WP_INSTALL_ROOT"
+Override ignored for property "env.USERNAME"
+Override ignored for property "env.SCALA_HOME"
+Override ignored for property "env.COPE_PATH"
+Override ignored for property "env.QL_HOME"
+Override ignored for property "env.AS_ADMIN_READTIMEOUT"
+Override ignored for property "env.MY_SCRIPT_DIR"
+Override ignored for property "env.GNOME_KEYRING_CONTROL"
+Override ignored for property "env.XDG_CONFIG_DIRS"
+Override ignored for property "env.TODOTXT_HOME"
+Override ignored for property "env.LESSCLOSE"
+Override ignored for property "module"
+Override ignored for property "appname"
+Override ignored for property "assemble"
+Override ignored for property "contextroot"
+Override ignored for property "beans.xml"
+Override ignored for property "target-to-run"
+ [macrodef] creating macro  run-test
+Build sequence for target(s) `clean-classes-common' is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean-classes-common]
+Complete build sequence is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean-classes-common, restart-instance-common, execute-sql-common, deploy-rar-common, undeploy, deploy-jdbc-common, undeploy-rar-common, set-derby-connpool-props, create-sql-common, deploy-war-no-context-root-pe, verifier-common, start-server-unix, test-tagfiles-exist, create-PermSize, execute-ejb-sql-common, undeploy-client-common, prepare-keystore-common, deploy-verify-common-ee, startDerby, confirmMissingReport-common, create-connector-resource-common, asadmin-common, create-connector-connpool, delete-connector-connpool-common, verifier, start-clean-server, runwebclient-common, deploy-common-ee, startDerbyNonMac, webclient-war-common, flush-connpool-common, stopDerby, clean-webapps-common, delete-jdbc-connpool-common, prepare-truststore-common, deploy-verify-common, run, test-tlds-exist, deploy-verify-common-pe, undeploy-common, undeploy-jar-common, deploy-client-common, enterprise-common, create-javamail-resource-common, package-persistence-common, deploy-war-commonee, startDomainWindows, set-derby-driver-connpool-props, deploy-war-no-context-root, undeploy-jdbc-common, deploy-common-pe, clear, copy-tagfiles, clean, compile, build, deploy, restart-server-instance-common, deploy-jar-common, delete-domain-common, stopPB, compile-common-with-endorsed-dir, import-wsdl, deploy-war-commonpe, compile-common, restart-server, runclient-common, package-appclientjar-common, ee-common, copy-tlds, delete-persistence-resource-common, undeploy-jms-common, asadmin-common-ignore-fail, startDomainUnix, startDomain, fixFiles, ejb-jar-common, appclient-jar-common, build-ear-common, publish-war-common, build-publish-war, stop-server-unix, clean-common, create-jdbc-connpool-common, dev-report, startDerbyMac, deploy-jms-common, package-war-common, package-ejbjar-common, delete-connector-resource-common, deploy-jsp-common, unsetupTimer, undeploy-war-common, change-orb-port, delete-javamail-resource-common, deploy-common, create-jms-resource-common, setup-mq-common, delete-jdbc-resource-common, start-server-windows, dumpThreadStack, setupTimer, deploy-war-common, start-server, ee, checkReporting-common, testTimer, stop-server, create-jdbc-driver-connpool-common, all, platform-common, create-jms-connection-common, undeploy-war-name, cleanAS, deploy-dir, preparePB, stop-server-windows, confirmReportPresent-common, delete-jms-resource-common, pb, runtest, create-jvm-options, clean-jars-common, restart-instance, stopDomain, create-connector-connpool-common, set-pointbase-driver-connpool-props, delete-sql-common, deploy-jdbc-driver-common, create-domain-common, delete-jvm-options, create-jdbc-resource-common, prepare-truststore-certutil-common, create-user-common, asadmin-batch-common, delete-user-common, prepare-truststore-keytool-common, convWin, create-persistence-resource-common, get-version-common, startPB, delete-jms-connection-common, usage-common, deploy-war-no-context-root-ee, set-pointbase-connpool-props, usage, convUnix, staticCheck-common, ear-common, deploy-war-name, ]
+  [antcall] Entering /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml...
+Build sequence for target(s) `clean-classes-common' is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean-classes-common]
+Complete build sequence is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean-classes-common, restart-instance-common, execute-sql-common, deploy-rar-common, undeploy, deploy-jdbc-common, undeploy-rar-common, set-derby-connpool-props, create-sql-common, deploy-war-no-context-root-pe, verifier-common, start-server-unix, test-tagfiles-exist, create-PermSize, execute-ejb-sql-common, undeploy-client-common, prepare-keystore-common, deploy-verify-common-ee, startDerby, confirmMissingReport-common, create-connector-resource-common, asadmin-common, create-connector-connpool, delete-connector-connpool-common, verifier, start-clean-server, runwebclient-common, deploy-common-ee, startDerbyNonMac, webclient-war-common, flush-connpool-common, stopDerby, clean-webapps-common, delete-jdbc-connpool-common, prepare-truststore-common, deploy-verify-common, run, test-tlds-exist, deploy-verify-common-pe, undeploy-common, undeploy-jar-common, deploy-client-common, enterprise-common, create-javamail-resource-common, package-persistence-common, deploy-war-commonee, startDomainWindows, set-derby-driver-connpool-props, deploy-war-no-context-root, undeploy-jdbc-common, deploy-common-pe, clear, copy-tagfiles, clean, compile, build, deploy, restart-server-instance-common, deploy-jar-common, delete-domain-common, stopPB, compile-common-with-endorsed-dir, import-wsdl, deploy-war-commonpe, compile-common, restart-server, runclient-common, package-appclientjar-common, ee-common, copy-tlds, delete-persistence-resource-common, undeploy-jms-common, asadmin-common-ignore-fail, startDomainUnix, startDomain, fixFiles, ejb-jar-common, appclient-jar-common, build-ear-common, publish-war-common, build-publish-war, stop-server-unix, clean-common, create-jdbc-connpool-common, dev-report, startDerbyMac, deploy-jms-common, package-war-common, package-ejbjar-common, delete-connector-resource-common, deploy-jsp-common, unsetupTimer, undeploy-war-common, change-orb-port, delete-javamail-resource-common, deploy-common, create-jms-resource-common, setup-mq-common, delete-jdbc-resource-common, start-server-windows, dumpThreadStack, setupTimer, deploy-war-common, start-server, ee, checkReporting-common, testTimer, stop-server, create-jdbc-driver-connpool-common, all, platform-common, create-jms-connection-common, undeploy-war-name, cleanAS, deploy-dir, preparePB, stop-server-windows, confirmReportPresent-common, delete-jms-resource-common, pb, runtest, create-jvm-options, clean-jars-common, restart-instance, stopDomain, create-connector-connpool-common, set-pointbase-driver-connpool-props, delete-sql-common, deploy-jdbc-driver-common, create-domain-common, delete-jvm-options, create-jdbc-resource-common, prepare-truststore-certutil-common, create-user-common, asadmin-batch-common, delete-user-common, prepare-truststore-keytool-common, convWin, create-persistence-resource-common, get-version-common, startPB, delete-jms-connection-common, usage-common, deploy-war-no-context-root-ee, set-pointbase-connpool-props, usage, convUnix, staticCheck-common, ear-common, deploy-war-name, ]
+
+setOSConditions:
+Override ignored for property "isUnix"
+
+setToolWin:
+Skipped because property 'isWindows' not set.
+
+setToolUnix:
+Override ignored for property "APPCLIENT"
+Override ignored for property "ASADMIN"
+Override ignored for property "ASANT"
+Override ignored for property "CAPTURESCHEMA"
+Override ignored for property "CHECKPATCH"
+Override ignored for property "INSTALLPATCH"
+Override ignored for property "JSPC"
+Override ignored for property "LISTPATCH"
+Override ignored for property "PACKAGE-APPCLIENT"
+Override ignored for property "VERIFIER"
+Override ignored for property "RMIC"
+Override ignored for property "TNAMESERV"
+Override ignored for property "WSCOMPILE"
+Override ignored for property "WSIMPORT"
+Override ignored for property "pb.start.server"
+Override ignored for property "pb.start.server1"
+Override ignored for property "IMQDBMGR"
+Override ignored for property "ld.library.path"
+
+setS1ASclassPath:
+Skipped because property 's1as.classpath' set.
+
+init-common:
+     [echo] Loading props from file /export/work/workspaces/gfv3/appserv-tests/config.properties
+Override ignored for property "pe"
+ [property] Loading /export/work/workspaces/gfv3/appserv-tests/config.properties
+Override ignored for property "instance.https.port"
+Override ignored for property "admin.domain"
+Override ignored for property "admin.password"
+Override ignored for property "http.address"
+Override ignored for property "http.alternate.port"
+Override ignored for property "ssl.password"
+Override ignored for property "instance.http.port"
+Override ignored for property "resources.dottedname.prefix"
+Override ignored for property "results.mailer"
+Override ignored for property "admin.domain.dir"
+Override ignored for property "admin.user"
+Override ignored for property "config.dottedname.prefix"
+Override ignored for property "instance.name"
+Override ignored for property "precompilejsp"
+Override ignored for property "admin.password.file"
+Override ignored for property "http.port"
+Override ignored for property "https.port"
+Override ignored for property "results.mailee"
+Override ignored for property "appserver.instance.name"
+Override ignored for property "master.password"
+Override ignored for property "http.host"
+Override ignored for property "instance.http.port.3"
+Override ignored for property "instance.http.port.2"
+Override ignored for property "admin.port"
+Override ignored for property "cluster.name"
+Override ignored for property "appserver.instance.dir"
+Override ignored for property "autodeploy.dir"
+Override ignored for property "orb.port"
+Override ignored for property "admin.host"
+Override ignored for property "instance.name.3"
+Override ignored for property "instance.name.2"
+Override ignored for property "results.mailhost"
+     [echo] admin.domain domain1
+     [echo] admin.user admin
+     [echo] admin.port 4848
+     [echo] http.port 8080
+     [echo] http.host localhost
+Override ignored for property "as.props"
+Override ignored for property "authrealmname"
+Override ignored for property "apptype"
+Override ignored for property "db.root"
+Override ignored for property "db.dir"
+Override ignored for property "db.classpath"
+ [property] Loading /export/work/workspaces/gfv3/appserv-tests/config/derby.properties
+Override ignored for property "db.host"
+Override ignored for property "db.url"
+Override ignored for property "db.xaclass"
+Override ignored for property "db.name"
+Override ignored for property "db.driver"
+Override ignored for property "db.port"
+Override ignored for property "db.port.2"
+Override ignored for property "db.class"
+Override ignored for property "db.user"
+Override ignored for property "db.pwd"
+Override ignored for property "db.type"
+Property "env.JAVKE_HOME" has not been set
+Override ignored for property "javke.home"
+Override ignored for property "dest.type"
+Override ignored for property "dest.name"
+Override ignored for property "jms.factory.name"
+Override ignored for property "jms.factory.type"
+Override ignored for property "jms.resource.name"
+Override ignored for property "jms.resource.type"
+Override ignored for property "jdbc.conpool.name"
+Override ignored for property "jdbc.resource.name"
+Override ignored for property "jdbc.resource.type"
+Override ignored for property "pm.resource.name"
+Override ignored for property "pm.factory.class"
+Override ignored for property "appclient.application.args"
+Override ignored for property "build.base.dir"
+Override ignored for property "build.webapps.dir"
+Override ignored for property "build.classes.dir"
+Override ignored for property "assemble.dir"
+Override ignored for property "results.dir"
+Property "Derby.classpath" has not been set
+Override ignored for property "s1astest.classpath"
+Override ignored for property "ejbjar.classes"
+Override ignored for property "appclientjar.classes"
+Override ignored for property "webclient.war.files"
+Override ignored for property "webclient.war.classes"
+Override ignored for property "test.name"
+Override ignored for property "test.description"
+Override ignored for property "test.count"
+Override ignored for property "cluster.name"
+Override ignored for property "clustered.server.name"
+Override ignored for property "clustered.server.name.two"
+Override ignored for property "nodeagent.name"
+Override ignored for property "das.host"
+Override ignored for property "das.jmx.port"
+Override ignored for property "http.listener1.port"
+Override ignored for property "http.listener2.port"
+Override ignored for property "orb.listener1.port"
+Override ignored for property "ssl.port"
+Override ignored for property "ssl.mutualauth.port"
+Override ignored for property "jmx.system.connector.port"
+Override ignored for property "http.listener1.port.two"
+Override ignored for property "http.listener2.port.two"
+Override ignored for property "orb.listener1.port.two"
+Override ignored for property "ssl.port.two"
+Override ignored for property "ssl.mutualauth.port.two"
+Override ignored for property "jmx.system.connector.port.two"
+Override ignored for property "cert.nickname"
+
+clean-classes-common:
+     [echo] common.xml: Cleaning test source files: /export/work/workspaces/gfv3/appserv-tests/build/module
+   [delete] Deleting directory /export/work/workspaces/gfv3/appserv-tests/build/module
+   [delete] Deleting /export/work/workspaces/gfv3/appserv-tests/build/module/classes/TestServlet$1.class
+   [delete] Deleting /export/work/workspaces/gfv3/appserv-tests/build/module/classes/TestServlet.class
+   [delete] Deleting /export/work/workspaces/gfv3/appserv-tests/build/module/classes/TestBean.class
+   [delete] Deleting /export/work/workspaces/gfv3/appserv-tests/build/module/classes/TestLoggerProducer.class
+   [delete] Deleting /export/work/workspaces/gfv3/appserv-tests/build/module/classes/ClassUnavailableAtRuntime.class
+   [delete] Deleting /export/work/workspaces/gfv3/appserv-tests/build/module/classes/OptionalService.class
+   [delete] Deleting directory /export/work/workspaces/gfv3/appserv-tests/build/module/classes
+   [delete] Deleting directory /export/work/workspaces/gfv3/appserv-tests/build/module
+  [antcall] Exiting /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml.
+Project base dir set to: /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans
+  [antcall] calling target(s) [clean-jars-common] in build file /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml
+parsing buildfile /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml with URI = file:/export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml
+Project base dir set to: /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/config/properties.xml
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/config/common.xml
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.properties
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/config/run.xml
+ [property] Loading Environment env.
+Override ignored for property "env.SESSION_MANAGER"
+Override ignored for property "env.LESSOPEN"
+Override ignored for property "env.NORMBGCOLOR"
+Override ignored for property "env.CVSROOT"
+Override ignored for property "env.MY_ANT_HOME"
+Override ignored for property "env.PWD"
+Override ignored for property "env.XDG_SESSION_COOKIE"
+Override ignored for property "env.LANG"
+Override ignored for property "env.WS"
+Override ignored for property "env.AWT_TOOLKIT"
+Override ignored for property "env.DEFAULTS_PATH"
+Override ignored for property "env.HISTSIZE"
+Override ignored for property "env.INSTALL_ROOT"
+Override ignored for property "env.DISPLAY"
+Override ignored for property "env._"
+Override ignored for property "env.USER"
+Override ignored for property "env.HISTCONTROL"
+Override ignored for property "env.SHELL"
+Override ignored for property "env.NLSPATH"
+Override ignored for property "env.XDG_DATA_DIRS"
+Override ignored for property "env.DESKTOP_SESSION"
+Override ignored for property "env.HISTFILESIZE"
+Override ignored for property "env.APS_HOME"
+Override ignored for property "env.WIDTH"
+Override ignored for property "env.JAVANETCVSROOT"
+Override ignored for property "env.PATH"
+Override ignored for property "env.no_proxy"
+Override ignored for property "env.NORMFGCOLOR"
+Override ignored for property "env.LC_CTYPE"
+Override ignored for property "env.DBUS_SESSION_BUS_ADDRESS"
+Override ignored for property "env.REALPLAYER_HOME"
+Override ignored for property "env.SSH_AGENT_PID"
+Override ignored for property "env.SHLVL"
+Override ignored for property "env.GDMSESSION"
+Override ignored for property "env.GNOME_DESKTOP_SESSION_ID"
+Override ignored for property "env.GDM_KEYBOARD_LAYOUT"
+Override ignored for property "env.GNOME_KEYRING_PID"
+Override ignored for property "env.OS"
+Override ignored for property "env.LOGNAME"
+Override ignored for property "env.ALSA_OUTPUT_PORTS"
+Override ignored for property "env.SCUMMVM_PORT"
+Override ignored for property "env.JAVA_HOME"
+Override ignored for property "env.TERM"
+Override ignored for property "env.QLTESTRES"
+Override ignored for property "env.NO_PROXY"
+Override ignored for property "env.GDM_LANG"
+Override ignored for property "env.DTACH_HOME"
+Override ignored for property "env.OLDPWD"
+Override ignored for property "env.DEBUG"
+Override ignored for property "env.GCONF_LOCAL_LOCKS"
+Override ignored for property "env.M2_HOME"
+Override ignored for property "env.EC2_CERT"
+Override ignored for property "env.WINDOWID"
+Override ignored for property "env.EC2_PRIVATE_KEY"
+Override ignored for property "env.REDCVSROOT"
+Override ignored for property "env.MOZ_DISABLE_PANGO"
+Override ignored for property "env.XFILESEARCHPATH"
+Override ignored for property "env.HOME"
+Override ignored for property "env.ANT_HOME"
+Override ignored for property "env.LD_LIBRARY_PATH"
+Override ignored for property "env.MAVEN_OPTS"
+Override ignored for property "env.SSH_AUTH_SOCK"
+Override ignored for property "env.RBARWIDTH"
+Override ignored for property "env.S1AS_HOME"
+Property "BASH_SOURCE" has not been set
+Property "LINENO" has not been set
+Property "FUNCNAME[0]" has not been set
+Override ignored for property "env.PS4"
+Override ignored for property "env.MAVEN_HOME"
+Override ignored for property "env.XAUTHORITY"
+Property "NEW_PWD" has not been set
+Override ignored for property "env.PS1"
+Override ignored for property "env.MANDATORY_PATH"
+Override ignored for property "env.SPEECHD_PORT"
+Override ignored for property "env.GTK_MODULES"
+Override ignored for property "env.WINDOW_MANAGER"
+Override ignored for property "env.DTRX_HOME"
+Override ignored for property "env.COLORTERM"
+Override ignored for property "env.EDITOR"
+Override ignored for property "env.MALLOC_CHECK_"
+Override ignored for property "env.ORBIT_SOCKETDIR"
+Override ignored for property "env.WP_INSTALL_ROOT"
+Override ignored for property "env.USERNAME"
+Override ignored for property "env.SCALA_HOME"
+Override ignored for property "env.COPE_PATH"
+Override ignored for property "env.QL_HOME"
+Override ignored for property "env.AS_ADMIN_READTIMEOUT"
+Override ignored for property "env.MY_SCRIPT_DIR"
+Override ignored for property "env.GNOME_KEYRING_CONTROL"
+Override ignored for property "env.XDG_CONFIG_DIRS"
+Override ignored for property "env.TODOTXT_HOME"
+Override ignored for property "env.LESSCLOSE"
+Override ignored for property "module"
+Override ignored for property "appname"
+Override ignored for property "assemble"
+Override ignored for property "contextroot"
+Override ignored for property "beans.xml"
+Override ignored for property "target-to-run"
+ [macrodef] creating macro  run-test
+Build sequence for target(s) `clean-jars-common' is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean-jars-common]
+Complete build sequence is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean-jars-common, restart-instance-common, execute-sql-common, deploy-rar-common, undeploy, deploy-jdbc-common, undeploy-rar-common, set-derby-connpool-props, create-sql-common, deploy-war-no-context-root-pe, verifier-common, start-server-unix, test-tagfiles-exist, create-PermSize, execute-ejb-sql-common, undeploy-client-common, prepare-keystore-common, deploy-verify-common-ee, startDerby, confirmMissingReport-common, create-connector-resource-common, asadmin-common, create-connector-connpool, delete-connector-connpool-common, verifier, start-clean-server, runwebclient-common, deploy-common-ee, startDerbyNonMac, webclient-war-common, flush-connpool-common, stopDerby, clean-webapps-common, delete-jdbc-connpool-common, prepare-truststore-common, deploy-verify-common, run, test-tlds-exist, deploy-verify-common-pe, undeploy-common, undeploy-jar-common, deploy-client-common, enterprise-common, create-javamail-resource-common, package-persistence-common, deploy-war-commonee, startDomainWindows, set-derby-driver-connpool-props, deploy-war-no-context-root, undeploy-jdbc-common, deploy-common-pe, clear, copy-tagfiles, clean, compile, build, deploy, restart-server-instance-common, deploy-jar-common, delete-domain-common, stopPB, compile-common-with-endorsed-dir, import-wsdl, deploy-war-commonpe, compile-common, restart-server, runclient-common, package-appclientjar-common, ee-common, copy-tlds, delete-persistence-resource-common, undeploy-jms-common, asadmin-common-ignore-fail, startDomainUnix, startDomain, fixFiles, ejb-jar-common, appclient-jar-common, build-ear-common, publish-war-common, build-publish-war, stop-server-unix, clean-classes-common, clean-common, create-jdbc-connpool-common, dev-report, startDerbyMac, deploy-jms-common, package-war-common, package-ejbjar-common, delete-connector-resource-common, deploy-jsp-common, unsetupTimer, undeploy-war-common, change-orb-port, delete-javamail-resource-common, deploy-common, create-jms-resource-common, setup-mq-common, delete-jdbc-resource-common, start-server-windows, dumpThreadStack, setupTimer, deploy-war-common, start-server, ee, checkReporting-common, testTimer, stop-server, create-jdbc-driver-connpool-common, all, platform-common, create-jms-connection-common, undeploy-war-name, cleanAS, deploy-dir, preparePB, stop-server-windows, confirmReportPresent-common, delete-jms-resource-common, pb, runtest, create-jvm-options, restart-instance, stopDomain, create-connector-connpool-common, set-pointbase-driver-connpool-props, delete-sql-common, deploy-jdbc-driver-common, create-domain-common, delete-jvm-options, create-jdbc-resource-common, prepare-truststore-certutil-common, create-user-common, asadmin-batch-common, delete-user-common, prepare-truststore-keytool-common, convWin, create-persistence-resource-common, get-version-common, startPB, delete-jms-connection-common, usage-common, deploy-war-no-context-root-ee, set-pointbase-connpool-props, usage, convUnix, staticCheck-common, ear-common, deploy-war-name, ]
+  [antcall] Entering /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml...
+Build sequence for target(s) `clean-jars-common' is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean-jars-common]
+Complete build sequence is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean-jars-common, restart-instance-common, execute-sql-common, deploy-rar-common, undeploy, deploy-jdbc-common, undeploy-rar-common, set-derby-connpool-props, create-sql-common, deploy-war-no-context-root-pe, verifier-common, start-server-unix, test-tagfiles-exist, create-PermSize, execute-ejb-sql-common, undeploy-client-common, prepare-keystore-common, deploy-verify-common-ee, startDerby, confirmMissingReport-common, create-connector-resource-common, asadmin-common, create-connector-connpool, delete-connector-connpool-common, verifier, start-clean-server, runwebclient-common, deploy-common-ee, startDerbyNonMac, webclient-war-common, flush-connpool-common, stopDerby, clean-webapps-common, delete-jdbc-connpool-common, prepare-truststore-common, deploy-verify-common, run, test-tlds-exist, deploy-verify-common-pe, undeploy-common, undeploy-jar-common, deploy-client-common, enterprise-common, create-javamail-resource-common, package-persistence-common, deploy-war-commonee, startDomainWindows, set-derby-driver-connpool-props, deploy-war-no-context-root, undeploy-jdbc-common, deploy-common-pe, clear, copy-tagfiles, clean, compile, build, deploy, restart-server-instance-common, deploy-jar-common, delete-domain-common, stopPB, compile-common-with-endorsed-dir, import-wsdl, deploy-war-commonpe, compile-common, restart-server, runclient-common, package-appclientjar-common, ee-common, copy-tlds, delete-persistence-resource-common, undeploy-jms-common, asadmin-common-ignore-fail, startDomainUnix, startDomain, fixFiles, ejb-jar-common, appclient-jar-common, build-ear-common, publish-war-common, build-publish-war, stop-server-unix, clean-classes-common, clean-common, create-jdbc-connpool-common, dev-report, startDerbyMac, deploy-jms-common, package-war-common, package-ejbjar-common, delete-connector-resource-common, deploy-jsp-common, unsetupTimer, undeploy-war-common, change-orb-port, delete-javamail-resource-common, deploy-common, create-jms-resource-common, setup-mq-common, delete-jdbc-resource-common, start-server-windows, dumpThreadStack, setupTimer, deploy-war-common, start-server, ee, checkReporting-common, testTimer, stop-server, create-jdbc-driver-connpool-common, all, platform-common, create-jms-connection-common, undeploy-war-name, cleanAS, deploy-dir, preparePB, stop-server-windows, confirmReportPresent-common, delete-jms-resource-common, pb, runtest, create-jvm-options, restart-instance, stopDomain, create-connector-connpool-common, set-pointbase-driver-connpool-props, delete-sql-common, deploy-jdbc-driver-common, create-domain-common, delete-jvm-options, create-jdbc-resource-common, prepare-truststore-certutil-common, create-user-common, asadmin-batch-common, delete-user-common, prepare-truststore-keytool-common, convWin, create-persistence-resource-common, get-version-common, startPB, delete-jms-connection-common, usage-common, deploy-war-no-context-root-ee, set-pointbase-connpool-props, usage, convUnix, staticCheck-common, ear-common, deploy-war-name, ]
+
+setOSConditions:
+Override ignored for property "isUnix"
+
+setToolWin:
+Skipped because property 'isWindows' not set.
+
+setToolUnix:
+Override ignored for property "APPCLIENT"
+Override ignored for property "ASADMIN"
+Override ignored for property "ASANT"
+Override ignored for property "CAPTURESCHEMA"
+Override ignored for property "CHECKPATCH"
+Override ignored for property "INSTALLPATCH"
+Override ignored for property "JSPC"
+Override ignored for property "LISTPATCH"
+Override ignored for property "PACKAGE-APPCLIENT"
+Override ignored for property "VERIFIER"
+Override ignored for property "RMIC"
+Override ignored for property "TNAMESERV"
+Override ignored for property "WSCOMPILE"
+Override ignored for property "WSIMPORT"
+Override ignored for property "pb.start.server"
+Override ignored for property "pb.start.server1"
+Override ignored for property "IMQDBMGR"
+Override ignored for property "ld.library.path"
+
+setS1ASclassPath:
+Skipped because property 's1as.classpath' set.
+
+init-common:
+     [echo] Loading props from file /export/work/workspaces/gfv3/appserv-tests/config.properties
+Override ignored for property "pe"
+ [property] Loading /export/work/workspaces/gfv3/appserv-tests/config.properties
+Override ignored for property "instance.https.port"
+Override ignored for property "admin.domain"
+Override ignored for property "admin.password"
+Override ignored for property "http.address"
+Override ignored for property "http.alternate.port"
+Override ignored for property "ssl.password"
+Override ignored for property "instance.http.port"
+Override ignored for property "resources.dottedname.prefix"
+Override ignored for property "results.mailer"
+Override ignored for property "admin.domain.dir"
+Override ignored for property "admin.user"
+Override ignored for property "config.dottedname.prefix"
+Override ignored for property "instance.name"
+Override ignored for property "precompilejsp"
+Override ignored for property "admin.password.file"
+Override ignored for property "http.port"
+Override ignored for property "https.port"
+Override ignored for property "results.mailee"
+Override ignored for property "appserver.instance.name"
+Override ignored for property "master.password"
+Override ignored for property "http.host"
+Override ignored for property "instance.http.port.3"
+Override ignored for property "instance.http.port.2"
+Override ignored for property "admin.port"
+Override ignored for property "cluster.name"
+Override ignored for property "appserver.instance.dir"
+Override ignored for property "autodeploy.dir"
+Override ignored for property "orb.port"
+Override ignored for property "admin.host"
+Override ignored for property "instance.name.3"
+Override ignored for property "instance.name.2"
+Override ignored for property "results.mailhost"
+     [echo] admin.domain domain1
+     [echo] admin.user admin
+     [echo] admin.port 4848
+     [echo] http.port 8080
+     [echo] http.host localhost
+Override ignored for property "as.props"
+Override ignored for property "authrealmname"
+Override ignored for property "apptype"
+Override ignored for property "db.root"
+Override ignored for property "db.dir"
+Override ignored for property "db.classpath"
+ [property] Loading /export/work/workspaces/gfv3/appserv-tests/config/derby.properties
+Override ignored for property "db.host"
+Override ignored for property "db.url"
+Override ignored for property "db.xaclass"
+Override ignored for property "db.name"
+Override ignored for property "db.driver"
+Override ignored for property "db.port"
+Override ignored for property "db.port.2"
+Override ignored for property "db.class"
+Override ignored for property "db.user"
+Override ignored for property "db.pwd"
+Override ignored for property "db.type"
+Property "env.JAVKE_HOME" has not been set
+Override ignored for property "javke.home"
+Override ignored for property "dest.type"
+Override ignored for property "dest.name"
+Override ignored for property "jms.factory.name"
+Override ignored for property "jms.factory.type"
+Override ignored for property "jms.resource.name"
+Override ignored for property "jms.resource.type"
+Override ignored for property "jdbc.conpool.name"
+Override ignored for property "jdbc.resource.name"
+Override ignored for property "jdbc.resource.type"
+Override ignored for property "pm.resource.name"
+Override ignored for property "pm.factory.class"
+Override ignored for property "appclient.application.args"
+Override ignored for property "build.base.dir"
+Override ignored for property "build.webapps.dir"
+Override ignored for property "build.classes.dir"
+Override ignored for property "assemble.dir"
+Override ignored for property "results.dir"
+Property "Derby.classpath" has not been set
+Override ignored for property "s1astest.classpath"
+Override ignored for property "ejbjar.classes"
+Override ignored for property "appclientjar.classes"
+Override ignored for property "webclient.war.files"
+Override ignored for property "webclient.war.classes"
+Override ignored for property "test.name"
+Override ignored for property "test.description"
+Override ignored for property "test.count"
+Override ignored for property "cluster.name"
+Override ignored for property "clustered.server.name"
+Override ignored for property "clustered.server.name.two"
+Override ignored for property "nodeagent.name"
+Override ignored for property "das.host"
+Override ignored for property "das.jmx.port"
+Override ignored for property "http.listener1.port"
+Override ignored for property "http.listener2.port"
+Override ignored for property "orb.listener1.port"
+Override ignored for property "ssl.port"
+Override ignored for property "ssl.mutualauth.port"
+Override ignored for property "jmx.system.connector.port"
+Override ignored for property "http.listener1.port.two"
+Override ignored for property "http.listener2.port.two"
+Override ignored for property "orb.listener1.port.two"
+Override ignored for property "ssl.port.two"
+Override ignored for property "ssl.mutualauth.port.two"
+Override ignored for property "jmx.system.connector.port.two"
+Override ignored for property "cert.nickname"
+  [antcall] Exiting /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml.
+  [antcall] Exiting /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml.
+Build sequence for target(s) `compile' is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean, compile]
+Complete build sequence is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean, compile, restart-instance-common, execute-sql-common, deploy-rar-common, undeploy, deploy-jdbc-common, undeploy-rar-common, set-derby-connpool-props, create-sql-common, deploy-war-no-context-root-pe, verifier-common, start-server-unix, test-tagfiles-exist, create-PermSize, execute-ejb-sql-common, undeploy-client-common, prepare-keystore-common, deploy-verify-common-ee, startDerby, confirmMissingReport-common, create-connector-resource-common, asadmin-common, create-connector-connpool, delete-connector-connpool-common, verifier, start-clean-server, runwebclient-common, deploy-common-ee, startDerbyNonMac, webclient-war-common, flush-connpool-common, stopDerby, clean-webapps-common, delete-jdbc-connpool-common, prepare-truststore-common, deploy-verify-common, run, test-tlds-exist, deploy-verify-common-pe, undeploy-common, undeploy-jar-common, deploy-client-common, enterprise-common, create-javamail-resource-common, package-persistence-common, deploy-war-commonee, startDomainWindows, set-derby-driver-connpool-props, deploy-war-no-context-root, undeploy-jdbc-common, deploy-common-pe, clear, copy-tagfiles, build, deploy, restart-server-instance-common, deploy-jar-common, delete-domain-common, stopPB, compile-common-with-endorsed-dir, import-wsdl, deploy-war-commonpe, compile-common, restart-server, runclient-common, package-appclientjar-common, ee-common, copy-tlds, delete-persistence-resource-common, undeploy-jms-common, asadmin-common-ignore-fail, startDomainUnix, startDomain, fixFiles, ejb-jar-common, appclient-jar-common, build-ear-common, publish-war-common, build-publish-war, stop-server-unix, clean-classes-common, clean-common, create-jdbc-connpool-common, dev-report, startDerbyMac, deploy-jms-common, package-war-common, package-ejbjar-common, delete-connector-resource-common, deploy-jsp-common, unsetupTimer, undeploy-war-common, change-orb-port, delete-javamail-resource-common, deploy-common, create-jms-resource-common, setup-mq-common, delete-jdbc-resource-common, start-server-windows, dumpThreadStack, setupTimer, deploy-war-common, start-server, ee, checkReporting-common, testTimer, stop-server, create-jdbc-driver-connpool-common, all, platform-common, create-jms-connection-common, undeploy-war-name, cleanAS, deploy-dir, preparePB, stop-server-windows, confirmReportPresent-common, delete-jms-resource-common, pb, runtest, create-jvm-options, clean-jars-common, restart-instance, stopDomain, create-connector-connpool-common, set-pointbase-driver-connpool-props, delete-sql-common, deploy-jdbc-driver-common, create-domain-common, delete-jvm-options, create-jdbc-resource-common, prepare-truststore-certutil-common, create-user-common, asadmin-batch-common, delete-user-common, prepare-truststore-keytool-common, convWin, create-persistence-resource-common, get-version-common, startPB, delete-jms-connection-common, usage-common, deploy-war-no-context-root-ee, set-pointbase-connpool-props, usage, convUnix, staticCheck-common, ear-common, deploy-war-name, ]
+
+setOSConditions:
+Override ignored for property "isUnix"
+
+setToolWin:
+Skipped because property 'isWindows' not set.
+
+setToolUnix:
+Override ignored for property "APPCLIENT"
+Override ignored for property "ASADMIN"
+Override ignored for property "ASANT"
+Override ignored for property "CAPTURESCHEMA"
+Override ignored for property "CHECKPATCH"
+Override ignored for property "INSTALLPATCH"
+Override ignored for property "JSPC"
+Override ignored for property "LISTPATCH"
+Override ignored for property "PACKAGE-APPCLIENT"
+Override ignored for property "VERIFIER"
+Override ignored for property "RMIC"
+Override ignored for property "TNAMESERV"
+Override ignored for property "WSCOMPILE"
+Override ignored for property "WSIMPORT"
+Override ignored for property "pb.start.server"
+Override ignored for property "pb.start.server1"
+Override ignored for property "IMQDBMGR"
+Override ignored for property "ld.library.path"
+
+setS1ASclassPath:
+Skipped because property 's1as.classpath' set.
+
+init-common:
+     [echo] Loading props from file /export/work/workspaces/gfv3/appserv-tests/config.properties
+Override ignored for property "pe"
+ [property] Loading /export/work/workspaces/gfv3/appserv-tests/config.properties
+Override ignored for property "instance.https.port"
+Override ignored for property "admin.domain"
+Override ignored for property "admin.password"
+Override ignored for property "http.address"
+Override ignored for property "http.alternate.port"
+Override ignored for property "ssl.password"
+Override ignored for property "instance.http.port"
+Override ignored for property "resources.dottedname.prefix"
+Override ignored for property "results.mailer"
+Override ignored for property "admin.domain.dir"
+Override ignored for property "admin.user"
+Override ignored for property "config.dottedname.prefix"
+Override ignored for property "instance.name"
+Override ignored for property "precompilejsp"
+Override ignored for property "admin.password.file"
+Override ignored for property "http.port"
+Override ignored for property "https.port"
+Override ignored for property "results.mailee"
+Override ignored for property "appserver.instance.name"
+Override ignored for property "master.password"
+Override ignored for property "http.host"
+Override ignored for property "instance.http.port.3"
+Override ignored for property "instance.http.port.2"
+Override ignored for property "admin.port"
+Override ignored for property "cluster.name"
+Override ignored for property "appserver.instance.dir"
+Override ignored for property "autodeploy.dir"
+Override ignored for property "orb.port"
+Override ignored for property "admin.host"
+Override ignored for property "instance.name.3"
+Override ignored for property "instance.name.2"
+Override ignored for property "results.mailhost"
+     [echo] admin.domain domain1
+     [echo] admin.user admin
+     [echo] admin.port 4848
+     [echo] http.port 8080
+     [echo] http.host localhost
+Override ignored for property "as.props"
+Override ignored for property "authrealmname"
+Override ignored for property "apptype"
+Override ignored for property "db.root"
+Override ignored for property "db.dir"
+Override ignored for property "db.classpath"
+ [property] Loading /export/work/workspaces/gfv3/appserv-tests/config/derby.properties
+Override ignored for property "db.host"
+Override ignored for property "db.url"
+Override ignored for property "db.xaclass"
+Override ignored for property "db.name"
+Override ignored for property "db.driver"
+Override ignored for property "db.port"
+Override ignored for property "db.port.2"
+Override ignored for property "db.class"
+Override ignored for property "db.user"
+Override ignored for property "db.pwd"
+Override ignored for property "db.type"
+Property "env.JAVKE_HOME" has not been set
+Override ignored for property "javke.home"
+Override ignored for property "dest.type"
+Override ignored for property "dest.name"
+Override ignored for property "jms.factory.name"
+Override ignored for property "jms.factory.type"
+Override ignored for property "jms.resource.name"
+Override ignored for property "jms.resource.type"
+Override ignored for property "jdbc.conpool.name"
+Override ignored for property "jdbc.resource.name"
+Override ignored for property "jdbc.resource.type"
+Override ignored for property "pm.resource.name"
+Override ignored for property "pm.factory.class"
+Override ignored for property "appclient.application.args"
+Override ignored for property "build.base.dir"
+Override ignored for property "build.webapps.dir"
+Override ignored for property "build.classes.dir"
+Override ignored for property "assemble.dir"
+Override ignored for property "results.dir"
+Property "Derby.classpath" has not been set
+Override ignored for property "s1astest.classpath"
+Override ignored for property "ejbjar.classes"
+Override ignored for property "appclientjar.classes"
+Override ignored for property "webclient.war.files"
+Override ignored for property "webclient.war.classes"
+Override ignored for property "test.name"
+Override ignored for property "test.description"
+Override ignored for property "test.count"
+Override ignored for property "cluster.name"
+Override ignored for property "clustered.server.name"
+Override ignored for property "clustered.server.name.two"
+Override ignored for property "nodeagent.name"
+Override ignored for property "das.host"
+Override ignored for property "das.jmx.port"
+Override ignored for property "http.listener1.port"
+Override ignored for property "http.listener2.port"
+Override ignored for property "orb.listener1.port"
+Override ignored for property "ssl.port"
+Override ignored for property "ssl.mutualauth.port"
+Override ignored for property "jmx.system.connector.port"
+Override ignored for property "http.listener1.port.two"
+Override ignored for property "http.listener2.port.two"
+Override ignored for property "orb.listener1.port.two"
+Override ignored for property "ssl.port.two"
+Override ignored for property "ssl.mutualauth.port.two"
+Override ignored for property "jmx.system.connector.port.two"
+Override ignored for property "cert.nickname"
+
+clean:
+Project base dir set to: /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans
+  [antcall] calling target(s) [clean-common] in build file /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml
+parsing buildfile /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml with URI = file:/export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml
+Project base dir set to: /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/config/properties.xml
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/config/common.xml
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.properties
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/config/run.xml
+ [property] Loading Environment env.
+Override ignored for property "env.SESSION_MANAGER"
+Override ignored for property "env.LESSOPEN"
+Override ignored for property "env.NORMBGCOLOR"
+Override ignored for property "env.CVSROOT"
+Override ignored for property "env.MY_ANT_HOME"
+Override ignored for property "env.PWD"
+Override ignored for property "env.XDG_SESSION_COOKIE"
+Override ignored for property "env.LANG"
+Override ignored for property "env.WS"
+Override ignored for property "env.AWT_TOOLKIT"
+Override ignored for property "env.DEFAULTS_PATH"
+Override ignored for property "env.HISTSIZE"
+Override ignored for property "env.INSTALL_ROOT"
+Override ignored for property "env.DISPLAY"
+Override ignored for property "env._"
+Override ignored for property "env.USER"
+Override ignored for property "env.HISTCONTROL"
+Override ignored for property "env.SHELL"
+Override ignored for property "env.NLSPATH"
+Override ignored for property "env.XDG_DATA_DIRS"
+Override ignored for property "env.DESKTOP_SESSION"
+Override ignored for property "env.HISTFILESIZE"
+Override ignored for property "env.APS_HOME"
+Override ignored for property "env.WIDTH"
+Override ignored for property "env.JAVANETCVSROOT"
+Override ignored for property "env.PATH"
+Override ignored for property "env.no_proxy"
+Override ignored for property "env.NORMFGCOLOR"
+Override ignored for property "env.LC_CTYPE"
+Override ignored for property "env.DBUS_SESSION_BUS_ADDRESS"
+Override ignored for property "env.REALPLAYER_HOME"
+Override ignored for property "env.SSH_AGENT_PID"
+Override ignored for property "env.SHLVL"
+Override ignored for property "env.GDMSESSION"
+Override ignored for property "env.GNOME_DESKTOP_SESSION_ID"
+Override ignored for property "env.GDM_KEYBOARD_LAYOUT"
+Override ignored for property "env.GNOME_KEYRING_PID"
+Override ignored for property "env.OS"
+Override ignored for property "env.LOGNAME"
+Override ignored for property "env.ALSA_OUTPUT_PORTS"
+Override ignored for property "env.SCUMMVM_PORT"
+Override ignored for property "env.JAVA_HOME"
+Override ignored for property "env.TERM"
+Override ignored for property "env.QLTESTRES"
+Override ignored for property "env.NO_PROXY"
+Override ignored for property "env.GDM_LANG"
+Override ignored for property "env.DTACH_HOME"
+Override ignored for property "env.OLDPWD"
+Override ignored for property "env.DEBUG"
+Override ignored for property "env.GCONF_LOCAL_LOCKS"
+Override ignored for property "env.M2_HOME"
+Override ignored for property "env.EC2_CERT"
+Override ignored for property "env.WINDOWID"
+Override ignored for property "env.EC2_PRIVATE_KEY"
+Override ignored for property "env.REDCVSROOT"
+Override ignored for property "env.MOZ_DISABLE_PANGO"
+Override ignored for property "env.XFILESEARCHPATH"
+Override ignored for property "env.HOME"
+Override ignored for property "env.ANT_HOME"
+Override ignored for property "env.LD_LIBRARY_PATH"
+Override ignored for property "env.MAVEN_OPTS"
+Override ignored for property "env.SSH_AUTH_SOCK"
+Override ignored for property "env.RBARWIDTH"
+Override ignored for property "env.S1AS_HOME"
+Property "BASH_SOURCE" has not been set
+Property "LINENO" has not been set
+Property "FUNCNAME[0]" has not been set
+Override ignored for property "env.PS4"
+Override ignored for property "env.MAVEN_HOME"
+Override ignored for property "env.XAUTHORITY"
+Property "NEW_PWD" has not been set
+Override ignored for property "env.PS1"
+Override ignored for property "env.MANDATORY_PATH"
+Override ignored for property "env.SPEECHD_PORT"
+Override ignored for property "env.GTK_MODULES"
+Override ignored for property "env.WINDOW_MANAGER"
+Override ignored for property "env.DTRX_HOME"
+Override ignored for property "env.COLORTERM"
+Override ignored for property "env.EDITOR"
+Override ignored for property "env.MALLOC_CHECK_"
+Override ignored for property "env.ORBIT_SOCKETDIR"
+Override ignored for property "env.WP_INSTALL_ROOT"
+Override ignored for property "env.USERNAME"
+Override ignored for property "env.SCALA_HOME"
+Override ignored for property "env.COPE_PATH"
+Override ignored for property "env.QL_HOME"
+Override ignored for property "env.AS_ADMIN_READTIMEOUT"
+Override ignored for property "env.MY_SCRIPT_DIR"
+Override ignored for property "env.GNOME_KEYRING_CONTROL"
+Override ignored for property "env.XDG_CONFIG_DIRS"
+Override ignored for property "env.TODOTXT_HOME"
+Override ignored for property "env.LESSCLOSE"
+Override ignored for property "module"
+Override ignored for property "appname"
+Override ignored for property "assemble"
+Override ignored for property "contextroot"
+Override ignored for property "beans.xml"
+Override ignored for property "target-to-run"
+ [macrodef] creating macro  run-test
+Build sequence for target(s) `clean-common' is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean-common]
+Complete build sequence is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean-common, restart-instance-common, execute-sql-common, deploy-rar-common, undeploy, deploy-jdbc-common, undeploy-rar-common, set-derby-connpool-props, create-sql-common, deploy-war-no-context-root-pe, verifier-common, start-server-unix, test-tagfiles-exist, create-PermSize, execute-ejb-sql-common, undeploy-client-common, prepare-keystore-common, deploy-verify-common-ee, startDerby, confirmMissingReport-common, create-connector-resource-common, asadmin-common, create-connector-connpool, delete-connector-connpool-common, verifier, start-clean-server, runwebclient-common, deploy-common-ee, startDerbyNonMac, webclient-war-common, flush-connpool-common, stopDerby, clean-webapps-common, delete-jdbc-connpool-common, prepare-truststore-common, deploy-verify-common, run, test-tlds-exist, deploy-verify-common-pe, undeploy-common, undeploy-jar-common, deploy-client-common, enterprise-common, create-javamail-resource-common, package-persistence-common, deploy-war-commonee, startDomainWindows, set-derby-driver-connpool-props, deploy-war-no-context-root, undeploy-jdbc-common, deploy-common-pe, clear, copy-tagfiles, clean, compile, build, deploy, restart-server-instance-common, deploy-jar-common, delete-domain-common, stopPB, compile-common-with-endorsed-dir, import-wsdl, deploy-war-commonpe, compile-common, restart-server, runclient-common, package-appclientjar-common, ee-common, copy-tlds, delete-persistence-resource-common, undeploy-jms-common, asadmin-common-ignore-fail, startDomainUnix, startDomain, fixFiles, ejb-jar-common, appclient-jar-common, build-ear-common, publish-war-common, build-publish-war, stop-server-unix, clean-classes-common, create-jdbc-connpool-common, dev-report, startDerbyMac, deploy-jms-common, package-war-common, package-ejbjar-common, delete-connector-resource-common, deploy-jsp-common, unsetupTimer, undeploy-war-common, change-orb-port, delete-javamail-resource-common, deploy-common, create-jms-resource-common, setup-mq-common, delete-jdbc-resource-common, start-server-windows, dumpThreadStack, setupTimer, deploy-war-common, start-server, ee, checkReporting-common, testTimer, stop-server, create-jdbc-driver-connpool-common, all, platform-common, create-jms-connection-common, undeploy-war-name, cleanAS, deploy-dir, preparePB, stop-server-windows, confirmReportPresent-common, delete-jms-resource-common, pb, runtest, create-jvm-options, clean-jars-common, restart-instance, stopDomain, create-connector-connpool-common, set-pointbase-driver-connpool-props, delete-sql-common, deploy-jdbc-driver-common, create-domain-common, delete-jvm-options, create-jdbc-resource-common, prepare-truststore-certutil-common, create-user-common, asadmin-batch-common, delete-user-common, prepare-truststore-keytool-common, convWin, create-persistence-resource-common, get-version-common, startPB, delete-jms-connection-common, usage-common, deploy-war-no-context-root-ee, set-pointbase-connpool-props, usage, convUnix, staticCheck-common, ear-common, deploy-war-name, ]
+  [antcall] Entering /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml...
+Build sequence for target(s) `clean-common' is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean-common]
+Complete build sequence is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean-common, restart-instance-common, execute-sql-common, deploy-rar-common, undeploy, deploy-jdbc-common, undeploy-rar-common, set-derby-connpool-props, create-sql-common, deploy-war-no-context-root-pe, verifier-common, start-server-unix, test-tagfiles-exist, create-PermSize, execute-ejb-sql-common, undeploy-client-common, prepare-keystore-common, deploy-verify-common-ee, startDerby, confirmMissingReport-common, create-connector-resource-common, asadmin-common, create-connector-connpool, delete-connector-connpool-common, verifier, start-clean-server, runwebclient-common, deploy-common-ee, startDerbyNonMac, webclient-war-common, flush-connpool-common, stopDerby, clean-webapps-common, delete-jdbc-connpool-common, prepare-truststore-common, deploy-verify-common, run, test-tlds-exist, deploy-verify-common-pe, undeploy-common, undeploy-jar-common, deploy-client-common, enterprise-common, create-javamail-resource-common, package-persistence-common, deploy-war-commonee, startDomainWindows, set-derby-driver-connpool-props, deploy-war-no-context-root, undeploy-jdbc-common, deploy-common-pe, clear, copy-tagfiles, clean, compile, build, deploy, restart-server-instance-common, deploy-jar-common, delete-domain-common, stopPB, compile-common-with-endorsed-dir, import-wsdl, deploy-war-commonpe, compile-common, restart-server, runclient-common, package-appclientjar-common, ee-common, copy-tlds, delete-persistence-resource-common, undeploy-jms-common, asadmin-common-ignore-fail, startDomainUnix, startDomain, fixFiles, ejb-jar-common, appclient-jar-common, build-ear-common, publish-war-common, build-publish-war, stop-server-unix, clean-classes-common, create-jdbc-connpool-common, dev-report, startDerbyMac, deploy-jms-common, package-war-common, package-ejbjar-common, delete-connector-resource-common, deploy-jsp-common, unsetupTimer, undeploy-war-common, change-orb-port, delete-javamail-resource-common, deploy-common, create-jms-resource-common, setup-mq-common, delete-jdbc-resource-common, start-server-windows, dumpThreadStack, setupTimer, deploy-war-common, start-server, ee, checkReporting-common, testTimer, stop-server, create-jdbc-driver-connpool-common, all, platform-common, create-jms-connection-common, undeploy-war-name, cleanAS, deploy-dir, preparePB, stop-server-windows, confirmReportPresent-common, delete-jms-resource-common, pb, runtest, create-jvm-options, clean-jars-common, restart-instance, stopDomain, create-connector-connpool-common, set-pointbase-driver-connpool-props, delete-sql-common, deploy-jdbc-driver-common, create-domain-common, delete-jvm-options, create-jdbc-resource-common, prepare-truststore-certutil-common, create-user-common, asadmin-batch-common, delete-user-common, prepare-truststore-keytool-common, convWin, create-persistence-resource-common, get-version-common, startPB, delete-jms-connection-common, usage-common, deploy-war-no-context-root-ee, set-pointbase-connpool-props, usage, convUnix, staticCheck-common, ear-common, deploy-war-name, ]
+
+setOSConditions:
+Override ignored for property "isUnix"
+
+setToolWin:
+Skipped because property 'isWindows' not set.
+
+setToolUnix:
+Override ignored for property "APPCLIENT"
+Override ignored for property "ASADMIN"
+Override ignored for property "ASANT"
+Override ignored for property "CAPTURESCHEMA"
+Override ignored for property "CHECKPATCH"
+Override ignored for property "INSTALLPATCH"
+Override ignored for property "JSPC"
+Override ignored for property "LISTPATCH"
+Override ignored for property "PACKAGE-APPCLIENT"
+Override ignored for property "VERIFIER"
+Override ignored for property "RMIC"
+Override ignored for property "TNAMESERV"
+Override ignored for property "WSCOMPILE"
+Override ignored for property "WSIMPORT"
+Override ignored for property "pb.start.server"
+Override ignored for property "pb.start.server1"
+Override ignored for property "IMQDBMGR"
+Override ignored for property "ld.library.path"
+
+setS1ASclassPath:
+Skipped because property 's1as.classpath' set.
+
+init-common:
+     [echo] Loading props from file /export/work/workspaces/gfv3/appserv-tests/config.properties
+Override ignored for property "pe"
+ [property] Loading /export/work/workspaces/gfv3/appserv-tests/config.properties
+Override ignored for property "instance.https.port"
+Override ignored for property "admin.domain"
+Override ignored for property "admin.password"
+Override ignored for property "http.address"
+Override ignored for property "http.alternate.port"
+Override ignored for property "ssl.password"
+Override ignored for property "instance.http.port"
+Override ignored for property "resources.dottedname.prefix"
+Override ignored for property "results.mailer"
+Override ignored for property "admin.domain.dir"
+Override ignored for property "admin.user"
+Override ignored for property "config.dottedname.prefix"
+Override ignored for property "instance.name"
+Override ignored for property "precompilejsp"
+Override ignored for property "admin.password.file"
+Override ignored for property "http.port"
+Override ignored for property "https.port"
+Override ignored for property "results.mailee"
+Override ignored for property "appserver.instance.name"
+Override ignored for property "master.password"
+Override ignored for property "http.host"
+Override ignored for property "instance.http.port.3"
+Override ignored for property "instance.http.port.2"
+Override ignored for property "admin.port"
+Override ignored for property "cluster.name"
+Override ignored for property "appserver.instance.dir"
+Override ignored for property "autodeploy.dir"
+Override ignored for property "orb.port"
+Override ignored for property "admin.host"
+Override ignored for property "instance.name.3"
+Override ignored for property "instance.name.2"
+Override ignored for property "results.mailhost"
+     [echo] admin.domain domain1
+     [echo] admin.user admin
+     [echo] admin.port 4848
+     [echo] http.port 8080
+     [echo] http.host localhost
+Override ignored for property "as.props"
+Override ignored for property "authrealmname"
+Override ignored for property "apptype"
+Override ignored for property "db.root"
+Override ignored for property "db.dir"
+Override ignored for property "db.classpath"
+ [property] Loading /export/work/workspaces/gfv3/appserv-tests/config/derby.properties
+Override ignored for property "db.host"
+Override ignored for property "db.url"
+Override ignored for property "db.xaclass"
+Override ignored for property "db.name"
+Override ignored for property "db.driver"
+Override ignored for property "db.port"
+Override ignored for property "db.port.2"
+Override ignored for property "db.class"
+Override ignored for property "db.user"
+Override ignored for property "db.pwd"
+Override ignored for property "db.type"
+Property "env.JAVKE_HOME" has not been set
+Override ignored for property "javke.home"
+Override ignored for property "dest.type"
+Override ignored for property "dest.name"
+Override ignored for property "jms.factory.name"
+Override ignored for property "jms.factory.type"
+Override ignored for property "jms.resource.name"
+Override ignored for property "jms.resource.type"
+Override ignored for property "jdbc.conpool.name"
+Override ignored for property "jdbc.resource.name"
+Override ignored for property "jdbc.resource.type"
+Override ignored for property "pm.resource.name"
+Override ignored for property "pm.factory.class"
+Override ignored for property "appclient.application.args"
+Override ignored for property "build.base.dir"
+Override ignored for property "build.webapps.dir"
+Override ignored for property "build.classes.dir"
+Override ignored for property "assemble.dir"
+Override ignored for property "results.dir"
+Property "Derby.classpath" has not been set
+Override ignored for property "s1astest.classpath"
+Override ignored for property "ejbjar.classes"
+Override ignored for property "appclientjar.classes"
+Override ignored for property "webclient.war.files"
+Override ignored for property "webclient.war.classes"
+Override ignored for property "test.name"
+Override ignored for property "test.description"
+Override ignored for property "test.count"
+Override ignored for property "cluster.name"
+Override ignored for property "clustered.server.name"
+Override ignored for property "clustered.server.name.two"
+Override ignored for property "nodeagent.name"
+Override ignored for property "das.host"
+Override ignored for property "das.jmx.port"
+Override ignored for property "http.listener1.port"
+Override ignored for property "http.listener2.port"
+Override ignored for property "orb.listener1.port"
+Override ignored for property "ssl.port"
+Override ignored for property "ssl.mutualauth.port"
+Override ignored for property "jmx.system.connector.port"
+Override ignored for property "http.listener1.port.two"
+Override ignored for property "http.listener2.port.two"
+Override ignored for property "orb.listener1.port.two"
+Override ignored for property "ssl.port.two"
+Override ignored for property "ssl.mutualauth.port.two"
+Override ignored for property "jmx.system.connector.port.two"
+Override ignored for property "cert.nickname"
+
+clean-common:
+Project base dir set to: /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans
+  [antcall] calling target(s) [clean-classes-common] in build file /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml
+parsing buildfile /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml with URI = file:/export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml
+Project base dir set to: /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/config/properties.xml
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/config/common.xml
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.properties
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/config/run.xml
+ [property] Loading Environment env.
+Override ignored for property "env.SESSION_MANAGER"
+Override ignored for property "env.LESSOPEN"
+Override ignored for property "env.NORMBGCOLOR"
+Override ignored for property "env.CVSROOT"
+Override ignored for property "env.MY_ANT_HOME"
+Override ignored for property "env.PWD"
+Override ignored for property "env.XDG_SESSION_COOKIE"
+Override ignored for property "env.LANG"
+Override ignored for property "env.WS"
+Override ignored for property "env.AWT_TOOLKIT"
+Override ignored for property "env.DEFAULTS_PATH"
+Override ignored for property "env.HISTSIZE"
+Override ignored for property "env.INSTALL_ROOT"
+Override ignored for property "env.DISPLAY"
+Override ignored for property "env._"
+Override ignored for property "env.USER"
+Override ignored for property "env.HISTCONTROL"
+Override ignored for property "env.SHELL"
+Override ignored for property "env.NLSPATH"
+Override ignored for property "env.XDG_DATA_DIRS"
+Override ignored for property "env.DESKTOP_SESSION"
+Override ignored for property "env.HISTFILESIZE"
+Override ignored for property "env.APS_HOME"
+Override ignored for property "env.WIDTH"
+Override ignored for property "env.JAVANETCVSROOT"
+Override ignored for property "env.PATH"
+Override ignored for property "env.no_proxy"
+Override ignored for property "env.NORMFGCOLOR"
+Override ignored for property "env.LC_CTYPE"
+Override ignored for property "env.DBUS_SESSION_BUS_ADDRESS"
+Override ignored for property "env.REALPLAYER_HOME"
+Override ignored for property "env.SSH_AGENT_PID"
+Override ignored for property "env.SHLVL"
+Override ignored for property "env.GDMSESSION"
+Override ignored for property "env.GNOME_DESKTOP_SESSION_ID"
+Override ignored for property "env.GDM_KEYBOARD_LAYOUT"
+Override ignored for property "env.GNOME_KEYRING_PID"
+Override ignored for property "env.OS"
+Override ignored for property "env.LOGNAME"
+Override ignored for property "env.ALSA_OUTPUT_PORTS"
+Override ignored for property "env.SCUMMVM_PORT"
+Override ignored for property "env.JAVA_HOME"
+Override ignored for property "env.TERM"
+Override ignored for property "env.QLTESTRES"
+Override ignored for property "env.NO_PROXY"
+Override ignored for property "env.GDM_LANG"
+Override ignored for property "env.DTACH_HOME"
+Override ignored for property "env.OLDPWD"
+Override ignored for property "env.DEBUG"
+Override ignored for property "env.GCONF_LOCAL_LOCKS"
+Override ignored for property "env.M2_HOME"
+Override ignored for property "env.EC2_CERT"
+Override ignored for property "env.WINDOWID"
+Override ignored for property "env.EC2_PRIVATE_KEY"
+Override ignored for property "env.REDCVSROOT"
+Override ignored for property "env.MOZ_DISABLE_PANGO"
+Override ignored for property "env.XFILESEARCHPATH"
+Override ignored for property "env.HOME"
+Override ignored for property "env.ANT_HOME"
+Override ignored for property "env.LD_LIBRARY_PATH"
+Override ignored for property "env.MAVEN_OPTS"
+Override ignored for property "env.SSH_AUTH_SOCK"
+Override ignored for property "env.RBARWIDTH"
+Override ignored for property "env.S1AS_HOME"
+Property "BASH_SOURCE" has not been set
+Property "LINENO" has not been set
+Property "FUNCNAME[0]" has not been set
+Override ignored for property "env.PS4"
+Override ignored for property "env.MAVEN_HOME"
+Override ignored for property "env.XAUTHORITY"
+Property "NEW_PWD" has not been set
+Override ignored for property "env.PS1"
+Override ignored for property "env.MANDATORY_PATH"
+Override ignored for property "env.SPEECHD_PORT"
+Override ignored for property "env.GTK_MODULES"
+Override ignored for property "env.WINDOW_MANAGER"
+Override ignored for property "env.DTRX_HOME"
+Override ignored for property "env.COLORTERM"
+Override ignored for property "env.EDITOR"
+Override ignored for property "env.MALLOC_CHECK_"
+Override ignored for property "env.ORBIT_SOCKETDIR"
+Override ignored for property "env.WP_INSTALL_ROOT"
+Override ignored for property "env.USERNAME"
+Override ignored for property "env.SCALA_HOME"
+Override ignored for property "env.COPE_PATH"
+Override ignored for property "env.QL_HOME"
+Override ignored for property "env.AS_ADMIN_READTIMEOUT"
+Override ignored for property "env.MY_SCRIPT_DIR"
+Override ignored for property "env.GNOME_KEYRING_CONTROL"
+Override ignored for property "env.XDG_CONFIG_DIRS"
+Override ignored for property "env.TODOTXT_HOME"
+Override ignored for property "env.LESSCLOSE"
+Override ignored for property "module"
+Override ignored for property "appname"
+Override ignored for property "assemble"
+Override ignored for property "contextroot"
+Override ignored for property "beans.xml"
+Override ignored for property "target-to-run"
+ [macrodef] creating macro  run-test
+Build sequence for target(s) `clean-classes-common' is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean-classes-common]
+Complete build sequence is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean-classes-common, restart-instance-common, execute-sql-common, deploy-rar-common, undeploy, deploy-jdbc-common, undeploy-rar-common, set-derby-connpool-props, create-sql-common, deploy-war-no-context-root-pe, verifier-common, start-server-unix, test-tagfiles-exist, create-PermSize, execute-ejb-sql-common, undeploy-client-common, prepare-keystore-common, deploy-verify-common-ee, startDerby, confirmMissingReport-common, create-connector-resource-common, asadmin-common, create-connector-connpool, delete-connector-connpool-common, verifier, start-clean-server, runwebclient-common, deploy-common-ee, startDerbyNonMac, webclient-war-common, flush-connpool-common, stopDerby, clean-webapps-common, delete-jdbc-connpool-common, prepare-truststore-common, deploy-verify-common, run, test-tlds-exist, deploy-verify-common-pe, undeploy-common, undeploy-jar-common, deploy-client-common, enterprise-common, create-javamail-resource-common, package-persistence-common, deploy-war-commonee, startDomainWindows, set-derby-driver-connpool-props, deploy-war-no-context-root, undeploy-jdbc-common, deploy-common-pe, clear, copy-tagfiles, clean, compile, build, deploy, restart-server-instance-common, deploy-jar-common, delete-domain-common, stopPB, compile-common-with-endorsed-dir, import-wsdl, deploy-war-commonpe, compile-common, restart-server, runclient-common, package-appclientjar-common, ee-common, copy-tlds, delete-persistence-resource-common, undeploy-jms-common, asadmin-common-ignore-fail, startDomainUnix, startDomain, fixFiles, ejb-jar-common, appclient-jar-common, build-ear-common, publish-war-common, build-publish-war, stop-server-unix, clean-common, create-jdbc-connpool-common, dev-report, startDerbyMac, deploy-jms-common, package-war-common, package-ejbjar-common, delete-connector-resource-common, deploy-jsp-common, unsetupTimer, undeploy-war-common, change-orb-port, delete-javamail-resource-common, deploy-common, create-jms-resource-common, setup-mq-common, delete-jdbc-resource-common, start-server-windows, dumpThreadStack, setupTimer, deploy-war-common, start-server, ee, checkReporting-common, testTimer, stop-server, create-jdbc-driver-connpool-common, all, platform-common, create-jms-connection-common, undeploy-war-name, cleanAS, deploy-dir, preparePB, stop-server-windows, confirmReportPresent-common, delete-jms-resource-common, pb, runtest, create-jvm-options, clean-jars-common, restart-instance, stopDomain, create-connector-connpool-common, set-pointbase-driver-connpool-props, delete-sql-common, deploy-jdbc-driver-common, create-domain-common, delete-jvm-options, create-jdbc-resource-common, prepare-truststore-certutil-common, create-user-common, asadmin-batch-common, delete-user-common, prepare-truststore-keytool-common, convWin, create-persistence-resource-common, get-version-common, startPB, delete-jms-connection-common, usage-common, deploy-war-no-context-root-ee, set-pointbase-connpool-props, usage, convUnix, staticCheck-common, ear-common, deploy-war-name, ]
+  [antcall] Entering /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml...
+Build sequence for target(s) `clean-classes-common' is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean-classes-common]
+Complete build sequence is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean-classes-common, restart-instance-common, execute-sql-common, deploy-rar-common, undeploy, deploy-jdbc-common, undeploy-rar-common, set-derby-connpool-props, create-sql-common, deploy-war-no-context-root-pe, verifier-common, start-server-unix, test-tagfiles-exist, create-PermSize, execute-ejb-sql-common, undeploy-client-common, prepare-keystore-common, deploy-verify-common-ee, startDerby, confirmMissingReport-common, create-connector-resource-common, asadmin-common, create-connector-connpool, delete-connector-connpool-common, verifier, start-clean-server, runwebclient-common, deploy-common-ee, startDerbyNonMac, webclient-war-common, flush-connpool-common, stopDerby, clean-webapps-common, delete-jdbc-connpool-common, prepare-truststore-common, deploy-verify-common, run, test-tlds-exist, deploy-verify-common-pe, undeploy-common, undeploy-jar-common, deploy-client-common, enterprise-common, create-javamail-resource-common, package-persistence-common, deploy-war-commonee, startDomainWindows, set-derby-driver-connpool-props, deploy-war-no-context-root, undeploy-jdbc-common, deploy-common-pe, clear, copy-tagfiles, clean, compile, build, deploy, restart-server-instance-common, deploy-jar-common, delete-domain-common, stopPB, compile-common-with-endorsed-dir, import-wsdl, deploy-war-commonpe, compile-common, restart-server, runclient-common, package-appclientjar-common, ee-common, copy-tlds, delete-persistence-resource-common, undeploy-jms-common, asadmin-common-ignore-fail, startDomainUnix, startDomain, fixFiles, ejb-jar-common, appclient-jar-common, build-ear-common, publish-war-common, build-publish-war, stop-server-unix, clean-common, create-jdbc-connpool-common, dev-report, startDerbyMac, deploy-jms-common, package-war-common, package-ejbjar-common, delete-connector-resource-common, deploy-jsp-common, unsetupTimer, undeploy-war-common, change-orb-port, delete-javamail-resource-common, deploy-common, create-jms-resource-common, setup-mq-common, delete-jdbc-resource-common, start-server-windows, dumpThreadStack, setupTimer, deploy-war-common, start-server, ee, checkReporting-common, testTimer, stop-server, create-jdbc-driver-connpool-common, all, platform-common, create-jms-connection-common, undeploy-war-name, cleanAS, deploy-dir, preparePB, stop-server-windows, confirmReportPresent-common, delete-jms-resource-common, pb, runtest, create-jvm-options, clean-jars-common, restart-instance, stopDomain, create-connector-connpool-common, set-pointbase-driver-connpool-props, delete-sql-common, deploy-jdbc-driver-common, create-domain-common, delete-jvm-options, create-jdbc-resource-common, prepare-truststore-certutil-common, create-user-common, asadmin-batch-common, delete-user-common, prepare-truststore-keytool-common, convWin, create-persistence-resource-common, get-version-common, startPB, delete-jms-connection-common, usage-common, deploy-war-no-context-root-ee, set-pointbase-connpool-props, usage, convUnix, staticCheck-common, ear-common, deploy-war-name, ]
+
+setOSConditions:
+Override ignored for property "isUnix"
+
+setToolWin:
+Skipped because property 'isWindows' not set.
+
+setToolUnix:
+Override ignored for property "APPCLIENT"
+Override ignored for property "ASADMIN"
+Override ignored for property "ASANT"
+Override ignored for property "CAPTURESCHEMA"
+Override ignored for property "CHECKPATCH"
+Override ignored for property "INSTALLPATCH"
+Override ignored for property "JSPC"
+Override ignored for property "LISTPATCH"
+Override ignored for property "PACKAGE-APPCLIENT"
+Override ignored for property "VERIFIER"
+Override ignored for property "RMIC"
+Override ignored for property "TNAMESERV"
+Override ignored for property "WSCOMPILE"
+Override ignored for property "WSIMPORT"
+Override ignored for property "pb.start.server"
+Override ignored for property "pb.start.server1"
+Override ignored for property "IMQDBMGR"
+Override ignored for property "ld.library.path"
+
+setS1ASclassPath:
+Skipped because property 's1as.classpath' set.
+
+init-common:
+     [echo] Loading props from file /export/work/workspaces/gfv3/appserv-tests/config.properties
+Override ignored for property "pe"
+ [property] Loading /export/work/workspaces/gfv3/appserv-tests/config.properties
+Override ignored for property "instance.https.port"
+Override ignored for property "admin.domain"
+Override ignored for property "admin.password"
+Override ignored for property "http.address"
+Override ignored for property "http.alternate.port"
+Override ignored for property "ssl.password"
+Override ignored for property "instance.http.port"
+Override ignored for property "resources.dottedname.prefix"
+Override ignored for property "results.mailer"
+Override ignored for property "admin.domain.dir"
+Override ignored for property "admin.user"
+Override ignored for property "config.dottedname.prefix"
+Override ignored for property "instance.name"
+Override ignored for property "precompilejsp"
+Override ignored for property "admin.password.file"
+Override ignored for property "http.port"
+Override ignored for property "https.port"
+Override ignored for property "results.mailee"
+Override ignored for property "appserver.instance.name"
+Override ignored for property "master.password"
+Override ignored for property "http.host"
+Override ignored for property "instance.http.port.3"
+Override ignored for property "instance.http.port.2"
+Override ignored for property "admin.port"
+Override ignored for property "cluster.name"
+Override ignored for property "appserver.instance.dir"
+Override ignored for property "autodeploy.dir"
+Override ignored for property "orb.port"
+Override ignored for property "admin.host"
+Override ignored for property "instance.name.3"
+Override ignored for property "instance.name.2"
+Override ignored for property "results.mailhost"
+     [echo] admin.domain domain1
+     [echo] admin.user admin
+     [echo] admin.port 4848
+     [echo] http.port 8080
+     [echo] http.host localhost
+Override ignored for property "as.props"
+Override ignored for property "authrealmname"
+Override ignored for property "apptype"
+Override ignored for property "db.root"
+Override ignored for property "db.dir"
+Override ignored for property "db.classpath"
+ [property] Loading /export/work/workspaces/gfv3/appserv-tests/config/derby.properties
+Override ignored for property "db.host"
+Override ignored for property "db.url"
+Override ignored for property "db.xaclass"
+Override ignored for property "db.name"
+Override ignored for property "db.driver"
+Override ignored for property "db.port"
+Override ignored for property "db.port.2"
+Override ignored for property "db.class"
+Override ignored for property "db.user"
+Override ignored for property "db.pwd"
+Override ignored for property "db.type"
+Property "env.JAVKE_HOME" has not been set
+Override ignored for property "javke.home"
+Override ignored for property "dest.type"
+Override ignored for property "dest.name"
+Override ignored for property "jms.factory.name"
+Override ignored for property "jms.factory.type"
+Override ignored for property "jms.resource.name"
+Override ignored for property "jms.resource.type"
+Override ignored for property "jdbc.conpool.name"
+Override ignored for property "jdbc.resource.name"
+Override ignored for property "jdbc.resource.type"
+Override ignored for property "pm.resource.name"
+Override ignored for property "pm.factory.class"
+Override ignored for property "appclient.application.args"
+Override ignored for property "build.base.dir"
+Override ignored for property "build.webapps.dir"
+Override ignored for property "build.classes.dir"
+Override ignored for property "assemble.dir"
+Override ignored for property "results.dir"
+Property "Derby.classpath" has not been set
+Override ignored for property "s1astest.classpath"
+Override ignored for property "ejbjar.classes"
+Override ignored for property "appclientjar.classes"
+Override ignored for property "webclient.war.files"
+Override ignored for property "webclient.war.classes"
+Override ignored for property "test.name"
+Override ignored for property "test.description"
+Override ignored for property "test.count"
+Override ignored for property "cluster.name"
+Override ignored for property "clustered.server.name"
+Override ignored for property "clustered.server.name.two"
+Override ignored for property "nodeagent.name"
+Override ignored for property "das.host"
+Override ignored for property "das.jmx.port"
+Override ignored for property "http.listener1.port"
+Override ignored for property "http.listener2.port"
+Override ignored for property "orb.listener1.port"
+Override ignored for property "ssl.port"
+Override ignored for property "ssl.mutualauth.port"
+Override ignored for property "jmx.system.connector.port"
+Override ignored for property "http.listener1.port.two"
+Override ignored for property "http.listener2.port.two"
+Override ignored for property "orb.listener1.port.two"
+Override ignored for property "ssl.port.two"
+Override ignored for property "ssl.mutualauth.port.two"
+Override ignored for property "jmx.system.connector.port.two"
+Override ignored for property "cert.nickname"
+
+clean-classes-common:
+     [echo] common.xml: Cleaning test source files: /export/work/workspaces/gfv3/appserv-tests/build/module
+  [antcall] Exiting /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml.
+Project base dir set to: /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans
+  [antcall] calling target(s) [clean-jars-common] in build file /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml
+parsing buildfile /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml with URI = file:/export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml
+Project base dir set to: /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/config/properties.xml
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/config/common.xml
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.properties
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/config/run.xml
+ [property] Loading Environment env.
+Override ignored for property "env.SESSION_MANAGER"
+Override ignored for property "env.LESSOPEN"
+Override ignored for property "env.NORMBGCOLOR"
+Override ignored for property "env.CVSROOT"
+Override ignored for property "env.MY_ANT_HOME"
+Override ignored for property "env.PWD"
+Override ignored for property "env.XDG_SESSION_COOKIE"
+Override ignored for property "env.LANG"
+Override ignored for property "env.WS"
+Override ignored for property "env.AWT_TOOLKIT"
+Override ignored for property "env.DEFAULTS_PATH"
+Override ignored for property "env.HISTSIZE"
+Override ignored for property "env.INSTALL_ROOT"
+Override ignored for property "env.DISPLAY"
+Override ignored for property "env._"
+Override ignored for property "env.USER"
+Override ignored for property "env.HISTCONTROL"
+Override ignored for property "env.SHELL"
+Override ignored for property "env.NLSPATH"
+Override ignored for property "env.XDG_DATA_DIRS"
+Override ignored for property "env.DESKTOP_SESSION"
+Override ignored for property "env.HISTFILESIZE"
+Override ignored for property "env.APS_HOME"
+Override ignored for property "env.WIDTH"
+Override ignored for property "env.JAVANETCVSROOT"
+Override ignored for property "env.PATH"
+Override ignored for property "env.no_proxy"
+Override ignored for property "env.NORMFGCOLOR"
+Override ignored for property "env.LC_CTYPE"
+Override ignored for property "env.DBUS_SESSION_BUS_ADDRESS"
+Override ignored for property "env.REALPLAYER_HOME"
+Override ignored for property "env.SSH_AGENT_PID"
+Override ignored for property "env.SHLVL"
+Override ignored for property "env.GDMSESSION"
+Override ignored for property "env.GNOME_DESKTOP_SESSION_ID"
+Override ignored for property "env.GDM_KEYBOARD_LAYOUT"
+Override ignored for property "env.GNOME_KEYRING_PID"
+Override ignored for property "env.OS"
+Override ignored for property "env.LOGNAME"
+Override ignored for property "env.ALSA_OUTPUT_PORTS"
+Override ignored for property "env.SCUMMVM_PORT"
+Override ignored for property "env.JAVA_HOME"
+Override ignored for property "env.TERM"
+Override ignored for property "env.QLTESTRES"
+Override ignored for property "env.NO_PROXY"
+Override ignored for property "env.GDM_LANG"
+Override ignored for property "env.DTACH_HOME"
+Override ignored for property "env.OLDPWD"
+Override ignored for property "env.DEBUG"
+Override ignored for property "env.GCONF_LOCAL_LOCKS"
+Override ignored for property "env.M2_HOME"
+Override ignored for property "env.EC2_CERT"
+Override ignored for property "env.WINDOWID"
+Override ignored for property "env.EC2_PRIVATE_KEY"
+Override ignored for property "env.REDCVSROOT"
+Override ignored for property "env.MOZ_DISABLE_PANGO"
+Override ignored for property "env.XFILESEARCHPATH"
+Override ignored for property "env.HOME"
+Override ignored for property "env.ANT_HOME"
+Override ignored for property "env.LD_LIBRARY_PATH"
+Override ignored for property "env.MAVEN_OPTS"
+Override ignored for property "env.SSH_AUTH_SOCK"
+Override ignored for property "env.RBARWIDTH"
+Override ignored for property "env.S1AS_HOME"
+Property "BASH_SOURCE" has not been set
+Property "LINENO" has not been set
+Property "FUNCNAME[0]" has not been set
+Override ignored for property "env.PS4"
+Override ignored for property "env.MAVEN_HOME"
+Override ignored for property "env.XAUTHORITY"
+Property "NEW_PWD" has not been set
+Override ignored for property "env.PS1"
+Override ignored for property "env.MANDATORY_PATH"
+Override ignored for property "env.SPEECHD_PORT"
+Override ignored for property "env.GTK_MODULES"
+Override ignored for property "env.WINDOW_MANAGER"
+Override ignored for property "env.DTRX_HOME"
+Override ignored for property "env.COLORTERM"
+Override ignored for property "env.EDITOR"
+Override ignored for property "env.MALLOC_CHECK_"
+Override ignored for property "env.ORBIT_SOCKETDIR"
+Override ignored for property "env.WP_INSTALL_ROOT"
+Override ignored for property "env.USERNAME"
+Override ignored for property "env.SCALA_HOME"
+Override ignored for property "env.COPE_PATH"
+Override ignored for property "env.QL_HOME"
+Override ignored for property "env.AS_ADMIN_READTIMEOUT"
+Override ignored for property "env.MY_SCRIPT_DIR"
+Override ignored for property "env.GNOME_KEYRING_CONTROL"
+Override ignored for property "env.XDG_CONFIG_DIRS"
+Override ignored for property "env.TODOTXT_HOME"
+Override ignored for property "env.LESSCLOSE"
+Override ignored for property "module"
+Override ignored for property "appname"
+Override ignored for property "assemble"
+Override ignored for property "contextroot"
+Override ignored for property "beans.xml"
+Override ignored for property "target-to-run"
+ [macrodef] creating macro  run-test
+Build sequence for target(s) `clean-jars-common' is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean-jars-common]
+Complete build sequence is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean-jars-common, restart-instance-common, execute-sql-common, deploy-rar-common, undeploy, deploy-jdbc-common, undeploy-rar-common, set-derby-connpool-props, create-sql-common, deploy-war-no-context-root-pe, verifier-common, start-server-unix, test-tagfiles-exist, create-PermSize, execute-ejb-sql-common, undeploy-client-common, prepare-keystore-common, deploy-verify-common-ee, startDerby, confirmMissingReport-common, create-connector-resource-common, asadmin-common, create-connector-connpool, delete-connector-connpool-common, verifier, start-clean-server, runwebclient-common, deploy-common-ee, startDerbyNonMac, webclient-war-common, flush-connpool-common, stopDerby, clean-webapps-common, delete-jdbc-connpool-common, prepare-truststore-common, deploy-verify-common, run, test-tlds-exist, deploy-verify-common-pe, undeploy-common, undeploy-jar-common, deploy-client-common, enterprise-common, create-javamail-resource-common, package-persistence-common, deploy-war-commonee, startDomainWindows, set-derby-driver-connpool-props, deploy-war-no-context-root, undeploy-jdbc-common, deploy-common-pe, clear, copy-tagfiles, clean, compile, build, deploy, restart-server-instance-common, deploy-jar-common, delete-domain-common, stopPB, compile-common-with-endorsed-dir, import-wsdl, deploy-war-commonpe, compile-common, restart-server, runclient-common, package-appclientjar-common, ee-common, copy-tlds, delete-persistence-resource-common, undeploy-jms-common, asadmin-common-ignore-fail, startDomainUnix, startDomain, fixFiles, ejb-jar-common, appclient-jar-common, build-ear-common, publish-war-common, build-publish-war, stop-server-unix, clean-classes-common, clean-common, create-jdbc-connpool-common, dev-report, startDerbyMac, deploy-jms-common, package-war-common, package-ejbjar-common, delete-connector-resource-common, deploy-jsp-common, unsetupTimer, undeploy-war-common, change-orb-port, delete-javamail-resource-common, deploy-common, create-jms-resource-common, setup-mq-common, delete-jdbc-resource-common, start-server-windows, dumpThreadStack, setupTimer, deploy-war-common, start-server, ee, checkReporting-common, testTimer, stop-server, create-jdbc-driver-connpool-common, all, platform-common, create-jms-connection-common, undeploy-war-name, cleanAS, deploy-dir, preparePB, stop-server-windows, confirmReportPresent-common, delete-jms-resource-common, pb, runtest, create-jvm-options, restart-instance, stopDomain, create-connector-connpool-common, set-pointbase-driver-connpool-props, delete-sql-common, deploy-jdbc-driver-common, create-domain-common, delete-jvm-options, create-jdbc-resource-common, prepare-truststore-certutil-common, create-user-common, asadmin-batch-common, delete-user-common, prepare-truststore-keytool-common, convWin, create-persistence-resource-common, get-version-common, startPB, delete-jms-connection-common, usage-common, deploy-war-no-context-root-ee, set-pointbase-connpool-props, usage, convUnix, staticCheck-common, ear-common, deploy-war-name, ]
+  [antcall] Entering /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml...
+Build sequence for target(s) `clean-jars-common' is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean-jars-common]
+Complete build sequence is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, clean-jars-common, restart-instance-common, execute-sql-common, deploy-rar-common, undeploy, deploy-jdbc-common, undeploy-rar-common, set-derby-connpool-props, create-sql-common, deploy-war-no-context-root-pe, verifier-common, start-server-unix, test-tagfiles-exist, create-PermSize, execute-ejb-sql-common, undeploy-client-common, prepare-keystore-common, deploy-verify-common-ee, startDerby, confirmMissingReport-common, create-connector-resource-common, asadmin-common, create-connector-connpool, delete-connector-connpool-common, verifier, start-clean-server, runwebclient-common, deploy-common-ee, startDerbyNonMac, webclient-war-common, flush-connpool-common, stopDerby, clean-webapps-common, delete-jdbc-connpool-common, prepare-truststore-common, deploy-verify-common, run, test-tlds-exist, deploy-verify-common-pe, undeploy-common, undeploy-jar-common, deploy-client-common, enterprise-common, create-javamail-resource-common, package-persistence-common, deploy-war-commonee, startDomainWindows, set-derby-driver-connpool-props, deploy-war-no-context-root, undeploy-jdbc-common, deploy-common-pe, clear, copy-tagfiles, clean, compile, build, deploy, restart-server-instance-common, deploy-jar-common, delete-domain-common, stopPB, compile-common-with-endorsed-dir, import-wsdl, deploy-war-commonpe, compile-common, restart-server, runclient-common, package-appclientjar-common, ee-common, copy-tlds, delete-persistence-resource-common, undeploy-jms-common, asadmin-common-ignore-fail, startDomainUnix, startDomain, fixFiles, ejb-jar-common, appclient-jar-common, build-ear-common, publish-war-common, build-publish-war, stop-server-unix, clean-classes-common, clean-common, create-jdbc-connpool-common, dev-report, startDerbyMac, deploy-jms-common, package-war-common, package-ejbjar-common, delete-connector-resource-common, deploy-jsp-common, unsetupTimer, undeploy-war-common, change-orb-port, delete-javamail-resource-common, deploy-common, create-jms-resource-common, setup-mq-common, delete-jdbc-resource-common, start-server-windows, dumpThreadStack, setupTimer, deploy-war-common, start-server, ee, checkReporting-common, testTimer, stop-server, create-jdbc-driver-connpool-common, all, platform-common, create-jms-connection-common, undeploy-war-name, cleanAS, deploy-dir, preparePB, stop-server-windows, confirmReportPresent-common, delete-jms-resource-common, pb, runtest, create-jvm-options, restart-instance, stopDomain, create-connector-connpool-common, set-pointbase-driver-connpool-props, delete-sql-common, deploy-jdbc-driver-common, create-domain-common, delete-jvm-options, create-jdbc-resource-common, prepare-truststore-certutil-common, create-user-common, asadmin-batch-common, delete-user-common, prepare-truststore-keytool-common, convWin, create-persistence-resource-common, get-version-common, startPB, delete-jms-connection-common, usage-common, deploy-war-no-context-root-ee, set-pointbase-connpool-props, usage, convUnix, staticCheck-common, ear-common, deploy-war-name, ]
+
+setOSConditions:
+Override ignored for property "isUnix"
+
+setToolWin:
+Skipped because property 'isWindows' not set.
+
+setToolUnix:
+Override ignored for property "APPCLIENT"
+Override ignored for property "ASADMIN"
+Override ignored for property "ASANT"
+Override ignored for property "CAPTURESCHEMA"
+Override ignored for property "CHECKPATCH"
+Override ignored for property "INSTALLPATCH"
+Override ignored for property "JSPC"
+Override ignored for property "LISTPATCH"
+Override ignored for property "PACKAGE-APPCLIENT"
+Override ignored for property "VERIFIER"
+Override ignored for property "RMIC"
+Override ignored for property "TNAMESERV"
+Override ignored for property "WSCOMPILE"
+Override ignored for property "WSIMPORT"
+Override ignored for property "pb.start.server"
+Override ignored for property "pb.start.server1"
+Override ignored for property "IMQDBMGR"
+Override ignored for property "ld.library.path"
+
+setS1ASclassPath:
+Skipped because property 's1as.classpath' set.
+
+init-common:
+     [echo] Loading props from file /export/work/workspaces/gfv3/appserv-tests/config.properties
+Override ignored for property "pe"
+ [property] Loading /export/work/workspaces/gfv3/appserv-tests/config.properties
+Override ignored for property "instance.https.port"
+Override ignored for property "admin.domain"
+Override ignored for property "admin.password"
+Override ignored for property "http.address"
+Override ignored for property "http.alternate.port"
+Override ignored for property "ssl.password"
+Override ignored for property "instance.http.port"
+Override ignored for property "resources.dottedname.prefix"
+Override ignored for property "results.mailer"
+Override ignored for property "admin.domain.dir"
+Override ignored for property "admin.user"
+Override ignored for property "config.dottedname.prefix"
+Override ignored for property "instance.name"
+Override ignored for property "precompilejsp"
+Override ignored for property "admin.password.file"
+Override ignored for property "http.port"
+Override ignored for property "https.port"
+Override ignored for property "results.mailee"
+Override ignored for property "appserver.instance.name"
+Override ignored for property "master.password"
+Override ignored for property "http.host"
+Override ignored for property "instance.http.port.3"
+Override ignored for property "instance.http.port.2"
+Override ignored for property "admin.port"
+Override ignored for property "cluster.name"
+Override ignored for property "appserver.instance.dir"
+Override ignored for property "autodeploy.dir"
+Override ignored for property "orb.port"
+Override ignored for property "admin.host"
+Override ignored for property "instance.name.3"
+Override ignored for property "instance.name.2"
+Override ignored for property "results.mailhost"
+     [echo] admin.domain domain1
+     [echo] admin.user admin
+     [echo] admin.port 4848
+     [echo] http.port 8080
+     [echo] http.host localhost
+Override ignored for property "as.props"
+Override ignored for property "authrealmname"
+Override ignored for property "apptype"
+Override ignored for property "db.root"
+Override ignored for property "db.dir"
+Override ignored for property "db.classpath"
+ [property] Loading /export/work/workspaces/gfv3/appserv-tests/config/derby.properties
+Override ignored for property "db.host"
+Override ignored for property "db.url"
+Override ignored for property "db.xaclass"
+Override ignored for property "db.name"
+Override ignored for property "db.driver"
+Override ignored for property "db.port"
+Override ignored for property "db.port.2"
+Override ignored for property "db.class"
+Override ignored for property "db.user"
+Override ignored for property "db.pwd"
+Override ignored for property "db.type"
+Property "env.JAVKE_HOME" has not been set
+Override ignored for property "javke.home"
+Override ignored for property "dest.type"
+Override ignored for property "dest.name"
+Override ignored for property "jms.factory.name"
+Override ignored for property "jms.factory.type"
+Override ignored for property "jms.resource.name"
+Override ignored for property "jms.resource.type"
+Override ignored for property "jdbc.conpool.name"
+Override ignored for property "jdbc.resource.name"
+Override ignored for property "jdbc.resource.type"
+Override ignored for property "pm.resource.name"
+Override ignored for property "pm.factory.class"
+Override ignored for property "appclient.application.args"
+Override ignored for property "build.base.dir"
+Override ignored for property "build.webapps.dir"
+Override ignored for property "build.classes.dir"
+Override ignored for property "assemble.dir"
+Override ignored for property "results.dir"
+Property "Derby.classpath" has not been set
+Override ignored for property "s1astest.classpath"
+Override ignored for property "ejbjar.classes"
+Override ignored for property "appclientjar.classes"
+Override ignored for property "webclient.war.files"
+Override ignored for property "webclient.war.classes"
+Override ignored for property "test.name"
+Override ignored for property "test.description"
+Override ignored for property "test.count"
+Override ignored for property "cluster.name"
+Override ignored for property "clustered.server.name"
+Override ignored for property "clustered.server.name.two"
+Override ignored for property "nodeagent.name"
+Override ignored for property "das.host"
+Override ignored for property "das.jmx.port"
+Override ignored for property "http.listener1.port"
+Override ignored for property "http.listener2.port"
+Override ignored for property "orb.listener1.port"
+Override ignored for property "ssl.port"
+Override ignored for property "ssl.mutualauth.port"
+Override ignored for property "jmx.system.connector.port"
+Override ignored for property "http.listener1.port.two"
+Override ignored for property "http.listener2.port.two"
+Override ignored for property "orb.listener1.port.two"
+Override ignored for property "ssl.port.two"
+Override ignored for property "ssl.mutualauth.port.two"
+Override ignored for property "jmx.system.connector.port.two"
+Override ignored for property "cert.nickname"
+  [antcall] Exiting /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml.
+  [antcall] Exiting /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml.
+
+compile:
+Project base dir set to: /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans
+  [antcall] calling target(s) [compile-common] in build file /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml
+parsing buildfile /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml with URI = file:/export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml
+Project base dir set to: /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/config/properties.xml
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/config/common.xml
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.properties
+resolving systemId: file:/export/work/workspaces/gfv3/appserv-tests/config/run.xml
+ [property] Loading Environment env.
+Override ignored for property "env.SESSION_MANAGER"
+Override ignored for property "env.LESSOPEN"
+Override ignored for property "env.NORMBGCOLOR"
+Override ignored for property "env.CVSROOT"
+Override ignored for property "env.MY_ANT_HOME"
+Override ignored for property "env.PWD"
+Override ignored for property "env.XDG_SESSION_COOKIE"
+Override ignored for property "env.LANG"
+Override ignored for property "env.WS"
+Override ignored for property "env.AWT_TOOLKIT"
+Override ignored for property "env.DEFAULTS_PATH"
+Override ignored for property "env.HISTSIZE"
+Override ignored for property "env.INSTALL_ROOT"
+Override ignored for property "env.DISPLAY"
+Override ignored for property "env._"
+Override ignored for property "env.USER"
+Override ignored for property "env.HISTCONTROL"
+Override ignored for property "env.SHELL"
+Override ignored for property "env.NLSPATH"
+Override ignored for property "env.XDG_DATA_DIRS"
+Override ignored for property "env.DESKTOP_SESSION"
+Override ignored for property "env.HISTFILESIZE"
+Override ignored for property "env.APS_HOME"
+Override ignored for property "env.WIDTH"
+Override ignored for property "env.JAVANETCVSROOT"
+Override ignored for property "env.PATH"
+Override ignored for property "env.no_proxy"
+Override ignored for property "env.NORMFGCOLOR"
+Override ignored for property "env.LC_CTYPE"
+Override ignored for property "env.DBUS_SESSION_BUS_ADDRESS"
+Override ignored for property "env.REALPLAYER_HOME"
+Override ignored for property "env.SSH_AGENT_PID"
+Override ignored for property "env.SHLVL"
+Override ignored for property "env.GDMSESSION"
+Override ignored for property "env.GNOME_DESKTOP_SESSION_ID"
+Override ignored for property "env.GDM_KEYBOARD_LAYOUT"
+Override ignored for property "env.GNOME_KEYRING_PID"
+Override ignored for property "env.OS"
+Override ignored for property "env.LOGNAME"
+Override ignored for property "env.ALSA_OUTPUT_PORTS"
+Override ignored for property "env.SCUMMVM_PORT"
+Override ignored for property "env.JAVA_HOME"
+Override ignored for property "env.TERM"
+Override ignored for property "env.QLTESTRES"
+Override ignored for property "env.NO_PROXY"
+Override ignored for property "env.GDM_LANG"
+Override ignored for property "env.DTACH_HOME"
+Override ignored for property "env.OLDPWD"
+Override ignored for property "env.DEBUG"
+Override ignored for property "env.GCONF_LOCAL_LOCKS"
+Override ignored for property "env.M2_HOME"
+Override ignored for property "env.EC2_CERT"
+Override ignored for property "env.WINDOWID"
+Override ignored for property "env.EC2_PRIVATE_KEY"
+Override ignored for property "env.REDCVSROOT"
+Override ignored for property "env.MOZ_DISABLE_PANGO"
+Override ignored for property "env.XFILESEARCHPATH"
+Override ignored for property "env.HOME"
+Override ignored for property "env.ANT_HOME"
+Override ignored for property "env.LD_LIBRARY_PATH"
+Override ignored for property "env.MAVEN_OPTS"
+Override ignored for property "env.SSH_AUTH_SOCK"
+Override ignored for property "env.RBARWIDTH"
+Override ignored for property "env.S1AS_HOME"
+Property "BASH_SOURCE" has not been set
+Property "LINENO" has not been set
+Property "FUNCNAME[0]" has not been set
+Override ignored for property "env.PS4"
+Override ignored for property "env.MAVEN_HOME"
+Override ignored for property "env.XAUTHORITY"
+Property "NEW_PWD" has not been set
+Override ignored for property "env.PS1"
+Override ignored for property "env.MANDATORY_PATH"
+Override ignored for property "env.SPEECHD_PORT"
+Override ignored for property "env.GTK_MODULES"
+Override ignored for property "env.WINDOW_MANAGER"
+Override ignored for property "env.DTRX_HOME"
+Override ignored for property "env.COLORTERM"
+Override ignored for property "env.EDITOR"
+Override ignored for property "env.MALLOC_CHECK_"
+Override ignored for property "env.ORBIT_SOCKETDIR"
+Override ignored for property "env.WP_INSTALL_ROOT"
+Override ignored for property "env.USERNAME"
+Override ignored for property "env.SCALA_HOME"
+Override ignored for property "env.COPE_PATH"
+Override ignored for property "env.QL_HOME"
+Override ignored for property "env.AS_ADMIN_READTIMEOUT"
+Override ignored for property "env.MY_SCRIPT_DIR"
+Override ignored for property "env.GNOME_KEYRING_CONTROL"
+Override ignored for property "env.XDG_CONFIG_DIRS"
+Override ignored for property "env.TODOTXT_HOME"
+Override ignored for property "env.LESSCLOSE"
+Override ignored for property "module"
+Override ignored for property "appname"
+Override ignored for property "assemble"
+Override ignored for property "contextroot"
+Override ignored for property "beans.xml"
+Override ignored for property "target-to-run"
+ [macrodef] creating macro  run-test
+Build sequence for target(s) `compile-common' is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, compile-common]
+Complete build sequence is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, compile-common, restart-instance-common, execute-sql-common, deploy-rar-common, undeploy, deploy-jdbc-common, undeploy-rar-common, set-derby-connpool-props, create-sql-common, deploy-war-no-context-root-pe, verifier-common, start-server-unix, test-tagfiles-exist, create-PermSize, execute-ejb-sql-common, undeploy-client-common, prepare-keystore-common, deploy-verify-common-ee, startDerby, confirmMissingReport-common, create-connector-resource-common, asadmin-common, create-connector-connpool, delete-connector-connpool-common, verifier, start-clean-server, runwebclient-common, deploy-common-ee, startDerbyNonMac, webclient-war-common, flush-connpool-common, stopDerby, clean-webapps-common, delete-jdbc-connpool-common, prepare-truststore-common, deploy-verify-common, run, test-tlds-exist, deploy-verify-common-pe, undeploy-common, undeploy-jar-common, deploy-client-common, enterprise-common, create-javamail-resource-common, package-persistence-common, deploy-war-commonee, startDomainWindows, set-derby-driver-connpool-props, deploy-war-no-context-root, undeploy-jdbc-common, deploy-common-pe, clear, copy-tagfiles, clean, compile, build, deploy, restart-server-instance-common, deploy-jar-common, delete-domain-common, stopPB, compile-common-with-endorsed-dir, import-wsdl, deploy-war-commonpe, restart-server, runclient-common, package-appclientjar-common, ee-common, copy-tlds, delete-persistence-resource-common, undeploy-jms-common, asadmin-common-ignore-fail, startDomainUnix, startDomain, fixFiles, ejb-jar-common, appclient-jar-common, build-ear-common, publish-war-common, build-publish-war, stop-server-unix, clean-classes-common, clean-common, create-jdbc-connpool-common, dev-report, startDerbyMac, deploy-jms-common, package-war-common, package-ejbjar-common, delete-connector-resource-common, deploy-jsp-common, unsetupTimer, undeploy-war-common, change-orb-port, delete-javamail-resource-common, deploy-common, create-jms-resource-common, setup-mq-common, delete-jdbc-resource-common, start-server-windows, dumpThreadStack, setupTimer, deploy-war-common, start-server, ee, checkReporting-common, testTimer, stop-server, create-jdbc-driver-connpool-common, all, platform-common, create-jms-connection-common, undeploy-war-name, cleanAS, deploy-dir, preparePB, stop-server-windows, confirmReportPresent-common, delete-jms-resource-common, pb, runtest, create-jvm-options, clean-jars-common, restart-instance, stopDomain, create-connector-connpool-common, set-pointbase-driver-connpool-props, delete-sql-common, deploy-jdbc-driver-common, create-domain-common, delete-jvm-options, create-jdbc-resource-common, prepare-truststore-certutil-common, create-user-common, asadmin-batch-common, delete-user-common, prepare-truststore-keytool-common, convWin, create-persistence-resource-common, get-version-common, startPB, delete-jms-connection-common, usage-common, deploy-war-no-context-root-ee, set-pointbase-connpool-props, usage, convUnix, staticCheck-common, ear-common, deploy-war-name, ]
+  [antcall] Entering /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml...
+Build sequence for target(s) `compile-common' is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, compile-common]
+Complete build sequence is [setOSConditions, setToolWin, setToolUnix, setToolProperty, setS1ASclassPath, init-common, compile-common, restart-instance-common, execute-sql-common, deploy-rar-common, undeploy, deploy-jdbc-common, undeploy-rar-common, set-derby-connpool-props, create-sql-common, deploy-war-no-context-root-pe, verifier-common, start-server-unix, test-tagfiles-exist, create-PermSize, execute-ejb-sql-common, undeploy-client-common, prepare-keystore-common, deploy-verify-common-ee, startDerby, confirmMissingReport-common, create-connector-resource-common, asadmin-common, create-connector-connpool, delete-connector-connpool-common, verifier, start-clean-server, runwebclient-common, deploy-common-ee, startDerbyNonMac, webclient-war-common, flush-connpool-common, stopDerby, clean-webapps-common, delete-jdbc-connpool-common, prepare-truststore-common, deploy-verify-common, run, test-tlds-exist, deploy-verify-common-pe, undeploy-common, undeploy-jar-common, deploy-client-common, enterprise-common, create-javamail-resource-common, package-persistence-common, deploy-war-commonee, startDomainWindows, set-derby-driver-connpool-props, deploy-war-no-context-root, undeploy-jdbc-common, deploy-common-pe, clear, copy-tagfiles, clean, compile, build, deploy, restart-server-instance-common, deploy-jar-common, delete-domain-common, stopPB, compile-common-with-endorsed-dir, import-wsdl, deploy-war-commonpe, restart-server, runclient-common, package-appclientjar-common, ee-common, copy-tlds, delete-persistence-resource-common, undeploy-jms-common, asadmin-common-ignore-fail, startDomainUnix, startDomain, fixFiles, ejb-jar-common, appclient-jar-common, build-ear-common, publish-war-common, build-publish-war, stop-server-unix, clean-classes-common, clean-common, create-jdbc-connpool-common, dev-report, startDerbyMac, deploy-jms-common, package-war-common, package-ejbjar-common, delete-connector-resource-common, deploy-jsp-common, unsetupTimer, undeploy-war-common, change-orb-port, delete-javamail-resource-common, deploy-common, create-jms-resource-common, setup-mq-common, delete-jdbc-resource-common, start-server-windows, dumpThreadStack, setupTimer, deploy-war-common, start-server, ee, checkReporting-common, testTimer, stop-server, create-jdbc-driver-connpool-common, all, platform-common, create-jms-connection-common, undeploy-war-name, cleanAS, deploy-dir, preparePB, stop-server-windows, confirmReportPresent-common, delete-jms-resource-common, pb, runtest, create-jvm-options, clean-jars-common, restart-instance, stopDomain, create-connector-connpool-common, set-pointbase-driver-connpool-props, delete-sql-common, deploy-jdbc-driver-common, create-domain-common, delete-jvm-options, create-jdbc-resource-common, prepare-truststore-certutil-common, create-user-common, asadmin-batch-common, delete-user-common, prepare-truststore-keytool-common, convWin, create-persistence-resource-common, get-version-common, startPB, delete-jms-connection-common, usage-common, deploy-war-no-context-root-ee, set-pointbase-connpool-props, usage, convUnix, staticCheck-common, ear-common, deploy-war-name, ]
+
+setOSConditions:
+Override ignored for property "isUnix"
+
+setToolWin:
+Skipped because property 'isWindows' not set.
+
+setToolUnix:
+Override ignored for property "APPCLIENT"
+Override ignored for property "ASADMIN"
+Override ignored for property "ASANT"
+Override ignored for property "CAPTURESCHEMA"
+Override ignored for property "CHECKPATCH"
+Override ignored for property "INSTALLPATCH"
+Override ignored for property "JSPC"
+Override ignored for property "LISTPATCH"
+Override ignored for property "PACKAGE-APPCLIENT"
+Override ignored for property "VERIFIER"
+Override ignored for property "RMIC"
+Override ignored for property "TNAMESERV"
+Override ignored for property "WSCOMPILE"
+Override ignored for property "WSIMPORT"
+Override ignored for property "pb.start.server"
+Override ignored for property "pb.start.server1"
+Override ignored for property "IMQDBMGR"
+Override ignored for property "ld.library.path"
+
+setS1ASclassPath:
+Skipped because property 's1as.classpath' set.
+
+init-common:
+     [echo] Loading props from file /export/work/workspaces/gfv3/appserv-tests/config.properties
+Override ignored for property "pe"
+ [property] Loading /export/work/workspaces/gfv3/appserv-tests/config.properties
+Override ignored for property "instance.https.port"
+Override ignored for property "admin.domain"
+Override ignored for property "admin.password"
+Override ignored for property "http.address"
+Override ignored for property "http.alternate.port"
+Override ignored for property "ssl.password"
+Override ignored for property "instance.http.port"
+Override ignored for property "resources.dottedname.prefix"
+Override ignored for property "results.mailer"
+Override ignored for property "admin.domain.dir"
+Override ignored for property "admin.user"
+Override ignored for property "config.dottedname.prefix"
+Override ignored for property "instance.name"
+Override ignored for property "precompilejsp"
+Override ignored for property "admin.password.file"
+Override ignored for property "http.port"
+Override ignored for property "https.port"
+Override ignored for property "results.mailee"
+Override ignored for property "appserver.instance.name"
+Override ignored for property "master.password"
+Override ignored for property "http.host"
+Override ignored for property "instance.http.port.3"
+Override ignored for property "instance.http.port.2"
+Override ignored for property "admin.port"
+Override ignored for property "cluster.name"
+Override ignored for property "appserver.instance.dir"
+Override ignored for property "autodeploy.dir"
+Override ignored for property "orb.port"
+Override ignored for property "admin.host"
+Override ignored for property "instance.name.3"
+Override ignored for property "instance.name.2"
+Override ignored for property "results.mailhost"
+     [echo] admin.domain domain1
+     [echo] admin.user admin
+     [echo] admin.port 4848
+     [echo] http.port 8080
+     [echo] http.host localhost
+Override ignored for property "as.props"
+Override ignored for property "authrealmname"
+Override ignored for property "apptype"
+Override ignored for property "db.root"
+Override ignored for property "db.dir"
+Override ignored for property "db.classpath"
+ [property] Loading /export/work/workspaces/gfv3/appserv-tests/config/derby.properties
+Override ignored for property "db.host"
+Override ignored for property "db.url"
+Override ignored for property "db.xaclass"
+Override ignored for property "db.name"
+Override ignored for property "db.driver"
+Override ignored for property "db.port"
+Override ignored for property "db.port.2"
+Override ignored for property "db.class"
+Override ignored for property "db.user"
+Override ignored for property "db.pwd"
+Override ignored for property "db.type"
+Property "env.JAVKE_HOME" has not been set
+Override ignored for property "javke.home"
+Override ignored for property "dest.type"
+Override ignored for property "dest.name"
+Override ignored for property "jms.factory.name"
+Override ignored for property "jms.factory.type"
+Override ignored for property "jms.resource.name"
+Override ignored for property "jms.resource.type"
+Override ignored for property "jdbc.conpool.name"
+Override ignored for property "jdbc.resource.name"
+Override ignored for property "jdbc.resource.type"
+Override ignored for property "pm.resource.name"
+Override ignored for property "pm.factory.class"
+Override ignored for property "appclient.application.args"
+Override ignored for property "build.base.dir"
+Override ignored for property "build.webapps.dir"
+Override ignored for property "build.classes.dir"
+Override ignored for property "assemble.dir"
+Override ignored for property "results.dir"
+Property "Derby.classpath" has not been set
+Override ignored for property "s1astest.classpath"
+Override ignored for property "ejbjar.classes"
+Override ignored for property "appclientjar.classes"
+Override ignored for property "webclient.war.files"
+Override ignored for property "webclient.war.classes"
+Override ignored for property "test.name"
+Override ignored for property "test.description"
+Override ignored for property "test.count"
+Override ignored for property "cluster.name"
+Override ignored for property "clustered.server.name"
+Override ignored for property "clustered.server.name.two"
+Override ignored for property "nodeagent.name"
+Override ignored for property "das.host"
+Override ignored for property "das.jmx.port"
+Override ignored for property "http.listener1.port"
+Override ignored for property "http.listener2.port"
+Override ignored for property "orb.listener1.port"
+Override ignored for property "ssl.port"
+Override ignored for property "ssl.mutualauth.port"
+Override ignored for property "jmx.system.connector.port"
+Override ignored for property "http.listener1.port.two"
+Override ignored for property "http.listener2.port.two"
+Override ignored for property "orb.listener1.port.two"
+Override ignored for property "ssl.port.two"
+Override ignored for property "ssl.mutualauth.port.two"
+Override ignored for property "jmx.system.connector.port.two"
+Override ignored for property "cert.nickname"
+
+compile-common:
+    [mkdir] Created dir: /export/work/workspaces/gfv3/appserv-tests/build/module/classes
+     [echo] common.xml: Compiling test source files
+    [mkdir] Skipping /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet because it already exists.
+    [javac] ClassUnavailableAtRuntime.java added as ClassUnavailableAtRuntime.class doesn't exist.
+    [javac] OptionalService.java added as OptionalService.class doesn't exist.
+    [javac] TestBean.java added as TestBean.class doesn't exist.
+    [javac] TestLoggerProducer.java added as TestLoggerProducer.class doesn't exist.
+    [javac] TestServlet.java added as TestServlet.class doesn't exist.
+    [javac] Compiling 5 source files to /export/work/workspaces/gfv3/appserv-tests/build/module/classes
+    [javac] Using modern compiler
+dropping /export/work/workspaces/gfv3/appserv-tests/sqetests/connector/lib/cci-derby-proc.jar from path as it doesn't exist
+dropping /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/${Derby.classpath} from path as it doesn't exist
+    [javac] Compilation arguments:
+    [javac] '-d'
+    [javac] '/export/work/workspaces/gfv3/appserv-tests/build/module/classes'
+    [javac] '-classpath'
+    [javac] '/export/work/workspaces/gfv3/appserv-tests/build/module/classes:/export/work/workspaces/gfv3/appserv-tests/lib/reporter.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/acc-config.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/admin-cli.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/admin-core.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/admin-util.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/amx-all.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/annotation-framework.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/ant.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/antlr-repackaged.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/api-exporter.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/appclient-connector.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/appclient-server-core.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/appclient.security.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/asm-all-repackaged.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/auto-depends.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/autostart/org.apache.felix.bundlerepository.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/autostart/org.apache.felix.eventadmin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/autostart/org.apache.felix.scr.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/autostart/osgi-cdi.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/autostart/osgi-ee-resources.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/autostart/osgi-ejb-container.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/autostart/osgi-javaee-base.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/autostart/osgi-jdbc.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/autostart/osgi-jpa.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/autostart/osgi-jta.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/autostart/osgi-web-container.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/backup.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/bean-validator.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/branding.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/class-model.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cli-optional.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cluster-admin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cluster-cli.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cluster-common.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cluster-ssh.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cmp-ejb-mapping.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cmp-enhancer.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cmp-generator-database.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cmp-internal-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cmp-model.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cmp-support-ejb.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cmp-support-sqlstore.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/cmp-utility.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/common-util.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/config-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/config-types.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/config.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/connectors-admin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/connectors-inbound-runtime.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/connectors-internal-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/connectors-runtime.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-cluster-plugin-help.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-cluster-plugin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-common-full-plugin-help.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-common-full-plugin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-common-help.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-common.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-community-branding-plugin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-corba-plugin-help.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-corba-plugin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-ejb-lite-plugin-help.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-ejb-lite-plugin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-ejb-plugin-help.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-ejb-plugin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-jca-plugin-help.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-jca-plugin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-jdbc-plugin-help.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-jdbc-plugin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-jms-plugin-help.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-jms-plugin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-jts-plugin-help.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-jts-plugin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-plugin-service.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-updatecenter-plugin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-web-plugin-help.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/console-web-plugin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/container-common.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/dataprovider.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/dbschema-repackaged.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/deployment-admin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/deployment-autodeploy.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/deployment-client.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/deployment-common.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/deployment-javaee-core.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/deployment-javaee-full.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/dol.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/ejb-container.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/ejb-internal-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/ejb.security.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/el-impl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/endorsed/javax.annotation.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/endorsed/jaxb-api-osgi.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/endorsed/webservices-api-osgi.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/flashlight-extra-jdk-packages.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/flashlight-framework.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/gf-client-module.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/gf-connectors-connector.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/gf-ejb-connector.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/gf-web-connector.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-corba-asm.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-corba-codegen.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-corba-csiv2-idl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-corba-internal-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-corba-newtimer.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-corba-omgapi.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-corba-orb.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-corba-orbgeneric.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-ee-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-extra-jre-packages.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-mbeanserver.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-naming.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-oracle-jdbc-driver-packages.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish-registration.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/glassfish.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/gmbal-api-only.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/gmbal.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/gms-adapter.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/gms-bootstrap.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/grizzly-comet.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/grizzly-config.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/grizzly-container.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/grizzly-framework-tests.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/grizzly-framework.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/grizzly-http-ajp.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/grizzly-http-server.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/grizzly-http-servlet.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/grizzly-http.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/grizzly-portunif.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/grizzly-rcm.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/grizzly-websockets.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/ha-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/ha-file-store.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/ha-shoal-cache-bootstrap.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/ha-shoal-cache-store.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/hk2-core.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/hk2.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/inmemory.jacc.provider.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/internal-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jackson-core-asl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jackson-jaxrs.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jackson-mapper-asl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jackson-xc.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jaspic.provider.framework.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javaee-kernel.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.ejb.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.enterprise.deploy.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.jms.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.mail.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.management.j2ee.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.persistence.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.resource.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.security.auth.message.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.security.jacc.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.servlet.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.servlet.jsp.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.servlet.jsp.jstl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/javax.transaction.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jaxb-osgi.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jaxrpc-api-osgi.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jdbc-admin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jersey-client.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jersey-core.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jersey-gf-server.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jersey-gf-statsproviders.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jersey-grizzly2.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jersey-json.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jersey-multipart.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jettison.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jms-admin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jms-core.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jmxremote_optional-repackaged.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jpa-connector.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jsf-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jsf-connector.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jsf-impl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jsftemplating.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jsp-impl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jspcaching-connector.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jsr109-impl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jstl-connector.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jstl-impl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jta.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/jts.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/kernel.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/launcher.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/ldapbp-repackaged.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/libpam4j-repackaged.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/libvirt.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/load-balancer-admin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/logging.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/management-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/metro-glue.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/mimepull.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/monitoring-core.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/orb-connector.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/orb-enabler.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/orb-iiop.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.apache.felix.configadmin.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.apache.felix.fileinstall.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.apache.felix.gogo.command.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.apache.felix.gogo.runtime.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.apache.felix.gogo.shell.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.apache.felix.shell.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.apache.felix.shell.remote.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.apache.felix.shell.tui.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.eclipse.persistence.antlr.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.eclipse.persistence.asm.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.eclipse.persistence.core.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.eclipse.persistence.jpa.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.eclipse.persistence.jpa.modelgen.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/org.eclipse.persistence.oracle.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/osgi-adapter.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/osgi-container.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/osgi-jpa-extension.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/osgi-main.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/osgi-resource-locator.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/persistence-common.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/pkg-client.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/registration-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/registration-impl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/rest-service.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/scattered-archive-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/schema2beans-repackaged.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/security.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/server-mgmt.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/shoal-cache.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/shoal-gms-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/shoal-gms-impl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/simple-glassfish-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/soap-tcp.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/ssl-impl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/stats77.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/transaction-internal-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/trilead-ssh2-repackaged.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/virt-core.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/war-util.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/web-cli.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/web-core.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/web-embed-api.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/web-embed-impl.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/web-glue.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/web-gui-plugin-common.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/web-ha.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/web-naming.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/websecurity.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/webservices-connector.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/webservices-extra-jdk-packages.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/webservices-osgi.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/webservices.security.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/weld-integration-fragment.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/weld-integration.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/weld-osgi-bundle.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/woodstox-osgi.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/glassfish/modules/work-management.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/javadb/lib/derby.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/javadb/lib/derbyclient.jar:/export/work/workspaces/gfv3/v3/distributions/glassfish/target/glassfish5/javadb/lib/derbynet.jar:/space/apps/apache-ant-1.7.1/lib/ant-launcher.jar:/space/apps/apache-ant-1.7.1/lib/ant-jai.jar:/space/apps/apache-ant-1.7.1/lib/ant-antlr.jar:/space/apps/apache-ant-1.7.1/lib/ant-starteam.jar:/space/apps/apache-ant-1.7.1/lib/ant-jdepend.jar:/space/apps/apache-ant-1.7.1/lib/ant-apache-oro.jar:/space/apps/apache-ant-1.7.1/lib/ant-trax.jar:/space/apps/apache-ant-1.7.1/lib/ant-apache-regexp.jar:/space/apps/apache-ant-1.7.1/lib/ant-jmf.jar:/space/apps/apache-ant-1.7.1/lib/ant-jsch.jar:/space/apps/apache-ant-1.7.1/lib/ant-apache-bsf.jar:/space/apps/apache-ant-1.7.1/lib/ant-netrexx.jar:/space/apps/apache-ant-1.7.1/lib/ant-swing.jar:/space/apps/apache-ant-1.7.1/lib/xercesImpl.jar:/space/apps/apache-ant-1.7.1/lib/ant-apache-bcel.jar:/space/apps/apache-ant-1.7.1/lib/ant-stylebook.jar:/space/apps/apache-ant-1.7.1/lib/ant-javamail.jar:/space/apps/apache-ant-1.7.1/lib/ant-junit.jar:/space/apps/apache-ant-1.7.1/lib/ant-commons-net.jar:/space/apps/apache-ant-1.7.1/lib/ant-commons-logging.jar:/space/apps/apache-ant-1.7.1/lib/ant-weblogic.jar:/space/apps/apache-ant-1.7.1/lib/ant-apache-log4j.jar:/space/apps/apache-ant-1.7.1/lib/ant.jar:/space/apps/apache-ant-1.7.1/lib/xml-apis.jar:/space/apps/apache-ant-1.7.1/lib/ant-nodeps.jar:/space/apps/apache-ant-1.7.1/lib/ant-testutil.jar:/space/apps/apache-ant-1.7.1/lib/ant-apache-resolver.jar:/space/apps/jdk1.6.0_22/lib/tools.jar'
+    [javac] '-sourcepath'
+    [javac] '/export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet'
+    [javac] '-g'
+    [javac] 
+    [javac] The ' characters around the executable and arguments are
+    [javac] not part of the command.
+    [javac] Files to be compiled:
+    [javac]     /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet/ClassUnavailableAtRuntime.java
+    [javac]     /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet/OptionalService.java
+    [javac]     /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet/TestBean.java
+    [javac]     /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet/TestLoggerProducer.java
+    [javac]     /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet/TestServlet.java
+  [antcall] Exiting /export/work/workspaces/gfv3/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/build.xml.
+   [delete] Deleting: /export/work/workspaces/gfv3/appserv-tests/build/module/classes/ClassUnavailableAtRuntime.class
+
+BUILD SUCCESSFUL
+Total time: 3 seconds
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/lib/slf4j-api-1.7.25.jar b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/lib/slf4j-api-1.7.25.jar
new file mode 100644
index 0000000..0143c09
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/lib/slf4j-api-1.7.25.jar
Binary files differ
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/lib/slf4j-simple-1.7.25.jar b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/lib/slf4j-simple-1.7.25.jar
new file mode 100644
index 0000000..a7260f3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/lib/slf4j-simple-1.7.25.jar
Binary files differ
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet/ClassUnavailableAtRuntime.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet/ClassUnavailableAtRuntime.java
new file mode 100644
index 0000000..3bae9d7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet/ClassUnavailableAtRuntime.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+//A Test parent Bean class that is available 
+//during compilation but is not packaged at runtime
+public class ClassUnavailableAtRuntime extends TestService {
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet/OptionalService.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet/OptionalService.java
new file mode 100644
index 0000000..1e123a6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet/OptionalService.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+//An optional service that extends ClassUnavailableAtRuntime
+//This optional service bean is not used
+//and the superclass of this bean is unavailable at runtime
+
+public class OptionalService extends ClassUnavailableAtRuntime{
+    public OptionalService(){
+        System.out.println("OptionalService instantiated");
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet/TestBean.java
new file mode 100644
index 0000000..6d059e2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet/TestBean.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+//Simple TestBean to test CDI. 
+//This bean implements Serializable as it needs to be placed into a Stateful Bean
+public class TestBean
+{}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet/TestLoggerProducer.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet/TestLoggerProducer.java
new file mode 100644
index 0000000..9c2e72e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet/TestLoggerProducer.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 javax.enterprise.inject.Produces;
+
+
+public class TestLoggerProducer {
+    @Produces
+    public org.jboss.logging.Logger getLogger(){
+        org.jboss.logging.Logger l = org.jboss.logging.Logger.getLogger(TestLoggerProducer.class);
+        System.out.println("getLogger:: " + l);
+        return l;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet/TestService.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet/TestService.java
new file mode 100644
index 0000000..3a2ccc2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet/TestService.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+//A dummy Parent class that is used to test for Bean registration/availability
+//in TestServlet
+public class TestService {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet/TestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet/TestServlet.java
new file mode 100644
index 0000000..7e438a7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/optional-unbundled-beans/servlet/TestServlet.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.IOException;
+import java.io.PrintWriter;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.inject.Inject;
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.util.AnnotationLiteral;
+import javax.naming.InitialContext;
+
+@WebServlet(name="mytest",
+        urlPatterns={"/myurl"},
+        initParams={ @WebInitParam(name="n1", value="v1"), @WebInitParam(name="n2", value="v2") } )
+public class TestServlet extends HttpServlet {
+    @Inject TestBean tb;
+    @Inject BeanManager bm;
+    BeanManager bm1;
+    
+    @Inject 
+    private transient org.jboss.logging.Logger log;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0. ");
+        String msg = "n1=" + getInitParameter("n1") +
+            ", n2=" + getInitParameter("n2");
+        if (tb == null) msg += "Bean injection into Servlet failed";
+        if (bm == null) msg += "BeanManager Injection via @Inject failed";
+        try {
+            bm1 = (BeanManager)((new InitialContext()).lookup("java:comp/BeanManager"));
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            msg += "BeanManager Injection via component environment lookup failed";
+        }
+        if (bm1 == null) msg += "BeanManager Injection via component environment lookup failed";
+        
+        //Ensure that the OptionalService Bean is not registered.
+        Set<Bean<?>> optionalServiceBeans = bm.getBeans(TestService.class,new AnnotationLiteral<Any>() {});
+        boolean optionalServiceAvailable = false;
+        for (Iterator<Bean<?>> iterator = optionalServiceBeans.iterator(); iterator
+                .hasNext();) {
+            Bean<?> b =  iterator.next();
+            System.out.println("-----" + b + " " + b.getClass() + " " + b.getBeanClass().getCanonicalName());
+            if (b.getBeanClass().getCanonicalName().contains("Optional")) optionalServiceAvailable = true; 
+        }
+        
+        //The OptionalService Bean was not added to the WAR and hence must not available through the BM.
+        if (optionalServiceAvailable) msg += "OptionalServiceBean is registered, though it was not included in the WAR";
+        
+        System.out.println("BeanManager is " + bm);
+        System.out.println("BeanManager via lookup is " + bm1);
+        writer.write("initParams: " + msg + "\n");
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/build.properties b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/build.properties
new file mode 100644
index 0000000..e8ca782
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/build.properties
@@ -0,0 +1,28 @@
+<!--
+
+    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-full-ear"/>
+<property name="appname" value="${module}"/>         
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="se.client" value="com.acme.Client"/>
+<property name="app.type" value="application"/>
+<property name="sun-application.xml" value="descriptor/sun-application.xml"/>
+<property name="application.xml" value="descriptor/application.xml"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
+<property name="contextroot" value="${module}"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/build.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/build.xml
new file mode 100644
index 0000000..1694525
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/build.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="cdi-full-ear-App" default="usage" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+
+    <target name="all" depends="clean,build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+      <antcall  target="clean-common"/>
+    </target>
+ 
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="war"/>
+        </antcall>
+        <antcall target="webclient-war-common">
+          <param name="hasWebclient" value="true"/>
+        </antcall>
+        <antcall target="compile-common">
+            <param name="src" value="ejb"/>
+        </antcall>
+
+	<javac classpath="${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/lib/gf-client.jar:${build.classes.dir}:${env.APS_HOME}/lib/reporter.jar" srcdir="client" destdir="${build.classes.dir}" debug="on" failonerror="true">
+          <compilerarg line="-endorseddirs ${env.S1AS_HOME}/modules/endorsed"/>
+	 
+        </javac>
+<!--
+        <antcall target="compile-common">
+            <param name="src" value="client"/>
+        </antcall>
+-->
+    </target>
+
+    <target name="build" depends="compile">
+        <mkdir dir="${assemble.dir}"/>
+        <antcall target="ejb-jar-common">
+          <param name="ejbjar.classes" value="**/Foo.class,**/Hello.class,**/HelloRemote.class,**/Singleton*.class,**/HelloStateless.class,**/HelloSingleton.class,**/FooManagedBean.class,**/BarManagedBean.class, **/FooBarManagedBean.class, **/ManagedSuper.class"/>
+        </antcall>
+        <antcall target="ear-common"/>
+    </target> 
+    
+    <target name="deploy" 
+            depends="init-common">
+        <antcall target="deploy-common"/>
+    </target>
+
+    <target name="run" depends="init-common">
+       <java  fork="on" 
+              failonerror="true"
+              classpath="${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/lib/gf-client.jar:${build.classes.dir}:${env.APS_HOME}/lib/reporter.jar"
+              classname="${se.client}">
+           <arg line="${contextroot}"/>
+           <arg line="${http.host}"/>
+           <arg line="${http.port}"/>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/client/Client.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/client/Client.java
new file mode 100644
index 0000000..7517908
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/client/Client.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+
+import java.net.*;
+import java.io.*;
+import java.util.*;
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import javax.naming.InitialContext;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+public class Client {
+
+    private static SimpleReporterAdapter stat = 
+        new SimpleReporterAdapter("appserv-tests");
+
+    private static String appName;
+    private String host;
+    private String port;
+
+    @Resource(lookup="java:app/env/value1")
+    private static Integer appLevelViaLookup;
+
+    public static void main(String args[]) {
+	appName = args[0];
+	stat.addDescription(appName);
+	Client client = new Client(args);       
+        client.doTest();	
+        stat.printSummary(appName + "ID");
+	System.out.println("appLevelViaLookup = '" +
+			   appLevelViaLookup + "'");
+    }
+
+    public Client(String[] args) {
+	host = args[1];
+        port = args[2];
+    }
+
+   
+
+    public void doTest() {
+
+	try {
+
+	    String url = "http://" + host + ":" + port + 
+                "/" + appName + "/HelloServlet";
+
+            System.out.println("invoking webclient servlet at " + 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.out.println("<response>:"+ line);
+            if (line.trim().length() > 0) {
+                stat.addStatus("local main", stat.FAIL);
+                return;
+            }
+        }
+	    if(code != 200) {
+            stat.addStatus("local main", stat.FAIL);
+            return;
+	    }
+	    stat.addStatus("local main", stat.PASS);
+
+	} catch(Exception e) {
+	    stat.addStatus("local main", stat.FAIL);
+	    e.printStackTrace();
+	}
+    }
+
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/descriptor/application.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/descriptor/application.xml
new file mode 100644
index 0000000..d9378e7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/descriptor/application.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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">
+  <display-name>ejb-ejb30-hello-session3App</display-name>
+  <module>
+    <ejb>cdi-full-ear-ejb.jar</ejb>
+  </module>
+  <module>
+    <web>
+      <web-uri>cdi-full-ear-web.war</web-uri>
+      <context-root>cdi-full-ear</context-root>
+    </web>
+  </module>
+  <env-entry>
+     <env-entry-name>java:app/env/value1</env-entry-name>
+     <env-entry-type>java.lang.Integer</env-entry-type>
+     <env-entry-value>18338</env-entry-value>
+  </env-entry>
+  <env-entry>
+    <env-entry-name>java:app/env/myString</env-entry-name>
+    <env-entry-type>java.lang.String</env-entry-type>
+    <env-entry-value>myString</env-entry-value>
+  </env-entry>
+</application>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/BarManagedBean.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/BarManagedBean.java
new file mode 100644
index 0000000..473e12b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/BarManagedBean.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import javax.annotation.*;
+import javax.ejb.EJB;
+import javax.annotation.Resource;
+import javax.sql.DataSource;
+
+@ManagedBean
+public class BarManagedBean {
+
+    @EJB Hello s;
+    @Resource(name="jdbc/__default") DataSource ds;
+
+    @PostConstruct
+    private void init() {
+	System.out.println("In BarManagedBean::init() " + this);
+    }
+
+   public void bar() {
+       System.out.println("In BarManagedBean::bar() ");
+    }
+
+
+    @PreDestroy
+    private void destroy() {
+	System.out.println("In BarManagedBean::destroy() ");
+    }
+
+    public String toString() {
+	return "BarManagedBean this = " + super.toString() + 
+	    " s = " + s + " , ds = " + ds;
+
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/Foo.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/Foo.java
new file mode 100644
index 0000000..658d9d0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/Foo.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+
+public interface Foo {
+
+    public void foo();
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/FooBarManagedBean.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/FooBarManagedBean.java
new file mode 100644
index 0000000..e45f3ee
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/FooBarManagedBean.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import javax.annotation.*;
+
+@ManagedBean("foobarmanagedbean")
+public class FooBarManagedBean {
+
+    @PostConstruct
+    private void init() {
+	System.out.println("In FooBarManagedBean::init() " + this);
+    }
+    
+    @PreDestroy
+    private void destroy() {
+	System.out.println("In FooBarManagedBean::destroy() ");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/FooManagedBean.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/FooManagedBean.java
new file mode 100644
index 0000000..4fcb3c4
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/FooManagedBean.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import javax.annotation.*;
+
+import javax.ejb.EJB;
+import javax.annotation.Resource;
+import org.omg.CORBA.ORB;
+import javax.persistence.PersistenceContext;
+import javax.persistence.EntityManager;
+
+@ManagedBean("somemanagedbean")
+public class FooManagedBean extends ManagedSuper implements Foo {
+
+    @EJB HelloRemote s;
+    @Resource ORB orb;
+    @Resource BarManagedBean bmb;
+    @PersistenceContext EntityManager em;
+
+    @PostConstruct
+    private void init() {
+	System.out.println("In FooManagedBean::init() " + this);
+    }
+    
+
+    public String getName() {
+	return "somemanagedbean";
+    }
+
+    public void foo() {
+	System.out.println("In FooManagedBean::foo() ");
+	bmb.bar();
+    }
+
+    public Object getThis() {
+	return this;
+    }
+
+    @PreDestroy
+    private void destroy() {
+	System.out.println("In FooManagedBean::destroy() ");
+    }
+
+
+    public String toString() {
+	return "FooManagedBean this = " + super.toString() + 
+			   " s = " + s + " , orb = " + orb + 
+	    " , bmb = " + bmb + " , em = " + em;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/Hello.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/Hello.java
new file mode 100644
index 0000000..2ad0681
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/Hello.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+
+
+public interface Hello {
+
+    public String hello();
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/HelloRemote.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/HelloRemote.java
new file mode 100644
index 0000000..fc138ad
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/HelloRemote.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import javax.ejb.Remote;
+
+@Remote
+public interface HelloRemote {
+
+    public String hello();
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/HelloSingleton.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/HelloSingleton.java
new file mode 100644
index 0000000..014cdd7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/HelloSingleton.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import javax.ejb.*;
+import javax.annotation.*;
+
+import org.omg.CORBA.ORB;
+
+
+@Singleton
+@Startup
+    @EJB(name="java:app/env/AS2", beanName="HelloStateless", beanInterface=HelloRemote.class)
+    @DependsOn("Singleton2")
+public class HelloSingleton implements Hello {
+
+    @Resource SessionContext sessionCtx;
+
+    @Resource(mappedName="java:module/foobarmanagedbean")
+    private FooBarManagedBean fbmb;
+
+    @Resource
+    private FooBarManagedBean fbmb2;
+
+    @Resource(name="java:module/env/MORB2")
+    private ORB orb;
+
+    @Resource 
+    private FooManagedBean foo;
+    
+    @Resource(name="foo2ref", mappedName="java:module/somemanagedbean")
+    private FooManagedBean foo2;
+
+    @Resource(name="foo3ref", mappedName="java:module/somemanagedbean")
+    private Foo foo3;
+
+    private FooManagedBean foo4;
+    private FooManagedBean foo5;
+    private Foo foo6;
+    private FooManagedBean foo7;
+    private Foo foo8;
+
+    @Resource(name = "java:app/env/myString")
+    protected String myString;
+
+    @EJB(name="java:app/env/appLevelEjbRef")
+    private Hello hello;
+    
+    String appName;
+    String moduleName;
+
+    @PostConstruct    
+    private void init() {
+	System.out.println("HelloSingleton::init()");
+
+	System.out.println("myString = '" + myString + "'");
+	if( (myString == null) || !(myString.equals("myString") ) ) {
+	    throw new RuntimeException("Invalid value " + myString + " for myString");
+	}
+
+	appName = (String) sessionCtx.lookup("java:app/AppName");
+	moduleName = (String) sessionCtx.lookup("java:module/ModuleName");
+
+	ORB orb1 = (ORB) sessionCtx.lookup("java:module/MORB1");
+	ORB orb2 = (ORB) sessionCtx.lookup("java:module/env/MORB2");
+
+	System.out.println("AppName = " + appName);
+	System.out.println("ModuleName = " + moduleName);
+
+	foo4 = (FooManagedBean) sessionCtx.lookup("java:module/somemanagedbean");
+	foo5 = (FooManagedBean) sessionCtx.lookup("java:app/" + moduleName +
+						  "/somemanagedbean");
+	foo6 = (Foo) sessionCtx.lookup("java:app/" + moduleName +
+						  "/somemanagedbean");
+	foo7 = (FooManagedBean) sessionCtx.lookup("java:comp/env/foo2ref");
+	foo8 = (Foo) sessionCtx.lookup("java:comp/env/foo3ref");
+    }
+
+    public String hello() {
+	
+	System.out.println("HelloSingleton::hello()");
+
+
+	foo.foo();
+	foo2.foo();
+	foo3.foo();
+
+	foo4.foo();
+	foo5.foo();
+	foo6.foo();
+	foo7.foo();
+      	foo8.foo();
+
+	return "hello, world!\n";
+    }
+
+
+    @PreDestroy
+    private void destroy() {
+	System.out.println("HelloSingleton::destroy()");
+    }
+
+}
+
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/HelloStateless.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/HelloStateless.java
new file mode 100644
index 0000000..ecd8f11
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/HelloStateless.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import javax.ejb.*;
+import javax.annotation.*;
+
+import org.omg.CORBA.ORB;
+
+@Stateless
+    @EJB(name="java:global/GS1", beanName="HelloSingleton", beanInterface=Hello.class)
+public class HelloStateless implements HelloRemote {
+
+    @EJB(name="java:app/env/AS1", beanName="HelloSingleton")
+    private Hello h;
+
+    @Resource(name="java:module/MORB1")
+    private ORB orb;
+    
+    @EJB(name="lookupref1", lookup="java:app/env/AS1")
+    private Hello lookupref1;
+
+    @EJB(name="lookupref2", lookup="java:global/GS1")
+    private Hello lookupref2;
+
+    @EJB(name="lookupref3", lookup="java:module/HelloStateless!com.acme.HelloRemote")
+    private HelloRemote lookupref3;
+
+    // declare component-level dependency using fully-qualified
+    // java:comp/env form.  
+    @Resource(name="java:comp/env/foo") SessionContext sessionCtx;
+
+    @PostConstruct 
+    private void init() {
+	System.out.println("HelloStateless::init()");
+    }
+
+    public String hello() {
+	System.out.println("In HelloStateless::hello()");
+
+	String appName = (String) sessionCtx.lookup("java:app/AppName");
+	String moduleName = (String) sessionCtx.lookup("java:module/ModuleName");
+	System.out.println("AppName = " + appName);
+	System.out.println("ModuleName = " + moduleName);
+
+	ORB orb1 = (ORB) sessionCtx.lookup("java:module/MORB1");
+	ORB orb2 = (ORB) sessionCtx.lookup("java:module/env/MORB2");
+
+	Hello s1 = (Hello) sessionCtx.lookup("java:global/" +
+					   appName + "/" +
+					   moduleName + "/" +
+					   "HelloSingleton");
+
+	Hello s2 = (Hello) sessionCtx.lookup("java:app/" +
+							 moduleName + "/" +
+							 "HelloSingleton");
+
+	// Rely on default to resolve "java:comp/env/ declared resource
+	SessionContext sc1 = (SessionContext)
+	    sessionCtx.lookup("foo");
+
+	SessionContext sc2 = (SessionContext)
+	    sc1.lookup("java:comp/env/foo");
+
+	Integer envEntry = (Integer)
+	    sc1.lookup("java:app/env/value1");
+	System.out.println("java:ap/env/value1 = " + envEntry);
+
+	return "hello, world!\n";
+    }
+
+    @PreDestroy
+    private void destroy() {
+	System.out.println("HelloStateless::destroy()");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/ManagedSuper.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/ManagedSuper.java
new file mode 100644
index 0000000..c52c898
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/ManagedSuper.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import javax.annotation.*;
+import javax.ejb.EJB;
+import javax.annotation.Resource;
+import javax.sql.DataSource;
+
+public class ManagedSuper {
+
+    @EJB Hello s;
+    @Resource(name="jdbc/__default") DataSource ds;
+
+    @PostConstruct
+    private void init() {
+	System.out.println("In ManagedSuper::init() " + this);
+    }
+
+    @PreDestroy
+    private void destroy() {
+	System.out.println("In ManagedSuper::destroy() ");
+    }
+
+    public String toString() {
+	return "ManagedSuper this = " + super.toString() + 
+	    " s = " + s + " , ds = " + ds;
+
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/Singleton2.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/Singleton2.java
new file mode 100644
index 0000000..18dbb03
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/Singleton2.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import javax.ejb.*;
+import javax.annotation.*;
+
+
+@Singleton
+@DependsOn("cdi-full-ear-ejb.jar#Singleton3")
+public class Singleton2 {
+
+    @PostConstruct
+    public void init() {
+        System.out.println("In SingletonBean2::init()");
+    }
+    
+    @PreDestroy
+    public void destroy() {
+        System.out.println("In SingletonBean2::destroy()");
+    }
+
+
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/Singleton3.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/Singleton3.java
new file mode 100644
index 0000000..364046b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/Singleton3.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import javax.ejb.*;
+import javax.annotation.*;
+
+
+@Singleton
+@DependsOn("./cdi-full-ear-ejb.jar#Singleton4")
+public class Singleton3 {
+
+    @PostConstruct
+    public void init() {
+        System.out.println("In SingletonBean3::init()");
+    }
+    
+    @PreDestroy
+    public void destroy() {
+        System.out.println("In SingletonBean3::destroy()");
+    }
+
+
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/Singleton4.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/Singleton4.java
new file mode 100644
index 0000000..9d3ff4a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/ejb/Singleton4.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import javax.ejb.*;
+import javax.annotation.*;
+
+
+@Singleton
+public class Singleton4 {
+
+    @PostConstruct
+    public void init() {
+        System.out.println("In SingletonBean4::init()");
+    }
+    
+    @PreDestroy
+    public void destroy() {
+        System.out.println("In SingletonBean4::destroy()");
+    }
+
+
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/manifest.mf b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/manifest.mf
new file mode 100644
index 0000000..328e8e5
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/manifest.mf
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+X-COMMENT: Main-Class will be added automatically by build
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/war/Foo.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/war/Foo.java
new file mode 100644
index 0000000..658d9d0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/war/Foo.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+
+public interface Foo {
+
+    public void foo();
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/war/Foo2ManagedBean.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/war/Foo2ManagedBean.java
new file mode 100644
index 0000000..e3b9464
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/war/Foo2ManagedBean.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import javax.annotation.*;
+
+import javax.ejb.EJB;
+import javax.annotation.Resource;
+import org.omg.CORBA.ORB;
+import javax.persistence.PersistenceContext;
+import javax.persistence.EntityManager;
+
+@ManagedBean("somemanagedbean")
+public class Foo2ManagedBean {
+
+    @EJB HelloRemote s;
+    @Resource ORB orb;
+    @PersistenceContext EntityManager em;
+
+    @PostConstruct
+    private void init() {
+	System.out.println("In Foo2ManagedBean::init() " + this);
+    }
+    
+    public void foo() {
+	System.out.println("In Foo2ManagedBean::foo() ");
+    }
+
+    public Object getThis() {
+	return this;
+    }
+
+    @PreDestroy
+    private void destroy() {
+	System.out.println("In Foo2ManagedBean::destroy() ");
+    }
+
+
+    public String toString() {
+	return "Foo2ManagedBean this = " + 
+			   " s = " + s + " , orb = " + orb + 
+	    " , em = " + em;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/war/FooBarManagedBean.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/war/FooBarManagedBean.java
new file mode 100644
index 0000000..e45f3ee
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/war/FooBarManagedBean.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import javax.annotation.*;
+
+@ManagedBean("foobarmanagedbean")
+public class FooBarManagedBean {
+
+    @PostConstruct
+    private void init() {
+	System.out.println("In FooBarManagedBean::init() " + this);
+    }
+    
+    @PreDestroy
+    private void destroy() {
+	System.out.println("In FooBarManagedBean::destroy() ");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/war/Hello.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/war/Hello.java
new file mode 100644
index 0000000..d08c598
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/war/Hello.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import javax.ejb.Remote;
+
+public interface Hello {
+
+    public String hello();
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/war/HelloRemote.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/war/HelloRemote.java
new file mode 100644
index 0000000..fc138ad
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/war/HelloRemote.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import javax.ejb.Remote;
+
+@Remote
+public interface HelloRemote {
+
+    public String hello();
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/war/HelloServlet.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/war/HelloServlet.java
new file mode 100644
index 0000000..171d1f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ear/war/HelloServlet.java
@@ -0,0 +1,194 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import javax.ejb.EJB;
+import java.io.IOException;
+import java.io.PrintWriter;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.annotation.WebServlet;
+import javax.annotation.Resource;
+import javax.naming.*;
+
+@WebServlet(urlPatterns = "/HelloServlet", loadOnStartup = 1)
+@EJB(name = "java:module/m1", beanName = "HelloSingleton", beanInterface = Hello.class)
+public class HelloServlet extends HttpServlet {
+
+    @Resource(mappedName = "java:module/foobarmanagedbean")
+    private FooBarManagedBean fbmb;
+    @Resource
+    private FooBarManagedBean fbmb2;
+
+    @EJB(name = "java:module/env/m2")
+    private Hello m1;
+    @EJB(name = "java:app/a1")
+    private HelloRemote a1;
+    @EJB(name = "java:app/env/a2")
+    private HelloRemote a2;
+    @Resource(name = "java:app/env/myString")
+    protected String myString;
+    private Hello singleton1;
+    private Hello singleton2;
+    private Hello singleton3;
+    private Hello singleton4;
+    private Hello singleton5;
+    private HelloRemote stateless1;
+    private HelloRemote stateless2;
+
+    @Resource
+    private Foo2ManagedBean foo;
+    @Resource(name = "foo2ref", mappedName = "java:module/somemanagedbean")
+    private Foo2ManagedBean foo2;
+    @Resource(name = "foo3ref", mappedName = "java:app/cdi-full-ear-ejb/somemanagedbean")
+    private Foo foo3;
+    private Foo2ManagedBean foo4;
+    private Foo2ManagedBean foo5;
+    private Foo foo6;
+    private Foo2ManagedBean foo7;
+    private Foo foo8;
+
+    private String msg = "";
+
+    @Override
+    public void init(ServletConfig config) throws ServletException {
+        super.init(config);
+
+        System.out.println("In HelloServlet::init");
+        System.out.println("myString = '" + myString + "'");
+        if ((myString == null) || !(myString.equals("myString"))) {
+            msg += "@Resource lookup of myString failed";
+            throw new RuntimeException("Invalid value " + myString + " for myString");
+        }
+
+    }
+
+    @Override
+    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+            throws ServletException, IOException {
+        System.out.println("In HelloServlet::doGet");
+        resp.setContentType("text/html");
+        checkForNull(foo, "@Resource lookup of ManagedBean failed");
+        checkForNull(foo2, "@Resource lookup of module-level ManagedBean failed");
+        checkForNull(foo3, "@Resource lookup of app-level ManagedBean through a super-interface failed");
+
+        PrintWriter out = resp.getWriter();
+        try {
+            InitialContext ic = new InitialContext();
+            String appName = (String) ic.lookup("java:app/AppName");
+            String moduleName = (String) ic.lookup("java:module/ModuleName");
+            checkForNull(appName, "AppName lookup returned null");
+            checkForNull(moduleName, "ModuleName lookup returned null");
+
+            // lookup via intermediate context
+            Context appCtx = (Context) ic.lookup("java:app");
+            Context appCtxEnv = (Context) appCtx.lookup("env");
+            stateless2 = (HelloRemote) appCtxEnv.lookup("AS2");
+            checkForNull(stateless2, "lookup of stateless EJB via java:app in intermediate context failed");
+            NamingEnumeration<Binding> bindings = appCtxEnv.listBindings("");
+            System.out.println("java:app/env/ bindings ");
+            while (bindings.hasMore()) {
+                System.out.println("binding : " + bindings.next().getName());
+            }
+
+
+            foo4 = (Foo2ManagedBean) ic.lookup("java:module/somemanagedbean");
+            checkForNull(foo4, "programmatic lookup of module-level managedbean failed");
+            foo5 = (Foo2ManagedBean) ic.lookup("java:app/" + moduleName
+                    + "/somemanagedbean");
+            checkForNull(foo5, "programmatic lookup of module-level managedbean through application context failed");
+            foo6 = (Foo) ic.lookup("java:app/cdi-full-ear-ejb/somemanagedbean");
+            checkForNull(foo6, "programmatic lookup of application-level managedbean failed");
+            foo7 = (Foo2ManagedBean) ic.lookup("java:comp/env/foo2ref");
+            checkForNull(foo7, "programmatic lookup of module-level managedbean through a component reference failed");
+            foo8 = (Foo) ic.lookup("java:comp/env/foo3ref");
+            checkForNull(foo8, "programmatic lookup of module-level managedbean through a component reference failed");
+
+            singleton1 = (Hello) ic.lookup("java:module/m1");
+            checkForNull(singleton1, "programmatic lookup of module-level singleton EJB failed");
+
+            // standard java:app name for ejb
+            singleton2 = (Hello) ic.lookup("java:app/cdi-full-ear-ejb/HelloSingleton");
+            checkForNull(singleton2, "programmatic lookup of module-level singleton EJB through app reference failed");
+
+            singleton3 = (Hello) ic.lookup("java:global/" + appName + "/cdi-full-ear-ejb/HelloSingleton");
+            checkForNull(singleton3, "programmatic lookup of module-level singleton EJB through global reference failed");
+
+            // lookup some java:app defined by ejb-jar
+            singleton4 = (Hello) ic.lookup("java:app/env/AS1");
+            checkForNull(singleton4, "programmatic lookup of module-level singleton EJB through EJB name failed");
+            // global dependency
+            singleton5 = (Hello) ic.lookup("java:global/GS1");
+            checkForNull(singleton5, "programmatic lookup of singleton EJB through global name failed");
+
+            stateless1 = (HelloRemote) ic.lookup("java:app/env/AS2");
+            checkForNull(stateless1, "programmatic lookup of app-level stateless EJB failed");
+
+            System.out.println("My AppName = "
+                    + ic.lookup("java:app/AppName"));
+
+            System.out.println("My ModuleName = "
+                    + ic.lookup("java:module/ModuleName"));
+
+
+
+            try {
+                org.omg.CORBA.ORB orb = (org.omg.CORBA.ORB) ic.lookup("java:module/MORB1");
+                msg += " Not getting naming exception when we try to see ejb-jar module-level dependency";
+                throw new RuntimeException("Should have gotten naming exception");
+            } catch (NamingException ne) {
+                System.out.println("Successfully was *not* able to see ejb-jar module-level dependency");
+            }
+
+        } catch (Exception e) {
+            msg += "Exception occurred during test Exception: " + e.getMessage();
+            e.printStackTrace();
+        }
+
+        foo.foo();
+        foo2.foo();
+        foo3.foo();
+
+        foo4.foo();
+        foo5.foo();
+        foo6.foo();
+        foo7.foo();
+        foo8.foo();
+
+        m1.hello();
+        a1.hello();
+        a2.hello();
+        singleton1.hello();
+        singleton2.hello();
+        singleton3.hello();
+        singleton4.hello();
+        singleton5.hello();
+
+        stateless1.hello();
+        stateless2.hello();
+
+        out.println(msg);
+
+    }
+
+    protected void checkForNull(Object o, String errorMessage){
+        if (o == null) msg += " " + errorMessage;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/build.properties b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/build.properties
new file mode 100644
index 0000000..e0533ab
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/build.properties
@@ -0,0 +1,38 @@
+<!--
+
+    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="simple-ejb-cdi"/>
+<property name="appname" value="${module}"/>         
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="simple.client" value="com.sun.s1asdev.ejb.ejb30.hello.session.client.StandaloneClient"/>
+<property name="simple.client2" value="com.sun.s1asdev.ejb.ejb30.hello.session.client.StandaloneClient2"/>
+<property name="test.client" 
+	value="Client"/>
+<property name="application.xml" value="descriptor/application.xml"/>
+<property name="sun-application.xml" value="descriptor/sun-application.xml"/>
+<property name="ejb-jar.xml" value="descriptor/ejb-jar.xml"/>
+<property name="sun-ejb-jar.xml" value="descriptor/sun-ejb-jar.xml"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
+<property name="application-client.xml" 
+	value="descriptor/application-client.xml"/>
+<property name="sun-application-client.xml" 
+	value="descriptor/sun-application-client.xml"/>
+<property name="appclientjar.files" value="${build.classes.dir}"/>         
+<property name="appclient.jar" value="${assemble.dir}/${appname}-client.jar"/>
+<property name="app.type" value="application"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/build.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/build.xml
new file mode 100644
index 0000000..2dc8d89
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/build.xml
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="simple-ejb-cdi" default="usage" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+      <antcall  target="clean-common"/>
+      <delete file="client/Client.java"/>
+    </target>
+ 
+    <target name="compile" depends="clean">
+        <copy file="client/Client.java.token" tofile="client/Client.java"/>
+        <replace file="client/Client.java"
+          token="@ORB_PORT@" value="${orb.port}"/>
+
+        <antcall target="compile-common">
+            <param name="src" value="ejb"/>
+        </antcall>
+        <antcall target="compile-common">
+            <param name="src" value="client"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <antcall target="build-ear-common">
+            <param name="ejbjar.classes" 
+              value="**/Sful*.class,**/Sless*.class, **/TestBean.class"/>
+            <param name="appclientjar.classes" 
+              value="**/Client.class,**/Sful.class,**/Sless.class"/>
+        </antcall>
+    </target> 
+    
+    <target name="deploy" 
+            depends="init-common">
+        <antcall target="deploy-common"/>
+    </target>
+
+    <target name="run" depends="init-common">
+        <antcall target="runclient-common"/>
+<!--
+        <antcall target="run_standaloneclient"/>
+        <antcall target="run_standaloneclient2"/>
+-->
+    </target>
+
+ 
+    <target name="run_standaloneclient" depends="init-common">
+       <java  fork="on" 
+              failonerror="true"
+              classpath="${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/lib/gf-client.jar:${build.classes.dir}:${env.APS_HOME}/lib/reporter.jar"
+              classname="${simple.client}">
+        <sysproperty key="org.omg.CORBA.ORBInitialPort" value="${orb.port}"/>
+        </java>
+    </target>
+
+    <target name="run_standaloneclient2" depends="init-common">
+       <java  fork="on" 
+              failonerror="true"
+              classpath="${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/lib/gf-client.jar:${build.classes.dir}:${env.APS_HOME}/lib/reporter.jar"
+              classname="${simple.client2}">
+              <jvmarg
+                   value="-Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory"/>
+              <jvmarg
+                   value="-Djava.naming.provider.url=iiop://localhost:${orb.port}"/>
+              <jvmarg
+                   value="-Dorg.omg.CORBA.ORBInitialPort=${orb.port}"/>
+
+        </java>
+    </target>
+
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/client/Client.java.token b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/client/Client.java.token
new file mode 100644
index 0000000..39f9798
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/client/Client.java.token
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2008, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.cdi.ejb.hello.session.client;
+
+
+import java.io.*;
+import java.util.*;
+import javax.ejb.EJB;
+import javax.naming.InitialContext;
+import com.sun.s1asdev.cdi.ejb.hello.session.*;
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+public class Client {
+
+    private static SimpleReporterAdapter stat = 
+        new SimpleReporterAdapter("appserv-tests");
+
+    public static void main (String[] args) {
+
+        stat.addDescription("simple-ejb-cdi");
+        Client client = new Client(args);
+        client.doTest();
+        stat.printSummary("simple-ejb-cdi");
+    }  
+    
+    public Client (String[] args) {
+    }
+
+    private static @EJB Sful sful;
+    
+    private static @EJB(mappedName="com.sun.s1asdev.cdi.ejb.hello.session.Sless") Sless sless;
+
+    //
+    // NOTE: Token @ORB_PORT@ will be replaced in @EJB annotations below 
+    // with the value of the port from config.properties during the build
+    //
+    private static @EJB(mappedName="corbaname:iiop:localhost:@ORB_PORT@#com.sun.s1asdev.cdi.ejb.hello.session.Sless") Sless sless2;
+
+    private static @EJB(mappedName="corbaname:iiop:localhost:@ORB_PORT@#java:global/simple-ejb-cdiApp/simple-ejb-cdi-ejb/SlessEJB!com.sun.s1asdev.cdi.ejb.hello.session.Sless") Sless sless3;
+
+    private static @EJB(mappedName="corbaname:iiop:localhost:@ORB_PORT@#java:global/simple-ejb-cdiApp/simple-ejb-cdi-ejb/SlessEJB") Sless sless4;
+
+    public void doTest() {
+
+        try {
+
+      System.out.println("Creating InitialContext()");
+	    InitialContext ic = new InitialContext();
+	    org.omg.CORBA.ORB orb = (org.omg.CORBA.ORB) ic.lookup("java:comp/ORB"); 
+	    Sful sful = (Sful) ic.lookup("com.sun.s1asdev.cdi.ejb.hello.session.Sful");
+	    Sless sless = (Sless) ic.lookup("com.sun.s1asdev.cdi.ejb.hello.session.Sless");
+
+            String response = null;
+
+            response = sful.hello();
+            testResponse("invoking stateful", response);
+
+            response = sless.hello();
+            testResponse("invoking stateless", response);
+
+	        response = sless2.hello();
+            testResponse("invoking stateless2", response);
+
+            System.out.println("ensuring that sless1 and sless2 are not equal");
+            if( !sless.equals(sless2) ) {
+                stat.addStatus("ensuring that sless1 and sless2 are not equal" , stat.FAIL);
+                throw new Exception("invalid equality checks on same " +
+                                    "sless session beans");
+            }
+
+
+	        response = sless3.hello();
+            testResponse("invoking stateless3", response);
+	        response = sless4.hello();
+            testResponse("invoking stateless4", response);
+
+            System.out.println("test complete");
+
+            stat.addStatus("local main", stat.PASS);
+
+        } catch(Exception e) {
+            e.printStackTrace();
+            stat.addStatus("local main" , stat.FAIL);
+        }
+        
+    	return;
+    }
+
+    private void testResponse(String testDescription, String response){
+        if(response.equals("hello")) 
+            stat.addStatus(testDescription, stat.PASS);
+        else
+            stat.addStatus(testDescription, stat.FAIL);
+    }
+
+}
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/client/MANIFEST.MF b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/client/MANIFEST.MF
new file mode 100644
index 0000000..0b2b85f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/client/MANIFEST.MF
@@ -0,0 +1,4 @@
+Manifest-Version: 1.0
+Created-By: 1.4.0-beta3 (Sun Microsystems Inc.)
+Main-Class: com.sun.s1asdev.cdi.ejb.hello.session.client.Client
+Class-Path: reporter.jar
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/ejb/Sful.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/ejb/Sful.java
new file mode 100644
index 0000000..bd40dc3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/ejb/Sful.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.cdi.ejb.hello.session;
+
+import javax.ejb.Remote;
+	
+@Remote
+public interface Sful
+{
+    public String hello();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/ejb/SfulEJB.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/ejb/SfulEJB.java
new file mode 100644
index 0000000..ded6d50
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/ejb/SfulEJB.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.cdi.ejb.hello.session;
+
+import javax.ejb.Stateful;
+import javax.inject.Inject;
+
+@Stateful
+public class SfulEJB implements Sful
+{
+    @Inject TestBean tb; // field injection
+
+/*
+@todo: check why constructor injection doesn't work
+    TestBean tb;
+    @Inject
+    public SfulEJB(TestBean tb){
+        this.tb = tb;
+        if (tb == null) throw new RuntimeException("tb is null");
+    }
+*/
+    public String hello() {
+        System.out.println("In SfulEJB:hello()");
+        if (tb != null) return "hello";
+        else return null;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/ejb/Sless.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/ejb/Sless.java
new file mode 100644
index 0000000..97fe185
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/ejb/Sless.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.cdi.ejb.hello.session;
+
+import javax.ejb.Remote;
+
+@Remote
+public interface Sless
+{
+    public String hello();
+
+    public org.glassfish.common.util.timer.TimerSchedule foo ();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/ejb/SlessEJB.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/ejb/SlessEJB.java
new file mode 100644
index 0000000..dec52e0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/ejb/SlessEJB.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.cdi.ejb.hello.session;
+
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+
+@Stateless
+public class SlessEJB implements Sless
+{
+    @Inject TestBean tb; //Field Injection
+
+    public String hello() {
+        System.out.println("In SlessEJB:hello()");
+        if (tb != null) return "hello";
+        else return null;
+    }
+
+    public org.glassfish.common.util.timer.TimerSchedule foo () {return null;}
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/ejb/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/ejb/TestBean.java
new file mode 100644
index 0000000..3f97997
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/ejb/TestBean.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.cdi.ejb.hello.session;
+
+
+//Simple TestBean to test CDI. This bean implements Serializable as it needs to be placed into a Stateful Bean
+public class TestBean implements java.io.Serializable
+{}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/readme.txt b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/readme.txt
new file mode 100644
index 0000000..bad16d6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-cdi/readme.txt
@@ -0,0 +1 @@
+client/Client.java is created during build process from client/Client.java.token via copying it and replacing token @ORB_PORT@ with the ORB port number from config.properties (${orb.pprt}).
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-singleton/hello/build.properties b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-singleton/hello/build.properties
new file mode 100644
index 0000000..982c344
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-singleton/hello/build.properties
@@ -0,0 +1,27 @@
+<!--
+
+    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-singleton-hello"/>
+<property name="appname" value="${module}"/> 
+<property name="jndiroot" value="${appname}-ejb"/>    
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="se.client" value="com.acme.Client"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
+	
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-singleton/hello/build.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-singleton/hello/build.xml
new file mode 100644
index 0000000..ad8c001
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-singleton/hello/build.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../../config/common.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="cdi-singleton-hello-App" default="usage" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+      <antcall  target="clean-common"/>
+    </target>
+ 
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="ejb"/>
+        </antcall>
+        <antcall target="compile-common">
+            <param name="src" value="client"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <antcall target="ejb-jar-common">
+            <param name="ejbjar.classes" 
+              value="**/Foo*.class,**/Test*.class,**/Singleton*.class,**/Hello*.class"/>
+        </antcall>
+    </target> 
+    
+    <target name="deploy" 
+            depends="init-common">
+        <antcall target="deploy-jar-common"/>
+    </target>
+
+    <target name="run" depends="init-common">
+        <antcall target="run_se"/>
+    </target>
+ 
+    <target name="run_se" depends="init-common">
+       <java  fork="on" 
+              failonerror="true"
+              classpath="${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/lib/appserv-rt.jar:${build.classes.dir}:${env.APS_HOME}/lib/reporter.jar"
+              classname="${se.client}">
+           <sysproperty key="org.omg.CORBA.ORBInitialPort" value="${orb.port}"/>
+           <arg line="${jndiroot}"/>
+        </java>
+    </target>
+
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-jar-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-singleton/hello/client/Client.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-singleton/hello/client/Client.java
new file mode 100644
index 0000000..cc27565
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-singleton/hello/client/Client.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+
+import javax.ejb.*;
+import javax.annotation.*;
+
+import javax.naming.InitialContext;
+
+import javax.management.j2ee.ManagementHome;
+import javax.management.j2ee.Management;
+import javax.rmi.PortableRemoteObject;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+public class Client {
+
+    private static SimpleReporterAdapter stat = 
+        new SimpleReporterAdapter("appserv-tests");
+
+    private static String appName;
+
+    public static void main(String args[]) {
+
+	appName = args[0]; 
+	stat.addDescription(appName);
+	Client client = new Client(args);       
+        client.doTest();	
+        stat.printSummary(appName + "ID");
+    }
+
+    public Client(String[] args) {}
+
+    public void doTest() {
+
+	try {
+
+	    // Ensure that MEJB is registered under all three of its JNDI names
+	    System.out.println("Looking up MEJB Homes");
+	    ManagementHome mh1Obj = (ManagementHome) new InitialContext().lookup("ejb/mgmt/MEJB");
+	    ManagementHome mh2Obj = (ManagementHome) new InitialContext().lookup("java:global/mejb/MEJBBean");
+	    ManagementHome mh3Obj = (ManagementHome) new InitialContext().lookup("java:global/mejb/MEJBBean!javax.management.j2ee.ManagementHome");
+        addStatus("mejb relative lookup", (mh1Obj != null));
+        addStatus("mejb global lookup", (mh2Obj != null));
+        addStatus("mejb global lookup with explicit ManagedHome interface", (mh3Obj != null));
+
+	    Hello hello = (Hello) new InitialContext().lookup("java:global/" + appName + "/SingletonBean");
+        String response = hello.hello();
+        addStatus("Singleton bean response", response.equals("hello, world!\n"));
+
+	    try {
+    		hello.testError();
+            addStatus("Expected EJBException from Singleton.testError()", false);
+	    	throw new RuntimeException("Expected EJBException");
+	    } catch(EJBException e) {
+            addStatus("Expected EJBException from Singleton.testError()", true);
+	    }
+
+        String injectionStatus = hello.testInjection();
+        System.out.println("Injection tests in server response"+ injectionStatus);
+        addStatus("Testing Injection in EJB Singleton" , injectionStatus.trim().equals(""));
+
+	} catch(Exception e) {
+	    stat.addStatus("local main", stat.DID_NOT_RUN);
+	    e.printStackTrace();
+	}
+    }
+
+    private void addStatus(String message, boolean result){
+            stat.addStatus(message, (result ? stat.PASS: stat.FAIL));
+    }
+
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-singleton/hello/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-singleton/hello/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-singleton/hello/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-singleton/hello/ejb/Foo.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-singleton/hello/ejb/Foo.java
new file mode 100644
index 0000000..1d87d9d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-singleton/hello/ejb/Foo.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import javax.ejb.*;
+
+public class Foo {
+
+    @EJB Hello hello;
+    @javax.inject.Inject TestBean tb;
+    
+    public boolean testInjection(){
+        return tb != null;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-singleton/hello/ejb/Hello.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-singleton/hello/ejb/Hello.java
new file mode 100644
index 0000000..23f4df7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-singleton/hello/ejb/Hello.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+public interface Hello {
+
+    String hello();
+
+    void testError();
+    String testInjection();
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-singleton/hello/ejb/SingletonBean.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-singleton/hello/ejb/SingletonBean.java
new file mode 100644
index 0000000..5493293
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-singleton/hello/ejb/SingletonBean.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import javax.ejb.*;
+import javax.annotation.*;
+import org.omg.CORBA.ORB;
+
+import javax.naming.InitialContext;
+
+import javax.management.j2ee.ManagementHome;
+import javax.inject.Inject;
+
+@Singleton
+@Remote(Hello.class)
+    @EJB(name="mejb", beanInterface=javax.management.j2ee.ManagementHome.class, mappedName="ejb/mgmt/MEJB")
+@Startup
+public class SingletonBean {
+
+    @Resource
+    private ORB orb;
+
+    @Inject Foo foo;
+    @Inject TestBean tb;
+
+    /*Object returned from IIOP_OBJECT_FACTORY is still ior
+    @EJB(mappedName="ejb/mgmt/MEJB")
+    ManagementHome mHome1;
+    */
+
+    /* Object returned from IIOP_OBJECT_FACTORY is still ior
+    @EJB(lookup="java:global/mejb/MEJBBean")
+    ManagementHome mHome2;
+    */
+
+    /* Doesn't work b/c actual MEJB app Home interface is new glassfish
+     * type, so actual type derived from field declaration is tacked
+     * onto mappedName and results in NameNotFound
+    @EJB(mappedName="java:global/mejb/MEJBBean")
+    ManagementHome mHome2;
+    */
+
+    
+
+
+    //MEJBHome mHome2;
+
+    @PostConstruct
+    public void init() {
+        System.out.println("In SingletonBean::init()");
+        System.out.println("orb = " + orb);
+	if( orb == null ) {
+	    throw new EJBException("null ORB");
+	}
+	try {
+	    // same problem ManagementHome mHomeL = (ManagementHome) new InitialContext().lookup("java:comp/env/mejb");
+	    // same problem ManagementHome mHomeL2 = (ManagementHome) new InitialContext().lookup("java:global/mejb/MEJBBean");
+	    // System.out.println("mHomeL = " + mHomeL);
+	    // System.out.println("mHomeL2 = " + mHomeL2);
+	} catch(Exception e) {
+	    throw new EJBException(e);
+	}
+
+	// System.out.println("mHome1 = " + mHome1);
+	//	System.out.println("mHome2 = " + mHome2);
+
+    }
+    
+    public String hello() {
+	System.out.println("In SingletonBean::hello()");
+	return "hello, world!\n";
+    }
+
+    public void testError() {
+	throw new Error("test java.lang.Error");
+    }
+
+    public String testInjection(){
+        if (foo == null) return "foo is null";
+        if (tb == null) return "tb is null";
+        if (!foo.testInjection()) return "testInjection in Foo failed";
+        return "";
+    }
+        
+
+    @PreDestroy
+    public void destroy() {
+        System.out.println("In SingletonBean::destroy()");
+    }
+
+
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-singleton/hello/ejb/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-singleton/hello/ejb/TestBean.java
new file mode 100644
index 0000000..22e521a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-ejb-singleton/hello/ejb/TestBean.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+//Simple test bean to test injection
+public class TestBean {}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/README b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/README
new file mode 100644
index 0000000..f6d9f21
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/README
@@ -0,0 +1 @@
+ A modification of the simple managed bean intereceptor test that uses non-default packages for the Managed Beans to get around Issue WELD-728
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/WebTest.java
new file mode 100644
index 0000000..76b21c9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/WebTest.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "simple-managed-bean-interceptor-with-non-default-packaged-beans";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0. initParams: n1=v1, n2=v2";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for @WebServlet");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/build.properties b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/build.properties
new file mode 100644
index 0000000..a4d5078
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-simple-managed-bean-interceptor-with-non-default-packages"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/build.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/build.xml
new file mode 100644
index 0000000..83ad666
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/build.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/descriptor/beans.xml
new file mode 100644
index 0000000..a52bc90
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/descriptor/beans.xml
@@ -0,0 +1,24 @@
+<!--
+
+    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
+
+-->
+
+<beans 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/beans_1_0.xsd">
+   <interceptors>
+      <class>com.tests.TestAroundInvokeInterceptor</class>
+   </interceptors>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/servlet/com/tests/TestAroundInvokeInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/servlet/com/tests/TestAroundInvokeInterceptor.java
new file mode 100644
index 0000000..379dfbf
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/servlet/com/tests/TestAroundInvokeInterceptor.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.tests;
+
+import javax.interceptor.*;
+
+@Tester @Interceptor
+public class TestAroundInvokeInterceptor {
+    public static int aroundInvokeCount = 0;
+
+    public static void reset(){
+        aroundInvokeCount = 0;
+    }
+
+   @AroundInvoke 
+   public Object testMethod(InvocationContext ctx) throws Exception {
+        System.out.println("TestAroundInvokeIntercetpr:: aroundInvoke called - target:" + ctx.getTarget() + " , params:"+ ctx.getParameters());
+        aroundInvokeCount ++;
+        ctx.proceed();
+        return null;
+   }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/servlet/com/tests/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/servlet/com/tests/TestBean.java
new file mode 100644
index 0000000..8de8781
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/servlet/com/tests/TestBean.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.tests;
+
+//Simple Bean to test injection into ManagedBeans
+public class TestBean {
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/servlet/com/tests/TestManagedBean.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/servlet/com/tests/TestManagedBean.java
new file mode 100644
index 0000000..b0b60ef
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/servlet/com/tests/TestManagedBean.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.tests;
+
+//Simple TestBean to test CDI. 
+//This bean implements Serializable as it needs to be placed into a Stateful Bean
+@javax.annotation.ManagedBean
+public class TestManagedBean {
+    TestBean tb;
+    boolean postConstructCalled = false;
+
+
+    //A Managed Bean needs to have a no-arg constructor
+    public TestManagedBean() {}
+    @javax.inject.Inject //Constructor based Injection
+    public TestManagedBean(TestBean tb){
+        this.tb = tb;
+    }
+
+
+    @javax.annotation.PostConstruct
+    public void init(){
+        System.out.println("In ManagedBean:: PostConstruct");
+        postConstructCalled = true;
+    }
+
+    @Tester
+    public void foo(){
+        System.out.println("foo called");
+    }
+
+    public boolean testPostConstructCalled(){
+        return this.postConstructCalled;
+    }
+
+    public boolean testInjection(){
+        System.out.println("In ManagedBean:: tb=" + tb);
+        postConstructCalled = true;
+        return this.tb != null;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/servlet/com/tests/TestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/servlet/com/tests/TestServlet.java
new file mode 100644
index 0000000..9fac0e4
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/servlet/com/tests/TestServlet.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.tests;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Enumeration;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@WebServlet(name="mytest",
+        urlPatterns={"/myurl"},
+        initParams={ @WebInitParam(name="n1", value="v1"), @WebInitParam(name="n2", value="v2") } )
+public class TestServlet extends HttpServlet {
+    @javax.inject.Inject TestManagedBean tb1;
+    @javax.annotation.Resource TestManagedBean tb;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0. ");
+        String msg = "n1=" + getInitParameter("n1") +
+            ", n2=" + getInitParameter("n2");
+
+        //ManagedBean testing .. add additional messages in the "msg" string, so that the test will FAIL in the client
+        msg += testManagedBean(tb, " | TestManagedBean injected via @Resource");
+        msg += testManagedBean(tb1, " | TestManagedBean injected via @Inject");
+        msg += testInterceptors();
+
+        writer.write("initParams: " + msg + "\n");
+    }
+
+    private String testManagedBean(TestManagedBean tb, String info) {
+        String msg = "";
+        if (tb == null) msg += info + " is null!";
+        if (tb != null && !tb.testPostConstructCalled()) msg += info + " postConstruct not called";
+        if (tb != null && !tb.testInjection()) msg += info + "Bean Injection into ManagedBean failed";
+        return msg;
+    }
+
+    private String testInterceptors(){
+        // The interceptors should be invoked for both of these cases
+        System.out.println("calling foo on an @Resource injected Managed Bean");
+        tb.foo();
+        System.out.println("calling foo on an @Inject Managed Bean");
+        tb1.foo();
+
+        int count = TestAroundInvokeInterceptor.aroundInvokeCount;
+        System.out.println("TestAroundInvokeInterceptor called " + count + " times");
+        TestAroundInvokeInterceptor.reset();
+        if (count == 2) return "";
+            else return "Interceptor invocation count" + count + " invalid";
+   }
+
+ 
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/servlet/com/tests/Tester.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/servlet/com/tests/Tester.java
new file mode 100644
index 0000000..a966727
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor-nonnull-package/servlet/com/tests/Tester.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.tests;
+
+import javax.interceptor.*;
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+
+@InterceptorBinding
+@Target({METHOD, TYPE})
+@Retention(RUNTIME)
+public @interface Tester {}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/WebTest.java
new file mode 100644
index 0000000..343d171
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/WebTest.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "simple-managed-bean-interceptor";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0. initParams: n1=v1, n2=v2";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for @WebServlet");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/build.properties b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/build.properties
new file mode 100644
index 0000000..4809e75
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-simple-managed-bean-interceptor"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/build.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/build.xml
new file mode 100644
index 0000000..83ad666
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/build.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/descriptor/beans.xml
new file mode 100644
index 0000000..173bc72
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/descriptor/beans.xml
@@ -0,0 +1,24 @@
+<!--
+
+    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
+
+-->
+
+<beans 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/beans_1_0.xsd">
+   <interceptors>
+      <class>TestAroundInvokeInterceptor</class>
+   </interceptors>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/servlet/TestAroundInvokeInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/servlet/TestAroundInvokeInterceptor.java
new file mode 100644
index 0000000..8b2414e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/servlet/TestAroundInvokeInterceptor.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 javax.interceptor.*;
+
+@Tester @Interceptor
+public class TestAroundInvokeInterceptor {
+    public static int aroundInvokeCount = 0;
+
+    public static void reset(){
+        aroundInvokeCount = 0;
+    }
+
+   @AroundInvoke 
+   public Object testMethod(InvocationContext ctx) throws Exception {
+        System.out.println("TestAroundInvokeIntercetpr:: aroundInvoke called - target:" + ctx.getTarget() + " , params:"+ ctx.getParameters());
+        aroundInvokeCount ++;
+        ctx.proceed();
+        return null;
+   }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/servlet/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/servlet/TestBean.java
new file mode 100644
index 0000000..3dd49b9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/servlet/TestBean.java
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+//Simple Bean to test injection into ManagedBeans
+public class TestBean {
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/servlet/TestManagedBean.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/servlet/TestManagedBean.java
new file mode 100644
index 0000000..4905710
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/servlet/TestManagedBean.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+//Simple TestBean to test CDI. 
+//This bean implements Serializable as it needs to be placed into a Stateful Bean
+@javax.annotation.ManagedBean
+public class TestManagedBean {
+    TestBean tb;
+    boolean postConstructCalled = false;
+
+
+    //A Managed Bean needs to have a no-arg constructor
+    public TestManagedBean() {}
+    @javax.inject.Inject //Constructor based Injection
+    public TestManagedBean(TestBean tb){
+        this.tb = tb;
+    }
+
+
+    @javax.annotation.PostConstruct
+    public void init(){
+        System.out.println("In ManagedBean:: PostConstruct");
+        postConstructCalled = true;
+    }
+
+    @Tester
+    public void foo(){
+        System.out.println("foo called");
+    }
+
+    public boolean testPostConstructCalled(){
+        return this.postConstructCalled;
+    }
+
+    public boolean testInjection(){
+        System.out.println("In ManagedBean:: tb=" + tb);
+        postConstructCalled = true;
+        return this.tb != null;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/servlet/TestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/servlet/TestServlet.java
new file mode 100644
index 0000000..431cdfc
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/servlet/TestServlet.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.IOException;
+import java.io.PrintWriter;
+import java.util.Enumeration;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@WebServlet(name="mytest",
+        urlPatterns={"/myurl"},
+        initParams={ @WebInitParam(name="n1", value="v1"), @WebInitParam(name="n2", value="v2") } )
+public class TestServlet extends HttpServlet {
+    @javax.inject.Inject TestManagedBean tb1;
+    @javax.annotation.Resource TestManagedBean tb;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0. ");
+        String msg = "n1=" + getInitParameter("n1") +
+            ", n2=" + getInitParameter("n2");
+
+        //ManagedBean testing .. add additional messages in the "msg" string, so that the test will FAIL in the client
+        msg += testManagedBean(tb, " | TestManagedBean injected via @Resource");
+        msg += testManagedBean(tb1, " | TestManagedBean injected via @Inject");
+        msg += testInterceptors();
+
+        writer.write("initParams: " + msg + "\n");
+    }
+
+    private String testManagedBean(TestManagedBean tb, String info) {
+        String msg = "";
+        if (tb == null) msg += info + " is null!";
+        if (tb != null && !tb.testPostConstructCalled()) msg += info + " postConstruct not called";
+        if (tb != null && !tb.testInjection()) msg += info + "Bean Injection into ManagedBean failed";
+        return msg;
+    }
+
+    private String testInterceptors(){
+        System.out.println("calling foo on an @Resource injected Managed Bean");
+        tb.foo();
+        System.out.println("calling foo on an @Inject Managed Bean");
+        tb1.foo(); //TestAroundInvokeInterceptor is not called in this case
+
+        int count = TestAroundInvokeInterceptor.aroundInvokeCount;
+        System.out.println("TestAroundInvokeInterceptor called " + count + " times");
+        TestAroundInvokeInterceptor.reset();
+        if (count == 1) return ""; 
+            else return "Interceptor invocation count" + count + " invalid";
+   }
+
+ 
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/servlet/Tester.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/servlet/Tester.java
new file mode 100644
index 0000000..0555ac6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean-interceptor/servlet/Tester.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 javax.interceptor.*;
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+
+@InterceptorBinding
+@Target({METHOD, TYPE})
+@Retention(RUNTIME)
+public @interface Tester {}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean/WebTest.java
new file mode 100644
index 0000000..ff40c2c
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean/WebTest.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "simple-managed-bean";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0. initParams: n1=v1, n2=v2";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for @WebServlet");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean/build.properties b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean/build.properties
new file mode 100644
index 0000000..712ba4a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-simple-managed-bean"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean/build.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean/build.xml
new file mode 100644
index 0000000..83ad666
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean/build.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean/servlet/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean/servlet/TestBean.java
new file mode 100644
index 0000000..3dd49b9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean/servlet/TestBean.java
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+//Simple Bean to test injection into ManagedBeans
+public class TestBean {
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean/servlet/TestManagedBean.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean/servlet/TestManagedBean.java
new file mode 100644
index 0000000..009ac36
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean/servlet/TestManagedBean.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+//Simple TestBean to test CDI. 
+//This bean implements Serializable as it needs to be placed into a Stateful Bean
+@javax.annotation.ManagedBean
+public class TestManagedBean {
+    TestBean tb;
+    boolean postConstructCalled = false;
+    
+    public TestManagedBean(){}
+
+    @javax.inject.Inject //Constructor based Injection
+    public TestManagedBean(TestBean tb){
+        this.tb = tb;
+    }
+
+
+    @javax.annotation.PostConstruct
+    public void init(){
+        System.out.println("In ManagedBean:: PostConstruct");
+        postConstructCalled = true;
+    }
+
+    public boolean testPostConstructCalled(){
+        return this.postConstructCalled;
+    }
+
+    public boolean testInjection(){
+        System.out.println("In ManagedBean:: tb=" + tb);
+        postConstructCalled = true;
+        return this.tb != null;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean/servlet/TestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean/servlet/TestServlet.java
new file mode 100644
index 0000000..f22bd89
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-managed-bean/servlet/TestServlet.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.IOException;
+import java.io.PrintWriter;
+import java.util.Enumeration;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@WebServlet(name="mytest",
+        urlPatterns={"/myurl"},
+        initParams={ @WebInitParam(name="n1", value="v1"), @WebInitParam(name="n2", value="v2") } )
+public class TestServlet extends HttpServlet {
+    @javax.inject.Inject TestManagedBean tb1;
+    @javax.annotation.Resource TestManagedBean tb;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0. ");
+        String msg = "n1=" + getInitParameter("n1") +
+            ", n2=" + getInitParameter("n2");
+
+        //ManagedBean testing .. add additional messages in the "msg" string, so that the test will FAIL in the client
+        msg += testManagedBean(tb, " | TestManagedBean injected via @Resource");
+        msg += testManagedBean(tb1, " | TestManagedBean injected via @Inject");
+
+        writer.write("initParams: " + msg + "\n");
+    }
+
+    private String testManagedBean(TestManagedBean tb, String info) {
+        String msg = "";
+        if (tb == null) msg += info + " is null!";
+        if (tb != null && !tb.testPostConstructCalled()) msg += info + " postConstruct not called";
+        if (tb != null && !tb.testInjection()) msg += info + "Bean Injection into ManagedBean failed";
+        return msg;
+    }
+ 
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/build.properties b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/build.properties
new file mode 100644
index 0000000..d64848e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/build.properties
@@ -0,0 +1,37 @@
+<!--
+
+    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-hello-mdb"/>
+<property name="appname" value="${module}"/>         
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="test.client" 
+	value="Client"/>
+<property name="simple.client" value="com.sun.s1asdev.cdi.hello.mdb.client.Client"/>
+<property name="application.xml" value="descriptor/application.xml"/>
+<property name="sun-application.xml" value="descriptor/sun-application.xml"/>
+<property name="ejb-jar.xml" value="descriptor/ejb-jar.xml"/>
+<property name="sun-ejb-jar.xml" value="descriptor/sun-ejb-jar.xml"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
+<property name="application-client.xml" 
+	value="descriptor/application-client.xml"/>
+<property name="sun-application-client.xml" 
+	value="descriptor/sun-application-client.xml"/>
+<property name="appclientjar.files" value="${build.classes.dir}"/>         
+<property name="appclient.jar" value="${assemble.dir}/${appname}-client.jar"/>
+<property name="app.type" value="application"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/build.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/build.xml
new file mode 100644
index 0000000..e71984d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/build.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="cdi-hello-mdbApp" default="usage" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+
+    <target name="all" depends="clean,build,create-resources,deploy,run,undeploy,delete-resources"/>
+
+    <target name="clean" depends="init-common">
+      <antcall  target="clean-common"/>
+    </target>
+ 
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="ejb"/>
+        </antcall>
+        <antcall target="compile-common">
+            <param name="src" value="client"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <antcall target="build-ear-common">
+            <param name="ejbjar.classes" 
+              value="**/*Bean*.class,**/*Hello*" />
+            <param name="appclientjar.classes" 
+              value="**/*Client*.class" />
+        </antcall>
+    </target> 
+    
+    <target name="deploy" 
+            depends="init-common">
+        <antcall target="deploy-common"/>
+    </target>
+
+    <target name="create-resources" depends="init-common">
+        <antcall target="asadmin-batch-common">
+          <param name="asadmin.file" value="create_resources.asadmin"/>
+        </antcall>
+    </target>
+    
+    <target name="delete-resources" depends="init-common">
+        <antcall target="asadmin-batch-common">
+          <param name="asadmin.file" value="delete_resources.asadmin"/>
+        </antcall>
+    </target>
+
+    <target name="run" depends="init-common">
+        <antcall target="runclient-common">
+          <param name="appclient.application.args" value="1"/>
+        </antcall>
+    </target>
+
+    <target name="run_standaloneclient" depends="init-common">
+       <java  fork="on" 
+              failonerror="true"
+              classpath="${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/modules/javax.jms.jar:${env.S1AS_HOME}/lib/gf-client.jar:${build.classes.dir}:${env.APS_HOME}/lib/reporter.jar"
+              classname="${simple.client}">
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+        <echo>         
+          ant create-resources Create all destinations and connection factories
+          ant delete-resources Delete all destinations and connection factories
+        </echo>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/client/Client.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/client/Client.java
new file mode 100644
index 0000000..a9ba3f0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/client/Client.java
@@ -0,0 +1,151 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.cdi.hello.mdb.client;
+import java.io.*;
+import java.util.*;
+import javax.ejb.EJBHome;
+import javax.jms.*;
+import javax.annotation.Resource;
+import javax.naming.InitialContext;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+public class Client {
+
+    // in milli-seconds
+    private static long TIMEOUT = 90000;
+
+    private static SimpleReporterAdapter stat =
+        new SimpleReporterAdapter("appserv-tests");
+
+    public static void main (String[] args) {
+        Client client = new Client(args);
+
+        stat.addDescription("cdi-hello-mdb");
+        client.doTest();
+        stat.printSummary("cdi-hello-mdbID");
+        System.exit(0);
+    }
+
+
+    @Resource(name="FooCF", mappedName="jms/cdi_hello_mdb_QCF") 
+    private static QueueConnectionFactory queueConFactory;
+
+    @Resource(name="MsgBeanQueue", mappedName="jms/cdi_hello_mdb_InQueue")
+    private static javax.jms.Queue msgBeanQueue;
+
+    @Resource(name="ClientQueue", mappedName="foo")
+    private static javax.jms.Queue clientQueue;
+
+    private QueueConnection queueCon;
+    private QueueSession queueSession;
+    private QueueSender queueSender;
+    private QueueReceiver queueReceiver;
+
+
+    private int numMessages = 2;
+    public Client(String[] args) {
+        
+        if( args.length == 1 ) {
+            numMessages = new Integer(args[0]).intValue();
+        }
+
+    }
+
+    public void doTest() {
+        try {
+	    if( queueConFactory == null ) {
+
+		System.out.println("Java SE mode...");
+		InitialContext ic = new InitialContext();
+		queueConFactory = (javax.jms.QueueConnectionFactory) ic.lookup("jms/cdi_hello_mdb_QCF");
+		msgBeanQueue = (javax.jms.Queue) ic.lookup("jms/cdi_hello_mdb_InQueue");
+		clientQueue = (javax.jms.Queue) ic.lookup("jms/cdi_hello_mdb_OutQueue");
+		
+	    }
+
+            setup();
+            doTest(numMessages);
+            stat.addStatus("cmt main", stat.PASS);
+        } catch(Throwable t) {
+            stat.addStatus("cmt main", stat.FAIL);
+            t.printStackTrace();
+        } finally {
+            cleanup();
+        }
+    }
+
+    public void setup() throws Exception {
+        
+        queueCon = queueConFactory.createQueueConnection();
+
+        queueSession = queueCon.createQueueSession
+            (false, Session.AUTO_ACKNOWLEDGE); 
+
+        // Producer will be specified when actual msg is sent.
+        queueSender = queueSession.createSender(null);        
+
+        queueReceiver = queueSession.createReceiver(clientQueue);
+
+        queueCon.start();
+
+    }
+
+    public void cleanup() {
+        try {
+            if( queueCon != null ) {
+                queueCon.close();
+            }
+        } catch(Throwable t) {
+            t.printStackTrace();
+        }
+    }
+
+    public void sendMsgs(javax.jms.Queue queue, Message msg, int num) 
+        throws JMSException {
+        for(int i = 0; i < num; i++) {
+            System.out.println("Sending message " + i + " to " + queue + 
+                               " at time " + System.currentTimeMillis());
+            queueSender.send(queue, msg);
+            System.out.println("Sent message " + i + " to " + queue + 
+                               " at time " + System.currentTimeMillis());
+        }
+    }
+
+    public void doTest(int num) 
+        throws Exception {
+
+        Destination dest = msgBeanQueue;
+
+        Message message = queueSession.createTextMessage("foo");
+
+        message.setBooleanProperty("flag", true);
+        message.setIntProperty("num", 2);
+        sendMsgs((javax.jms.Queue) dest, message, num);
+
+        System.out.println("Waiting for queue message");
+        Message recvdmessage = queueReceiver.receive(TIMEOUT);
+        if( recvdmessage != null ) {
+            System.out.println("Received message : " + 
+                                   ((TextMessage)recvdmessage).getText());
+        } else {
+            System.out.println("timeout after " + TIMEOUT + " seconds");
+            throw new JMSException("timeout" + TIMEOUT + " seconds");
+        }
+    }
+}
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/client/MANIFEST.MF b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/client/MANIFEST.MF
new file mode 100644
index 0000000..1ed692b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/client/MANIFEST.MF
@@ -0,0 +1,4 @@
+Manifest-Version: 1.0
+Created-By: 1.4.0-beta3 (Sun Microsystems Inc.)
+Main-Class: com.sun.s1asdev.cdi.hello.mdb.client.Client
+Class-Path: reporter.jar
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/create_resources.asadmin b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/create_resources.asadmin
new file mode 100644
index 0000000..78a6f43
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/create_resources.asadmin
@@ -0,0 +1,5 @@
+create-jms-resource --restype javax.jms.QueueConnectionFactory jms/cdi_hello_mdb_QCF
+create-jmsdest --desttype queue cdi_hello_mdb_InQueue 
+create-jms-resource --restype javax.jms.Queue --property imqDestinationName=cdi_hello_mdb_InQueue jms/cdi_hello_mdb_InQueue
+create-jmsdest --desttype queue cdi_hello_mdb_OutQueue 
+create-jms-resource --restype javax.jms.Queue --property imqDestinationName=cdi_hello_mdb_OutQueue jms/cdi_hello_mdb_OutQueue
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/delete_resources.asadmin b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/delete_resources.asadmin
new file mode 100644
index 0000000..69af651
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/delete_resources.asadmin
@@ -0,0 +1,5 @@
+delete-jms-resource jms/cdi_hello_mdb_QCF
+delete-jms-resource jms/cdi_hello_mdb_InQueue
+delete-jmsdest --desttype queue cdi_hello_mdb_InQueue
+delete-jms-resource jms/cdi_hello_mdb_OutQueue
+delete-jmsdest --desttype queue cdi_hello_mdb_OutQueue
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/descriptor/application.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/descriptor/application.xml
new file mode 100644
index 0000000..448b864
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/descriptor/application.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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="5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">
+  <display-name>cdi-hello-mdbApp</display-name>
+  <module>
+    <ejb>cdi-hello-mdb-ejb.jar</ejb>
+  </module>
+  <module>
+    <java>cdi-hello-mdb-client.jar</java>
+  </module>
+</application>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/descriptor/sun-application-client.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/descriptor/sun-application-client.xml
new file mode 100644
index 0000000..3cb8ad5
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/descriptor/sun-application-client.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 sun-application-client PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Application Client 5.0//EN" "http://www.sun.com/software/appserver/dtds/sun-application-client_5_0-0.dtd">
+<sun-application-client>
+  <message-destination-ref>
+      <message-destination-ref-name>ClientQueue</message-destination-ref-name>
+      <jndi-name>jms/cdi_hello_mdb_OutQueue</jndi-name>
+  </message-destination-ref>
+</sun-application-client>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/ejb/Hello1.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/ejb/Hello1.java
new file mode 100644
index 0000000..55f1d9f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/ejb/Hello1.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.cdi.hello.mdb;
+
+public interface Hello1 {
+
+    public void hello(String s);
+    
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/ejb/Hello2.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/ejb/Hello2.java
new file mode 100644
index 0000000..dce0861
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/ejb/Hello2.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.cdi.hello.mdb;
+
+public interface Hello2 extends java.io.Serializable {
+
+    public void hello(String s);
+
+    public void removeMethod();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/ejb/HelloStateful.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/ejb/HelloStateful.java
new file mode 100644
index 0000000..daef982
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/ejb/HelloStateful.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.cdi.hello.mdb;
+
+import javax.ejb.Stateful;
+import javax.ejb.Remove;
+import javax.annotation.PreDestroy;
+
+// Hello1 interface is not annotated with @Local. If the
+// bean only implements one interface it is assumed to be
+// a local business interface.
+@Stateful(description="my stateful bean description")
+public class HelloStateful implements Hello2 {
+
+    private String msg;
+
+    public void hello(String s) {
+        msg = s;
+        System.out.println("HelloStateful: " + s);
+    }
+
+    @Remove public void removeMethod() {
+        System.out.println("Business method marked with @Remove called in " +
+                           msg);
+    }
+    @PreDestroy public void myPreDestroyMethod() {
+        System.out.println("PRE-DESTROY callback received in " + msg);        
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/ejb/HelloStateless.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/ejb/HelloStateless.java
new file mode 100644
index 0000000..fa86bc5
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/ejb/HelloStateless.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.cdi.hello.mdb;
+
+import javax.ejb.Stateless;
+
+// Hello1 interface is not annotated with @Local. If the
+// bean only implements one interface it is assumed to be
+// a local business interface.
+@Stateless(description="my stateless bean description") 
+public class HelloStateless implements Hello1 {
+
+    public void hello(String s) {
+        System.out.println("HelloStateless: " + s);
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/ejb/MessageBean.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/ejb/MessageBean.java
new file mode 100644
index 0000000..cdc7786
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/ejb/MessageBean.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.cdi.hello.mdb;
+
+import javax.ejb.MessageDriven;
+import javax.ejb.EJBException;
+import javax.ejb.NoSuchEJBException;
+import javax.ejb.EJB;
+import javax.ejb.TransactionManagement;
+import javax.ejb.TransactionManagementType;
+import javax.ejb.ActivationConfigProperty;
+
+import javax.jms.MessageListener;
+import javax.jms.Message;
+import javax.jms.Queue;
+import javax.jms.QueueConnectionFactory;
+import javax.jms.QueueConnection;
+import javax.jms.QueueSession;
+import javax.jms.QueueSender;
+import javax.jms.TextMessage;
+import javax.jms.Session;
+
+import javax.annotation.Resource;
+
+@TransactionManagement(TransactionManagementType.BEAN)
+@MessageDriven(mappedName="jms/cdi_hello_mdb_InQueue", description="mymessagedriven bean description")
+ public class MessageBean implements MessageListener {
+
+    @EJB private Hello1 hello1;
+    @EJB private Hello2 hello2;
+
+    @Resource(name="jms/MyQueueConnectionFactory", 
+              mappedName="jms/cdi_hello_mdb_QCF") 
+    QueueConnectionFactory qcFactory;
+
+    @Resource(mappedName="jms/cdi_hello_mdb_OutQueue") Queue clientQueue;
+
+    @javax.inject.Inject com.sun.s1asdev.cdi.hello.bean.TestBean tb;
+
+
+    public void onMessage(Message message) {
+        System.out.println("Got message!!! tb=" + tb );
+
+        QueueConnection connection = null;
+        try {
+            
+            System.out.println("Calling hello1 stateless bean");
+            hello1.hello("local ejb3.0 stateless");
+            System.out.println("Calling hello2 stateful bean");
+            hello2.hello("local ejb3.0 stateful");
+            hello2.removeMethod();
+            try {
+                hello2.hello("this call should not go through");
+                throw new Exception("bean should have been removed " +
+                                    "after removeMethod()");
+            } catch(NoSuchEJBException e) {
+                System.out.println("Successfully caught EJBException after " +
+                                   " accessing removed SFSB");
+            }
+
+            if (tb == null) throw new Exception("Injection of Bean in MDB failed");
+
+            connection = qcFactory.createQueueConnection();
+            QueueSession session = connection.createQueueSession(false,
+                                   Session.AUTO_ACKNOWLEDGE);
+            QueueSender sender = session.createSender(clientQueue);
+            TextMessage tmessage = session.createTextMessage();
+            tmessage.setText("mdb() invoked");
+            System.out.println("Sending message");
+            sender.send(tmessage);
+            System.out.println("message sent");
+
+        } catch(Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if(connection != null) {
+                    connection.close();
+                }
+            } catch(Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/ejb/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/ejb/TestBean.java
new file mode 100644
index 0000000..0dd4102
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-mdb/ejb/TestBean.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.cdi.hello.bean;
+
+
+
+//Simple TestBean to test CDI. 
+public class TestBean
+{}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/README b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/README
new file mode 100644
index 0000000..117389b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/README
@@ -0,0 +1,3 @@
+Test
+- Simple WAB (Web Application Bundle) that is CDI enabled.
+- Test injection of beans, access to BeanManager within WAB
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/WebTest.java
new file mode 100644
index 0000000..09cdfca
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/WebTest.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "cdi-wab";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for @WebServlet");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        Thread.sleep(2000); //WORKAROUND @XXX
+        String url = "http://" + host + ":" + port + contextRoot;
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
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
new file mode 100644
index 0000000..38d97bd
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/build.properties
@@ -0,0 +1,26 @@
+<!--
+
+    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/cdi/smoke-tests/simple-wab-with-cdi/build.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/build.xml
new file mode 100644
index 0000000..a276cda
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/build.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!--
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+-->
+<!ENTITY commonBuild SYSTEM "./common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-wab-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+   
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-wab-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <sleep seconds="25"/>
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/common.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/common.xml
new file mode 100644
index 0000000..f396e66
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/common.xml
@@ -0,0 +1,1946 @@
+<!--
+
+    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 is the top level build file that should be 
+    imported into all the leaf level build files 
+-->
+
+<!-- ================================================================ -->
+<!-- Targets to clean class files and jars files -->
+<!-- 
+Variables used: 
+    ${build.classes.dir} 
+    ${assemble.dir}
+-->
+<!-- ================================================================ -->
+<target name="clean-classes-common" depends="init-common">
+    <echo message="common.xml: Cleaning test source files: ${build.base.dir}" 
+        level="verbose"/>
+  <delete dir="${build.base.dir}"/>
+</target>
+    
+<target name="clean-jars-common" depends="init-common">
+  <delete dir="${assemble.dir}"/>
+</target>
+
+<target name="clean-common" depends="init-common">
+  <antcall target="clean-classes-common"/>
+  <antcall target="clean-jars-common"/>
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to compile the java source files -->
+<!-- 
+Variables used: 
+    ${build.classes.dir} 
+    ${s1astest.classpath}
+    ${src}
+-->
+<!-- ================================================================ -->
+<target name="compile-common" depends="init-common">
+  <mkdir dir="${build.classes.dir}"/>
+  <echo message="common.xml: Compiling test source files" level="verbose"/>
+  <mkdir dir="${src}"/>
+  <javac srcdir="${src}"
+    destdir="${build.classes.dir}"
+    classpath="${s1astest.classpath}"
+    debug="on"
+    failonerror="true"/>
+</target>
+
+<!-- ================================================================ -->
+<!-- This is the external target war-common to be called up build files
+usage:
+<antcall target="war-common">
+<param name="war.classes" value="MyServlet.class,MyOtherServlet.class"/>
+</antcall>
+Assumption: All the static content is placed in webcontent directory
+
+Variables Used:
+    ${war.file}
+    ${build.classes.dir}
+    ${appname}    
+    ${assemble.dir}
+    ${web.xml}
+    ${beans.xml}
+    ${tlds}
+    ${tagfiles}
+    ${APS_HOME}
+    ${webclient.war.files}
+    ${webclient.war.classes}
+-->
+<!-- ================================================================ -->
+
+<target name="webclient-war-common" if="hasWebclient" depends="init-common">
+  <mkdir dir="${assemble.dir}"/>
+  <antcall target="package-war-common">
+    <param name="war.classes" value="${build.classes.dir}"/>
+    <param name="war.file" value="${assemble.dir}/${appname}-web.war"/>
+  </antcall>
+</target>
+
+<target name="webclient-wab-common" if="hasWebclient" depends="init-common">
+  <mkdir dir="${assemble.dir}"/>
+  <antcall target="package-wab-common">
+    <param name="war.classes" value="${build.classes.dir}"/>
+    <param name="war.file" value="${assemble.dir}/${appname}-web.war"/>
+  </antcall>
+</target>
+
+
+<target name="publish-war-common" depends="init-common">
+  <mkdir dir="${build.webapps.dir}"/>
+  <copy file="${assemble.dir}/${appname}-web.war" 
+        tofile="${build.webapps.dir}/${appname}.war" 
+        overwrite="true" />
+</target>
+
+<target name="clean-webapps-common" depends="init-common">
+    <delete dir="${build.webapps.dir}" quiet="true" />  
+</target>
+
+<target name="clear">
+    <delete file="${war.file}"/>  
+</target>
+
+<target name="copy-tlds" if="tlds-exist" depends="clear,test-tlds-exist">
+  <mkdir dir="${build.classes.dir}/tmp/WEB-INF/tlds"/>
+  <copy todir="${build.classes.dir}/tmp/WEB-INF/tlds" failonerror="false">
+      <fileset dir="${tlds}">
+          <include name="**/*.tld"/>
+      </fileset>
+  </copy>
+</target>
+
+<target name="copy-tagfiles" if="tagfiles-exist" depends="clear,test-tagfiles-exist">
+  <mkdir dir="${build.classes.dir}/tmp/WEB-INF/tags"/>
+  <copy todir="${build.classes.dir}/tmp/WEB-INF/tags" failonerror="false">
+      <fileset dir="${tagfiles}">
+          <include name="**/*.tag"/>
+          <include name="**/*.tagx"/>
+      </fileset>
+  </copy>
+</target>
+
+<target name="package-war-common" depends="copy-tlds,copy-tagfiles">
+  <echo message="my build classes dir is:${build.classes.dir}" level="verbose"/>
+  <mkdir dir="${build.classes.dir}/tmp"/>
+  <mkdir dir="${build.classes.dir}/tmp/WEB-INF"/>
+  <mkdir dir="${build.classes.dir}/tmp/WEB-INF/classes"/>
+  <mkdir dir="${build.classes.dir}/tmp/WEB-INF/lib"/>
+  <mkdir dir="lib"/>
+  <copy file="${glassfish-web.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/glassfish-web.xml" failonerror="false"/>
+  <copy file="${sun-web.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/sun-web.xml" failonerror="false"/>
+  <copy file="${weblogic.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/weblogic.xml" failonerror="false"/>
+  <copy file="${glassfish-resources.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/glassfish-resources.xml" failonerror="false"/>
+  <copy todir="${build.classes.dir}/tmp/WEB-INF/lib" failonerror="false">
+      <fileset dir="lib">
+          <include name="**/*.jar"/>
+          <include name="**/*.zip"/>
+      </fileset>
+  </copy>
+  <copy file="${webservices.xml}" 
+        tofile="${build.classes.dir}/tmp/WEB-INF/webservices.xml"
+        failonerror="false"/>
+  <copy file="${mappingfile.location}/${mappingfile.name}" 
+        tofile="${build.classes.dir}/tmp/${mappingfile.name}"
+        failonerror="false"/>
+  <copy file="${wsdlfile.location}/${wsdlfile.name}" 
+        tofile="${build.classes.dir}/tmp/WEB-INF/wsdl/${wsdlfile.name}"
+        failonerror="false"/>
+  <copy file="${tagPlugins.xml}" 
+        tofile="${build.classes.dir}/tmp/WEB-INF/tagPlugins.xml"
+        failonerror="false"/>
+  <copy file="${web.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/web.xml"
+        failonerror="false"/>
+    <copy file="${persistence.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/classes/META-INF/persistence.xml"
+        failonerror="false"/>
+   <copy file="${beans.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/beans.xml"
+        failonerror="false"/>
+  <copy file="${context.xml}"
+      tofile="${build.classes.dir}/tmp/META-INF/context.xml" failonerror="false"/>
+  <copy file="${cdi-extension.service}"
+      tofile="${build.classes.dir}/tmp/WEB-INF/classes/META-INF/services/javax.enterprise.inject.spi.Extension" failonerror="false"/>
+      
+  <copy todir="${build.classes.dir}/tmp/WEB-INF/classes">
+      <fileset dir="${war.classes}">
+          <include name="**/*.class"/>
+      </fileset>
+  </copy>
+  <echo message="Creating war file ${war.file}" level="verbose"/>
+  <mkdir dir="${basedir}/docroot"/>
+  <jar jarfile="${war.file}" update="true">
+    <fileset dir="${build.classes.dir}/tmp" casesensitive="yes">
+      <include name="**/*class*"/>
+    </fileset>
+    <fileset dir="${basedir}/docroot" casesensitive="yes">
+      <include name="**/*.html"/>
+      <include name="**/*.HTML"/>
+      <include name="**/*.xhtml"/>
+      <include name="**/*.jsp"/>
+      <include name="**/*.jspx"/>
+      <include name="**/*.jspf"/>
+      <include name="**/*.gif"/>
+      <include name="**/*.do"/>
+      <include name="**/*.txt"/>
+      <include name="**/*.shtml"/>
+      <include name="**/*.jar"/>
+      <exclude name="**/*.java,**/*.xml,**/*.properties"/>
+    </fileset>
+    <fileset dir="${build.classes.dir}/tmp/" casesensitive="true">
+      <include name="WEB-INF/web.xml"/>
+      <include name="WEB-INF/glassfish-web.xml"/>
+      <include name="WEB-INF/glassfish-resources.xml"/>
+      <include name="WEB-INF/sun-web.xml"/>
+      <include name="WEB-INF/beans.xml"/>
+      <include name="WEB-INF/weblogic.xml"/>
+      <include name="WEB-INF/webservices.xml"/>
+      <include name="WEB-INF/tagPlugins.xml"/>
+      <include name="WEB-INF/lib/*"/>
+      <include name="WEB-INF/lib/extra/*"/>
+      <include name="WEB-INF/tlds/*"/>
+      <include name="WEB-INF/tags/*"/>
+      <include name="WEB-INF/wsdl/${wsdlfile.name}"/>
+      <include name="${mappingfile.name}"/>
+      <include name="META-INF/context.xml"/>
+      <include name="WEB-INF/classes/META-INF/services/javax.enterprise.inject.spi.Extension"/>
+      <include name="WEB-INF/classes/META-INF/persistence.xml"/>
+    </fileset>
+  </jar>       
+  <echo message="created war file ${war.file}" level="verbose"/>
+  <delete dir="${build.classes.dir}/tmp/WEB-INF" failonerror="false"/> 
+  <echo message="my webclient war classes are:${webclient.war.classes}" 
+      level="verbose"/>
+</target>
+
+<target name="package-wab-common" depends="copy-tlds,copy-tagfiles">
+  <echo message="my build classes dir is:${build.classes.dir}" level="verbose"/>
+  <mkdir dir="${build.classes.dir}/tmp"/>
+  <mkdir dir="${build.classes.dir}/tmp/WEB-INF"/>
+  <mkdir dir="${build.classes.dir}/tmp/WEB-INF/classes"/>
+  <mkdir dir="${build.classes.dir}/tmp/WEB-INF/lib"/>
+  <mkdir dir="${build.classes.dir}/tmp/WEB-INF/META-INF"/>
+  <mkdir dir="lib"/>
+  <copy file="${glassfish-web.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/glassfish-web.xml" failonerror="false"/>
+  <copy file="${sun-web.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/sun-web.xml" failonerror="false"/>
+  <copy file="${weblogic.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/weblogic.xml" failonerror="false"/>
+  <copy file="${glassfish-resources.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/glassfish-resources.xml" failonerror="false"/>
+  <copy todir="${build.classes.dir}/tmp/WEB-INF/lib" failonerror="false">
+      <fileset dir="lib">
+          <include name="**/*.jar"/>
+          <include name="**/*.zip"/>
+      </fileset>
+  </copy>
+  <copy file="${webservices.xml}" 
+        tofile="${build.classes.dir}/tmp/WEB-INF/webservices.xml"
+        failonerror="false"/>
+  <copy file="${mappingfile.location}/${mappingfile.name}" 
+        tofile="${build.classes.dir}/tmp/${mappingfile.name}"
+        failonerror="false"/>
+  <copy file="${wsdlfile.location}/${wsdlfile.name}" 
+        tofile="${build.classes.dir}/tmp/WEB-INF/wsdl/${wsdlfile.name}"
+        failonerror="false"/>
+  <copy file="${tagPlugins.xml}" 
+        tofile="${build.classes.dir}/tmp/WEB-INF/tagPlugins.xml"
+        failonerror="false"/>
+  <copy file="${web.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/web.xml"
+        failonerror="false"/>
+    <copy file="${persistence.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/classes/META-INF/persistence.xml"
+        failonerror="false"/>
+   <copy file="${beans.xml}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/beans.xml"
+        failonerror="false"/>
+
+   <copy file="${bundle.descriptor}" 
+      tofile="${build.classes.dir}/tmp/WEB-INF/classes/META-INF/MANIFEST.MF"
+        failonerror="false"/>
+  <copy file="${context.xml}"
+      tofile="${build.classes.dir}/tmp/META-INF/context.xml" failonerror="false"/>
+  <copy file="${cdi-extension.service}"
+      tofile="${build.classes.dir}/tmp/WEB-INF/classes/META-INF/services/javax.enterprise.inject.spi.Extension" failonerror="false"/>
+      
+  <copy todir="${build.classes.dir}/tmp/WEB-INF/classes">
+      <fileset dir="${war.classes}">
+          <include name="**/*.class"/>
+      </fileset>
+  </copy>
+  <echo message="Creating war file ${war.file}" level="verbose"/>
+  <mkdir dir="${basedir}/docroot"/>
+  <jar manifest="${bundle.descriptor}" jarfile="${war.file}" update="true">
+    <fileset dir="${build.classes.dir}/tmp" casesensitive="yes">
+      <include name="**/*class*"/>
+    </fileset>
+    <fileset dir="${basedir}/docroot" casesensitive="yes">
+      <include name="**/*.html"/>
+      <include name="**/*.HTML"/>
+      <include name="**/*.xhtml"/>
+      <include name="**/*.jsp"/>
+      <include name="**/*.jspx"/>
+      <include name="**/*.jspf"/>
+      <include name="**/*.gif"/>
+      <include name="**/*.do"/>
+      <include name="**/*.txt"/>
+      <include name="**/*.shtml"/>
+      <include name="**/*.jar"/>
+      <exclude name="**/*.java,**/*.xml,**/*.properties"/>
+    </fileset>
+    <fileset dir="${build.classes.dir}/tmp/" casesensitive="true">
+      <include name="WEB-INF/web.xml"/>
+      <include name="WEB-INF/glassfish-web.xml"/>
+      <include name="WEB-INF/glassfish-resources.xml"/>
+      <include name="WEB-INF/sun-web.xml"/>
+      <include name="WEB-INF/beans.xml"/>
+      <include name="WEB-INF/weblogic.xml"/>
+      <include name="WEB-INF/webservices.xml"/>
+      <include name="WEB-INF/tagPlugins.xml"/>
+      <include name="WEB-INF/lib/*"/>
+      <include name="WEB-INF/lib/extra/*"/>
+      <include name="WEB-INF/tlds/*"/>
+      <include name="WEB-INF/tags/*"/>
+      <include name="WEB-INF/wsdl/${wsdlfile.name}"/>
+      <include name="${mappingfile.name}"/>
+      <include name="META-INF/context.xml"/>
+      <include name="WEB-INF/classes/META-INF/services/javax.enterprise.inject.spi.Extension"/>
+      <include name="WEB-INF/classes/META-INF/persistence.xml"/>
+    </fileset>
+  </jar>       
+  <echo message="created WAB file ${war.file}" level="verbose"/>
+  <delete dir="${build.classes.dir}/tmp/WEB-INF" failonerror="false"/> 
+  <echo message="my webclient WAB classes are:${webclient.war.classes}" 
+      level="verbose"/>
+</target>
+
+
+<target name="test-tlds-exist">
+  <available file="${tlds}" property="tlds-exist"/>
+</target>
+
+<target name="test-tagfiles-exist">
+  <available file="${tagfiles}" property="tagfiles-exist"/>
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to package the ejb application to jar file -->
+<!--
+Variables Used:
+    ${ejb.jar}
+    ${build.classes.dir}
+    ${ejb-jar.xml}    
+    ${beans.xml}
+    ${persistence-orm.xml}    
+    ${sun-ejb-jar.xml}    
+    ${glassfish-ejb-jar.xml}    
+    ${sun-cmp-mappings.xml}    
+    ${metainf.dir}    
+    ${ejbjar.files}
+    ${dbschema}
+-->
+<!-- ================================================================ -->
+<target name="package-ejbjar-common">
+  <delete file="${ejb.jar}"/>
+  <echo message="common.xml: Generating ejb-jar inside build directory" 
+      level="verbose"/>
+  <mkdir dir="${build.classes.dir}/META-INF"/>
+  <copy file="${ejb-jar.xml}" 
+    tofile="${build.classes.dir}/META-INF/ejb-jar.xml"
+    failonerror="false"/>
+  <copy file="${persistence-orm.xml}" 
+    tofile="${build.classes.dir}/META-INF/persistence-orm.xml"
+    failonerror="false"/>
+  <copy file="${webservices.xml}" 
+    tofile="${build.classes.dir}/META-INF/webservices.xml"
+    failonerror="false"/>
+  <copy file="${sun-ejb-jar.xml}" 
+    tofile="${build.classes.dir}/META-INF/sun-ejb-jar.xml"
+    failonerror="false"/>
+  <copy file="${glassfish-ejb-jar.xml}" 
+    tofile="${build.classes.dir}/META-INF/glassfish-ejb-jar.xml"
+    failonerror="false"/>
+  <copy file="${glassfish-resources.xml}"
+    tofile="${build.classes.dir}/META-INF/glassfish-resources.xml"
+    failonerror="false"/>
+  <copy file="${sun-cmp-mappings.xml}"
+    tofile="${build.classes.dir}/META-INF/sun-cmp-mappings.xml"
+    failonerror="false"/>
+  <copy file="${beans.xml}"
+    tofile="${build.classes.dir}/META-INF/beans.xml"
+    failonerror="false"/>
+  <copy file="${dbschema}" todir="${build.classes.dir}" failonerror="false"/>
+  <jar jarfile="${ejb.jar}" basedir="${ejbjar.files}" update="true"
+    includes ="${ejbjar.classes}">
+    <metainf dir="${build.classes.dir}/META-INF">
+      <include name="ejb-jar.xml"/>
+      <include name="persistence-orm.xml"/>
+      <include name="webservices.xml"/>
+      <include name="sun-ejb-jar.xml"/>
+      <include name="glassfish-resources.xml"/>
+      <include name="glassfish-ejb-jar.xml"/>
+      <include name="sun-cmp-mappings.xml"/>
+      <include name="beans.xml"/>
+    </metainf>
+  </jar>       
+  <delete dir="${build.classes.dir}/META-INF" failonerror="false"/>
+  <delete file="${build.classes.dir}/*.dbschema" failonerror="false"/>
+</target>  
+
+<!-- ================================================================ -->
+<!-- Target to package the appclient application to jar file -->
+<!--
+Variables Used:
+    ${appclient.jar}
+    ${appclientjar.classes}    
+    ${appclientjar.files}    
+    ${build.classes.dir}
+    ${application-client.xml}    
+    ${sun-application-client.xml}    
+-->
+<!-- ================================================================ -->
+<target name="package-appclientjar-common">
+  <delete file="${appclient.jar}"/>
+  <echo message="common.xml: Generating appclient-jar inside build directory" 
+      level="verbose"/>
+  <mkdir dir="${build.classes.dir}/META-INF"/>
+  <copy file="${application-client.xml}"
+        tofile="${build.classes.dir}/META-INF/application-client.xml" 
+        failonerror="false"/>
+  <copy file="${sun-application-client.xml}" tofile="${build.classes.dir}/META-INF/sun-application-client.xml"
+        failonerror="false"/>
+  <jar jarfile="${appclient.jar}" basedir="${appclientjar.files}" 
+    update="true" includes ="${appclientjar.classes}" 
+    manifest="./client/MANIFEST.MF">         
+    <metainf dir="${build.classes.dir}/META-INF">
+      <include name="application-client.xml"/>
+      <include name="sun-application-client.xml"/>
+    </metainf>
+  </jar>       
+</target> 
+
+<!-- ================================================================ -->
+<!-- Target to create the ejb application jar file -->
+<!-- ================================================================ -->
+<target name="ejb-jar-common" depends="init-common">
+  <mkdir dir="${assemble.dir}"/>
+  <antcall target="package-ejbjar-common">
+    <param name="ejbjar.files" value="${build.classes.dir}"/>
+    <param name="ejb.jar" value="${assemble.dir}/${appname}-ejb.jar"/>
+  </antcall>
+</target>     
+
+<!-- ================================================================ -->
+<!-- Target to create the appclient jar file -->
+<!-- ================================================================ -->
+<target name="appclient-jar-common" depends="init-common">
+  <mkdir dir="${assemble.dir}"/>
+  <antcall target="package-appclientjar-common">
+    <param name="appclientjar.files" 
+      value="${build.classes.dir}"/>
+    <param name="appclient.jar" 
+      value="${assemble.dir}/${appname}-client.jar"/>
+  </antcall>
+</target>
+
+<!-- ===== package par ===== -->
+<target name="package-persistence-common" depends="init-common" if="ejb30-persistence">
+    <echo message="CREATING Persistence archive: common.xml: ${build.classes.dir}, ${assemble.dir}"/>
+    <mkdir dir="${assemble.dir}"/>
+    <delete file="${assemble.dir}/${appname}-persistence.jar" failonerror="false"/>
+    <echo message="common.xml: Generating PAR inside build directory"/>
+    <mkdir dir="${build.classes.dir}/META-INF"/>
+    <copy file="${persistence.xml}" tofile="${build.classes.dir}/META-INF/persistence.xml" failonerror="false"/>
+    <copy file="${mapping.xml}" tofile="${build.classes.dir}/META-INF/entity-mapping.xml" failonerror="false"/>
+    <!-- make a jar  -->
+    <jar jarfile="${assemble.dir}/${appname}-persistence.jar" basedir="${build.classes.dir}" update="true" includes ="**/*.class" excludes="**/*Local*.class,**/*Remote*.class,**/*Home*.class,**/*Bean*.class,**/*EJB*.class,**/*Exception.class">
+       <metainf dir="${build.classes.dir}/META-INF">
+           <include name="**/*.xml"/>
+       </metainf>
+    </jar>
+    <delete dir="${build.classes.dir}/META-INF" failonerror="false"/>
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to assemble the ejb application to ear file -->
+<!-- ================================================================ -->
+<target name="build-ear-common" depends="fixFiles,package-persistence-common,ejb-jar-common,appclient-jar-common,webclient-war-common">
+  <delete file="${assemble.dir}/${appname}.ear"/>
+  <mkdir dir="${assemble.dir}"/>
+  <mkdir dir="${build.classes.dir}/META-INF"/>   
+  <copy file="${sun-application.xml}" tofile="${build.classes.dir}/META-INF/sun-application.xml"  	failonerror="false"/> 
+  <copy file="${application.xml}" tofile="${build.classes.dir}/META-INF/application.xml"  	failonerror="false"/> 
+  <copy file="${glassfish-resources-ear.xml}" tofile="${build.classes.dir}/META-INF/glassfish-resources.xml" failonerror="false"  filtering="true"/>
+  <jar jarfile="${assemble.dir}/${appname}App.ear"> 
+    <fileset dir="${assemble.dir}">
+      <include name="*.jar"/>
+      <include name="*.war"/>
+    </fileset>
+    <fileset dir="${build.classes.dir}">
+	<include name="META-INF/sun-application.xml"/>
+	<include name="META-INF/application.xml"/>
+        <include name="META-INF/glassfish-resources.xml"/>
+    </fileset>
+    <fileset dir="${env.APS_HOME}" includes="lib/reporter.jar"/>
+  </jar>        
+</target>
+
+
+<!-- ================================================================ -->
+<!-- Target to assemble the ejb application to ear file -->
+<!-- ================================================================ -->
+<target name="ear-common" depends="fixFiles,init-common">
+  <delete file="${assemble.dir}/${appname}.ear"/>
+  <mkdir dir="${assemble.dir}"/>
+  <mkdir dir="${build.classes.dir}/META-INF"/>    
+  <copy file="${sun-application.xml}" tofile="${build.classes.dir}/META-INF/sun-application.xml"  	failonerror="false"/> 
+  <copy file="${glassfish-resources-ear.xml}" tofile="${build.classes.dir}/META-INF/glassfish-resources.xml" failonerror="false"  filtering="true"/>
+  <ear earfile="${assemble.dir}/${appname}App.ear" 
+    appxml="${application.xml}">
+    <fileset dir="${assemble.dir}">
+      <include name="*.jar"/>
+      <include name="*.war"/>
+    </fileset>
+    <fileset dir="${build.classes.dir}">
+	<include name="META-INF/sun-application.xml"/>
+        <include name="META-INF/glassfish-resources.xml"/>
+    </fileset>
+    <fileset dir="${env.APS_HOME}" includes="lib/reporter.jar"/>
+  </ear>        
+</target>
+
+
+<!-- run Verifier on the ear file -->
+<target name="verifier" depends="init-common">
+    <echo message="Running verifier
+        ear file ${assemble.dir}/${appname}App.ear " level="verbose"/>
+    <antcall target="verifier-common">
+        <param name="verifier.command" value=" -n -rw "/>
+        <param name="operand.props" value="${assemble.dir}/${appname}App.ear"/>
+    </antcall>
+    <echo message="Validate the static check results" level="verbose"/>
+</target>
+
+<target name="verifier-common">
+  <echo message="Operand ${operand.props}"  level="verbose"/>
+    <exec executable="${VERIFIER}" failonerror="true">
+        <arg line="${verifier.command} ${operand.props}" />
+    </exec>
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to execute asadmin commands  -->
+<!-- ================================================================ -->
+<target name="asadmin-common">
+  <echo message="Doing admin task ${admin.command}" level="verbose"/>
+  <echo message="Operand ${operand.props}"  level="verbose"/>
+  <echo message="asadmin ${admin.command} ${as.props} ${operand.props}"/>
+    <exec executable="${ASADMIN}" failonerror="true">
+        <arg line="${admin.command} ${as.props} ${operand.props}" />        
+    </exec>
+</target>
+
+<target name="asadmin-common-ignore-fail">
+  <echo message="Doing admin task ${admin.command} (ignore failures)" 
+      level="verbose"/>
+  <echo message="Operand ${operand.props}"  level="verbose"/>
+  <echo message="asadmin ${admin.command} ${as.props} ${operand.props}"/>
+    <exec executable="${ASADMIN}" failonerror="false">
+        <arg line="${admin.command} ${as.props} ${operand.props}" />        
+    </exec>
+</target>
+
+
+<!-- Target to execute a batchfile of asadmin commands  -->
+<!-- ================================================================ -->
+<target name="asadmin-batch-common">
+  <echo message="Doing admin batch task ${admin.command} --file" 
+      level="verbose"/>
+<property name="user.password.file" value="asadminuserpassword.txt"/>
+<echo file="${user.password.file}" append="false">
+AS_ADMIN_USERPASSWORD=${password}
+AS_ADMIN_PASSWORD=${admin.password}
+AS_ADMIN_ADMINPASSWORD=${admin.password}
+AS_ADMIN_MASTERPASSWORD=${master.password}
+</echo>
+  <exec executable="${ASADMIN}" failonerror="true">
+     <arg line="--user ${admin.user} --passwordfile ${user.password.file} --host ${admin.host} --port ${admin.port} --echo=true --terse=true"/>
+     <arg line="multimode --file ${asadmin.file}" />        
+  </exec>
+  <delete file="${user.password.file}" failonerror="false"/>
+</target>
+ 
+<!-- ================================================================ -->
+
+<!-- ================================================================ -->
+<!-- Target to create the user in file realm the AppServ  -->
+<!-- ================================================================ -->
+<target name="create-user-common" depends="init-common">
+<property name="user.password.file" value="asadminuserpassword.txt"/>
+<echo file="${user.password.file}" append="false">
+AS_ADMIN_USERPASSWORD=${password}
+AS_ADMIN_PASSWORD=${admin.password}
+AS_ADMIN_ADMINPASSWORD=${admin.password}
+AS_ADMIN_MASTERPASSWORD=${master.password}
+</echo>
+  <exec executable="${ASADMIN}">
+    <arg line="create-file-user"/>
+    <arg line="--user ${admin.user} --passwordfile ${user.password.file} --host ${admin.host} --port ${admin.port} --echo=true --terse=true"/>
+    <arg line="--groups ${groups}"/>
+    <arg line="--authrealmname ${authrealmname}"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="${user}"/>
+  </exec>
+  <delete file="${user.password.file}" failonerror="false"/>
+</target>
+     
+<!-- ================================================================ -->
+<!-- Target to delete the user in file realm the AppServ  -->
+<!-- ================================================================ -->
+<target name="delete-user-common" depends="init-common">
+<echo message="Deleting user ${user} in file realm" level="verbose"/>
+<exec executable="${ASADMIN}">
+  <arg line="delete-file-user"/>
+  <arg line="${as.props}"/>
+  <arg line="--authrealmname ${authrealmname}"/>
+  <arg line="--target ${appserver.instance.name}"/>
+  <arg line="${user}"/>
+</exec>
+</target>
+
+<!-- ================================================================ -->
+<!-- J2EE Connector related targets 			     	  -->
+<!-- ================================================================ -->
+
+<target name="create-connector-connpool-common"
+        depends="init-common, create-connector-connpool"/>
+
+<target name="create-connector-connpool" depends="init-common">
+  <property name="failonerror" value="false"/>
+  <property name="extra-params" value=""/>
+  <echo message="asadmin create-connector-connection-pool ${as.props} --raname ${ra.name} --connectiondefinition ${connection.defname} --target ${appserver.instance.name} ${connector.conpool.name}"/>
+  <exec executable="${ASADMIN}" failonerror="${failonerror}">
+    <arg line="create-connector-connection-pool"/>
+    <arg line="${as.props}"/>
+    <arg line="--raname ${ra.name}"/>
+    <arg line="${extra-params}"/>
+    <arg line="--connectiondefinition ${connection.defname}"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="${connector.conpool.name}"/>
+  </exec>
+</target>
+
+<target name="delete-connector-connpool-common" depends="init-common">
+  <echo message="asadmin delete-connector-connection-pool ${as.props} --cascade=true ${connector.conpool.name}"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="delete-connector-connection-pool"/>
+    <arg line="${as.props}"/>
+    <arg line="--cascade=true"/>
+    <arg line="${connector.conpool.name}"/>
+  </exec>
+</target>
+
+<!--  create/delete Connector resource  -->
+<target name="create-connector-resource-common" depends="init-common">
+  <property name="failonerror" value="false"/>
+  <echo message="asadmin create-connector-resource ${as.props} --poolname ${connector.conpool.name} --target ${appserver.instance.name} ${connector.jndi.name}"/>
+  <exec executable="${ASADMIN}" failonerror="${failonerror}">
+    <arg line="create-connector-resource"/>
+    <arg line="${as.props}"/>
+    <arg line="--poolname ${connector.conpool.name}"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="${connector.jndi.name}"/>
+  </exec>
+</target>
+
+<target name="delete-connector-resource-common" depends="init-common">
+  <echo message="asadmin delete-connector-resource ${as.props} ${connector.jndi.name}"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="delete-connector-resource"/>
+    <arg line="${as.props}"/>
+    <arg line="${connector.jndi.name}"/>
+  </exec>
+</target>
+
+<!--  deploy/undeploy RAR files                     -->
+<target name="deploy-rar-common" depends="init-common">
+  <echo message="Deploying ${rarfile}" level="verbose"/>
+  <echo message="asadmin deploy ${as.props} --target ${appserver.instance.name} --force=${force} ${rarfile}"/>
+    <property name="force" value="false"/>
+    <property name="extra-params" value=""/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="deploy"/>
+    <arg line="${as.props}"/>
+    <arg line="${extra-params}"/>
+    <arg line="--force=${force}"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="${rarfile}"/>
+  </exec>
+  <echo message="Deploying ${rarfile} on ${appserver.instance.name}"/>
+</target>
+
+<target name="undeploy-rar-common" depends="init-common">
+  <echo message="Undeploying ${undeployrar}" level="verbose"/>
+  <echo message="asadmin undeploy ${as.props} --target ${appserver.instance.name} --cascade=${cascade} ${undeployrar}"/>
+    <property name="cascade" value="false"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="undeploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--cascade=${cascade}"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="${undeployrar}"/>
+  </exec>
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to create JDBC connection pool  -->
+<!-- ================================================================ -->
+<target name="create-jdbc-connpool-common" depends="init-common">
+<echo message="created jdbc connection pool ${jdbc.conpool.name}" 
+    level="verbose"/>
+    <exec executable="${ASADMIN}" failonerror="false">
+        <arg line="create-jdbc-connection-pool"/>
+        <arg line="--datasourceclassname ${db.class}"/>
+        <arg line="--restype ${jdbc.resource.type}"/>
+        <arg line="--target ${appserver.instance.name}"/>
+        <arg line="${as.props}"/>
+        <arg line="${jdbc.conpool.name}"/>
+    </exec>
+    <antcall target="set-${db.type}-connpool-props"/>
+</target>
+
+<target name="create-jdbc-driver-connpool-common" depends="init-common">
+<echo message="created jdbc connection pool ${jdbc.conpool.name}" 
+    level="verbose"/>
+    <property name="extra-params" value=""/>
+    <exec executable="${ASADMIN}" failonerror="false">
+        <arg line="create-jdbc-connection-pool"/>
+        <arg line="--driverclassname ${db.class}"/>
+        <arg line="--restype ${jdbc.resource.type}"/>
+        <arg line="${extra-params}"/>
+        <arg line="--target ${appserver.instance.name}"/>
+        <arg line="${as.props}"/>
+        <arg line="${jdbc.conpool.name}"/>
+    </exec>
+    <antcall target="set-${db.type}-driver-connpool-props"/>
+</target>
+
+<target name="set-pointbase-connpool-props">
+  <antcall target="asadmin-common-ignore-fail">
+    <param name="admin.command" value="set" />
+    <param name="operand.props"
+      value="${resources.dottedname.prefix}.jdbc-connection-pool.${jdbc.conpool.name}.property.DatabaseName=${db.url}"/>
+  </antcall>
+  <antcall target="asadmin-common-ignore-fail">
+    <param name="admin.command" value="set" />
+    <param name="operand.props"
+      value="${resources.dottedname.prefix}.jdbc-connection-pool.${jdbc.conpool.name}.property.User=${db.user}" />
+  </antcall>
+  <antcall target="asadmin-common-ignore-fail">
+    <param name="admin.command" value="set" />
+    <param name="operand.props"
+      value="${resources.dottedname.prefix}.jdbc-connection-pool.${jdbc.conpool.name}.property.Password=${db.pwd}" />
+  </antcall>
+</target>
+
+<target name="set-pointbase-driver-connpool-props">
+  <antcall target="asadmin-common-ignore-fail">
+    <param name="admin.command" value="set" />
+    <param name="operand.props"
+	    value="${resources.dottedname.prefix}.jdbc-connection-pool.${jdbc.conpool.name}.property.URL=${db.url};user=${db.user};password=${db.pwd}"/>
+  </antcall>
+</target>
+
+<target name="set-derby-connpool-props">
+    <exec executable="${ASADMIN}" failonerror="false">
+      <arg line="set"/>
+      <arg line="${as.props}"/>
+      <arg line="domain.resources.jdbc-connection-pool.${jdbc.conpool.name}.property.User=${db.user}"/>
+    </exec>
+    <exec executable="${ASADMIN}" failonerror="false">
+      <arg line="set"/>
+      <arg line="${as.props}"/>
+      <arg line="domain.resources.jdbc-connection-pool.${jdbc.conpool.name}.property.Password=${db.pwd}"/>
+    </exec>
+    <exec executable="${ASADMIN}" failonerror="false">
+      <arg line="set"/>
+      <arg line="${as.props}"/>
+      <arg line="domain.resources.jdbc-connection-pool.${jdbc.conpool.name}.property.driverType=4"/>
+    </exec>
+    <exec executable="${ASADMIN}" failonerror="false">
+      <arg line="set"/>
+      <arg line="${as.props}"/>
+      <arg line="domain.resources.jdbc-connection-pool.${jdbc.conpool.name}.property.portNumber=${db.port}"/>
+    </exec>
+    <exec executable="${ASADMIN}" failonerror="false">
+      <arg line="set"/>
+      <arg line="${as.props}"/>
+      <arg line="domain.resources.jdbc-connection-pool.${jdbc.conpool.name}.property.dataBaseName=${db.name}"/>
+    </exec>
+    <exec executable="${ASADMIN}" failonerror="false">
+      <arg line="set"/>
+      <arg line="${as.props}"/>
+      <arg line="domain.resources.jdbc-connection-pool.${jdbc.conpool.name}.property.retrieveMessagesFromServerOnGetMessage=true"/>
+    </exec>
+    <exec executable="${ASADMIN}" failonerror="false">
+      <arg line="set"/>
+      <arg line="${as.props}"/>
+      <arg line="domain.resources.jdbc-connection-pool.${jdbc.conpool.name}.property.create=true"/>
+    </exec>
+    <exec executable="${ASADMIN}" failonerror="false">
+      <arg line="set"/>
+      <arg line="${as.props}"/>
+      <arg line="domain.resources.jdbc-connection-pool.${jdbc.conpool.name}.property.serverName=${db.host}"/>
+    </exec>
+</target>
+
+<target name="set-derby-driver-connpool-props">
+  <antcall target="asadmin-common-ignore-fail">
+    <param name="admin.command" value="set" />
+    <param name="operand.props"
+	    value="${resources.dottedname.prefix}.jdbc-connection-pool.${jdbc.conpool.name}.property.URL=${db.url};user=${db.user};password=${db.pwd}"/>
+  </antcall>
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to delete JDBC connection-pool  -->
+<!-- ================================================================ -->
+<target name="delete-jdbc-connpool-common" depends="init-common">
+<echo message="asadmin delete-jdbc-connection-pool ${as.props} --cascade=true --target ${appserver.instance.name} ${jdbc.conpool.name}"/>
+<exec executable="${ASADMIN}" failonerror="false">
+        <arg line="delete-jdbc-connection-pool"/>
+        <arg line="${as.props}"/>
+        <arg line="--cascade=true"/>
+        <arg line="--target ${appserver.instance.name}"/>
+        <arg line="${jdbc.conpool.name}"/>
+    </exec>
+    <echo message="cmd executed for ${appserver.instance.name}"/>  
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to create JDBC resource  -->
+<!-- ================================================================ -->
+<target name="create-jdbc-resource-common" depends="init-common">
+<echo message="Creating jdbc resource pool ${jdbc.resource.name}" 
+    level="verbose"/>
+  <echo message="asadmin create-jdbc-resource ${as.props} --connectionpoolid ${jdbc.conpool.name} --target ${appserver.instance.name} ${jdbc.resource.name}"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+        <arg line="create-jdbc-resource"/>
+        <arg line="${as.props}"/>
+        <arg line="--connectionpoolid ${jdbc.conpool.name}"/>
+        <arg line="--target ${appserver.instance.name}"/>
+        <arg line="${jdbc.resource.name}"/>
+    </exec>
+    <echo message="cmd executed for ${appserver.instance.name}"/>
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to delete JDBC resource  -->
+<!-- ================================================================ -->
+<target name="delete-jdbc-resource-common" depends="init-common">
+<echo message="asadmin delete-jdbc-resource ${as.props} --target ${appserver.instance.name} ${jdbc.resource.name}"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+        <arg line="delete-jdbc-resource"/>
+        <arg line="${as.props}"/>
+        <arg line="--target ${appserver.instance.name}"/>
+        <arg line="${jdbc.resource.name}"/>
+    </exec>
+    <echo message="cmd executed for ${appserver.instance.name}"/>
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to deploy JDBC resources  -->
+<!-- ================================================================ -->
+<target name="deploy-jdbc-common" depends="init-common">
+    <antcall target="create-jdbc-connpool-common" />
+    <antcall target="create-jdbc-resource-common" />
+</target>
+
+<target name="deploy-jdbc-driver-common" depends="init-common">
+    <antcall target="create-jdbc-driver-connpool-common" />
+    <antcall target="create-jdbc-resource-common" />
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to undeploy JDBC resources  -->
+<!-- ================================================================ -->
+<target name="undeploy-jdbc-common" depends="init-common">
+  <antcall target="delete-jdbc-resource-common" />
+  <antcall target="delete-jdbc-connpool-common" />
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to create persistence resource  -->
+<!-- ================================================================ -->
+<target name="create-persistence-resource-common" depends="init-common">
+<echo message="Creating pm resource at ${pm.resource.name}" 
+    level="verbose"/>
+    <echo message="asadmin create-persistence-resource ${as.props} --target ${appserver.instance.name} ${pm.resource.name}"/>
+    <exec executable="${ASADMIN}" failonerror="false">
+        <arg line="create-persistence-resource"/>
+        <arg line="${as.props}"/>
+        <arg line="--port ${admin.port}"/>
+        <arg line="--target ${appserver.instance.name}"/>
+        <arg line="${pm.resource.name}"/>
+    </exec>
+    <echo message="Created ${pm.resource.name} --target ${appserver.instance.name}"/> 
+  <antcall target="asadmin-common-ignore-fail">
+    <param name="admin.command" value="set"/>
+    <param name="operand.props"
+      value="${resources.dottedname.prefix}.persistence-manager-factory-resource.${pm.resource.name}.factory_class=${pm.factory.class}"/>
+  </antcall>
+  <antcall target="asadmin-common-ignore-fail">
+    <param name="admin.command" value="set" />
+    <param name="operand.props"
+      value="${resources.dottedname.prefix}.persistence-manager-factory-resource.${pm.resource.name}.jdbc_resource_jndi_name=${jdbc.resource.name}" />
+  </antcall>
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to delete persistence resource  -->
+<!-- ================================================================ -->
+<target name="delete-persistence-resource-common" depends="init-common">
+  <antcall target="asadmin-common-ignore-fail">
+    <param name="admin.command"
+      value="delete-persistence-resource 
+        --target ${appserver.instance.name}" />
+    <param name="operand.props" value="${pm.resource.name}" />
+  </antcall>
+</target>
+
+<target name="execute-sql-common" depends="init-common">
+<echo message="Executing sql statement at ${basedir} from ${sql.file}" 
+    level="verbose"/>
+  <sql
+    driver="${db.driver}"
+    url="${db.url}"
+    userid="${db.user}"
+    password="${db.pwd}"
+    src="${sql.file}"
+    onerror="continue"
+    print="yes"
+    classpath="${s1astest.classpath}"/>
+</target>
+
+
+<target name="execute-ejb-sql-common" depends="init-common">
+<echo message="Executing sql statement at ${basedir} from ${sql.file}" 
+    level="verbose"/>
+  <sql
+    driver="${db.driver}"
+    url="jdbc:derby://localhost:1527/sun-appserv-samples;create=true;"
+    userid="APP"
+    password="APP"
+    src="${sql.file}"
+    onerror="continue"
+    print="yes"
+    output="${build.classes.dir}/setupDBTables.out"
+    classpath="${s1astest.classpath}" />
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to create/delete javamail resources  -->
+<!-- 
+    Properties required: 
+    mailhost
+    fromaddress
+    debug
+    enabled
+    javamail.resource.name (e.g. mail/MySession)
+-->
+<!-- ================================================================ -->
+<target name="create-javamail-resource-common">
+  <exec executable="${ASADMIN}">
+    <arg line="create-javamail-resource"/>
+    <arg line="--port ${admin.port}"/>
+    <arg line="--mailhost ${mailhost}"/>
+    <arg line="--mailuser ${mailuser}"/>
+    <arg line="--fromaddress ${fromaddress}"/>
+    <arg line="--storeprotocol=imap"/>
+    <arg line="--storeprotocolclass=com.sun.mail.imap.IMAPStore"/>
+    <arg line="--transprotocol=smtp"/>
+    <arg line="--transprotocolclass=com.sun.mail.smtp.SMTPTransport"/>
+    <arg line="--debug=${debug}"/>
+    <arg line="--enabled=${enabled}"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="${as.props}"/>
+    <arg line="${javamail.resource.name}"/>
+  </exec>
+</target>
+
+<target name="delete-javamail-resource-common">
+  <exec executable="${ASADMIN}">
+    <arg line="delete-javamail-resource"/>
+    <arg line="--port ${admin.port}"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="${as.props}"/>
+    <arg line="${javamail.resource.name}"/>
+  </exec>
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to create database table through SQL file  -->
+<!-- ================================================================ -->
+<target name="create-sql-common" depends="init-common">
+<echo message="creating tables from ${basedir}/sql/${db.create}" 
+    level="verbose"/>
+  <sql
+    driver="${db.driver}"
+    url="${db.url}"
+    userid="${db.user}"
+    password="${db.pwd}"
+    src="sql/${db.create}"
+    onerror="continue"
+    print="yes"
+    output="${build.classes.dir}/setupDBTables.out"
+    classpath="${s1astest.classpath}"
+  />
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to delete database table through SQL file  -->
+<!-- ================================================================ -->
+<target name="delete-sql-common" depends="init-common">
+<echo message="dropping tables from ${basedir}/sql/${db.drop}" 
+    level="verbose"/>
+  <sql
+    driver="${db.driver}"
+    url="${db.url}"
+    userid="${db.user}"
+    password="${db.pwd}"
+    src="sql/${db.drop}"
+    onerror="continue"
+    print="yes"
+    output="${build.classes.dir}/setupDBTables.out"
+    classpath="${s1astest.classpath}"
+  />
+</target>
+
+<!-- ======================================================= -->
+<!-- Taget to create JMS Connection      -->
+<!-- ======================================================= -->
+<target name="create-jms-connection-common" depends="init-common">
+  <echo message="Creating JMS connection factory with name ${jms.factory.name}" 
+      level="verbose"/>
+  <exec executable="${ASADMIN}">
+    <arg line="create-jms-resource "/>
+    <arg line="--restype ${jms.factory.type}"/>    
+    <arg line="${as.props}"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="${jms.factory.name}" />
+  </exec>
+</target>
+
+<!-- ======================================================= -->
+<!-- Taget to delete JMS Connection      -->
+<!-- ======================================================= -->
+<target name="delete-jms-connection-common" depends="init-common">
+  <echo message="Delete JMS connection factory with name ${jms.factory.name}" 
+      level="verbose"/>
+  <exec executable="${ASADMIN}">
+    <arg line="delete-jms-resource "/>    
+    <arg line="${as.props}"/>
+    <arg line="--target ${appserver.instance.name}"/>    
+    <arg line="${jms.factory.name}"/>
+  </exec>
+</target>
+
+<!-- JMS: create/delete Destination Resource Targets -->
+<target name="create-jms-resource-common" depends="init-common">
+  <echo message="Creating JMS resource with name ${jms.resource.name}" 
+      level="verbose"/>
+
+  <exec executable="${ASADMIN}">
+    <arg line="create-jmsdest --desttype ${dest.type} "/>    
+    <arg line="${as.props}"/>
+    <arg line="${dest.name}"/>
+  </exec>
+
+  <exec executable="${ASADMIN}">
+    <arg line="create-jms-resource "/>
+    <arg line="--restype ${jms.resource.type}"/>
+    <arg line="--property imqDestinationName=${dest.name}"/>
+    <arg line="--target ${appserver.instance.name}"/>    
+    <arg line="${as.props}"/>
+    <arg line="${jms.resource.name}"/>
+  </exec>
+</target>
+
+<target name="delete-jms-resource-common" depends="init-common">
+  <echo message="Delete JMS resource with name ${jms.resource.name}" 
+      level="verbose"/>
+
+  <exec executable="${ASADMIN}">
+    <arg line="delete-jms-resource "/>
+    <arg line="--target ${appserver.instance.name}"/>    
+    <arg line="${as.props} ${jms.resource.name}"/>
+  </exec>
+
+  <exec executable="${ASADMIN}">
+    <arg line="delete-jmsdest --desttype ${dest.type} "/>    
+    <arg line="${as.props} ${dest.name}"/>
+  </exec>
+</target>
+
+<!-- deploy/undeploy JMS resources  -->
+<target name="deploy-jms-common" depends="init-common">
+  <antcall target="create-jms-connection-common" />
+  <antcall target="create-jms-resource-common" />
+</target>
+
+<target name="undeploy-jms-common" depends="init-common">
+  <antcall target="delete-jms-connection-common" />
+  <antcall target="delete-jms-resource-common" />
+</target>
+
+
+<!-- run StaticCheck on the ear file -->
+<target name="staticCheck-common" depends="init-common">
+    <echo message="Running StaticCheck -b on
+        ear file ${assemble.dir}/${appname}App.ear " level="verbose"/>
+    <antcall target="verifier-common">
+        <param name="static-check.command" value=" -b "/>
+        <param name="operand.props" value="${assemble.dir}/${appname}App.ear"/>
+    </antcall>
+    <echo message="Validate the static check results" level="verbose"/>
+</target>
+
+<target name="deploy-dir" depends="init-common">
+    <echo message="Deploying files: ${assemble.dir}" level="verbose"/>
+        <exec executable="${ASADMIN}" failonerror="false">
+            <arg line="deploy"/>
+            <arg line="${as.props}"/>
+            <arg line="--contextroot ${contextroot}"/>
+            <arg line="--target ${appserver.instance.name}"/>
+            <arg line="--name ${appname}-web"/>
+            <arg line="${assemble.dir}"/>
+        </exec>
+</target>
+
+<!-- deploy the applications in AppServ  -->
+<target name="deploy-common" depends="init-common">
+    <antcall target="deploy-common-pe"/>
+    <antcall target="deploy-common-ee"/>
+</target>       
+
+<target name="deploy-verify-common" depends="init-common">
+    <antcall target="deploy-verify-common-pe"/>
+    <antcall target="deploy-verify-common-ee"/>
+</target>       
+
+<target name="deploy-common-pe" depends="init-common" unless="ee">
+  <property name="deployed.app" value="${assemble.dir}/${appname}App.ear"/>
+   <property name="extra-params" value=""/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="deploy"/>
+    <arg line="${as.props}"/>    
+    <arg line="${extra-params}"/>    
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="--retrieve ${assemble.dir}"/>
+    <arg line="--libraries ${libraries}"/>
+<!-- deployed.app defaults to ${assemble.dir}/${appname}App.ear defined in properties.xml-->
+    <arg line="${deployed.app}"/>
+  </exec>
+  <echo message="Deployment on target server ${appserver.instance.name} successful"/>
+   </target>
+
+<target name="deploy-common-ee" depends="init-common" if="ee">      
+  <echo message="Deploying in EE..."/>
+  <property name="deployed.app" value="${assemble.dir}/${appname}App.ear"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="deploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="--retrieve ${assemble.dir}"/>
+    <arg line="--libraries ${libraries}"/>
+<!-- deployed.app defaults to ${assemble.dir}/${appname}App.ear defined in properties.xml-->
+    <arg line="${deployed.app}"/>
+  </exec>
+  <echo message="Deployment on target server ${appserver.instance.name} successful"/>
+</target>
+
+<target name="deploy-verify-common-pe" depends="init-common" unless="ee">
+  <property name="deployed.app" value="${assemble.dir}/${appname}App.ear"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="deploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--verify=true"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="--retrieve ${assemble.dir}"/>
+    <arg line="${deployed.app}"/>
+  </exec>
+  <echo message="Deployment on target server ${appserver.instance.name} successful"/>
+   </target>
+
+<target name="deploy-verify-common-ee" depends="init-common" if="ee">
+  <echo message="Deploying in EE..."/>
+  <property name="deployed.app" value="${assemble.dir}/${appname}App.ear"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="deploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--verify=true"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="--retrieve ${assemble.dir}"/>
+    <arg line="${deployed.app}"/>
+  </exec>
+  <echo message="Deployment on target server ${appserver.instance.name} successful"/>
+</target>
+
+<!-- deploy the web application in AppServ  -->
+<target name="deploy-jsp-common" depends="init-common">
+  <echo message="Deploying ${deploy.file} from ${basedir}." level="verbose"/>
+  <property name="precompilejsp" value="true"/>
+  <exec executable="${ASADMIN}" failonerror="true">
+    <arg line="deploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--precompilejsp=${precompilejsp}"/>
+    <arg line="--upload true"/>
+    <arg line="--retrieve ${assemble.dir}"/>
+    <arg line="--target ${appserver.instance.name}"/>	
+  </exec>
+</target>    
+
+<target name="deploy-war-name" depends="init-common">
+  <echo message="Deploying ${warname} from ${basedir}."
+      level="verbose"/>
+  <property name="force" value="false"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="deploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--contextroot ${contextroot}"/>
+    <arg line="--precompilejsp=${precompilejsp}"/>
+    <arg line="--force=${force}"/>
+    <arg line="--upload=true"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="--libraries ${libraries}"/>
+    <arg line="${warname}.war"/>
+  </exec>
+</target>
+
+<!-- deploy the standalone war in AppServ  -->
+<target name="deploy-war-common">
+<antcall target ="deploy-war-commonpe"/>
+<antcall target ="deploy-war-commonee"/>
+</target>
+
+<target name="deploy-wab-common">
+<antcall target ="deploy-wab-commonpe"/>
+</target>
+
+<target name="deploy-wab-commonpe" depends="init-common" unless="ee">
+  <echo message="Deploying WAB ${assemble.dir}/${appname}-web.war from ${basedir}." 
+      level="verbose"/>
+  <property name="precompilejsp" value="true"/>
+  <property name="force" value="false"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="deploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--precompilejsp=${precompilejsp}"/>
+    <arg line="--force=${force}"/>
+    <arg line="--upload=true"/>
+    <arg line="--target ${appserver.instance.name}"/>	
+    <arg line="--libraries ${libraries}"/>
+    <arg line="--type=osgi"/>
+    <arg line="${assemble.dir}/${appname}-web.war"/>
+  </exec>
+</target> 
+
+
+
+<target name="deploy-war-commonpe" depends="init-common" unless="ee">
+  <echo message="Deploying ${assemble.dir}/${appname}-web.war from ${basedir}." 
+      level="verbose"/>
+  <property name="precompilejsp" value="true"/>
+  <property name="force" value="false"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="deploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--contextroot ${contextroot}"/>
+    <arg line="--precompilejsp=${precompilejsp}"/>
+    <arg line="--force=${force}"/>
+    <arg line="--upload=true"/>
+    <arg line="--target ${appserver.instance.name}"/>	
+    <arg line="--libraries ${libraries}"/>
+    <arg line="${assemble.dir}/${appname}-web.war"/>
+  </exec>
+</target> 
+
+<target name="deploy-war-commonee" if="ee">
+  <property name="precompilejsp" value="true"/>
+  <property name="force" value="false"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="deploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--type web"/>
+    <arg line="--contextroot ${contextroot}"/>
+    <arg line="--precompilejsp=${precompilejsp}"/>
+    <arg line="--force=${force}"/>
+    <arg line="--upload=true"/>
+    <arg line="--target ${appserver.instance.name}"/>	
+    <arg line="--libraries ${libraries}"/>
+    <arg line="${assemble.dir}/${appname}-web.war"/>
+  </exec>
+</target>
+
+<!-- deploy the standalone war in AppServ without specifying any
+     contextroot argument, so that the context-root specified in
+     sun-web.xml takes effect
+-->
+<target name="deploy-war-no-context-root" depends="init-common">
+    <antcall target ="deploy-war-no-context-root-pe"/>
+    <antcall target ="deploy-war-no-context-root-ee"/>
+</target>
+
+<target name="deploy-war-no-context-root-pe" unless="ee">
+    <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="deploy"/>
+    <arg line="--user ${admin.user}"/>
+    <arg line="--passwordfile ${admin.password.file}"/>
+    <arg line="--host ${admin.host}"/>
+    <arg line="--port ${admin.port}"/>
+    <arg line="--upload=true"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="--libraries ${libraries}"/>
+    <arg line="${assemble.dir}/${appname}-web.war"/>
+    </exec>
+</target>
+
+<target name="deploy-war-no-context-root-ee" if="ee">
+    <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="deploy"/>
+    <arg line="--user ${admin.user}"/>
+    <arg line="--passwordfile ${admin.password.file}"/>
+    <arg line="--host ${admin.host}"/>
+    <arg line="--port ${admin.port}"/>
+    <arg line="--type web"/>
+    <arg line="--upload=true"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="--libraries ${libraries}"/>
+    <arg line="${assemble.dir}/${appname}-web.war"/>
+    </exec>
+</target>
+
+<!-- deploy the standalone jar in AppServ  -->
+<target name="deploy-jar-common" depends="init-common">
+  <exec executable="${ASADMIN}" failonerror="true">
+    <arg line="deploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--upload=true"/>
+    <arg line="--target ${appserver.instance.name}"/>	
+    <arg line="${assemble.dir}/${appname}-ejb.jar"/>
+  </exec>
+</target> 
+
+<!-- deploy the standalone jar in AppServ  -->
+<target name="deploy-client-common" depends="init-common">
+  <exec executable="${ASADMIN}" failonerror="true">
+    <arg line="deploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--upload=true"/>
+    <arg line="--retrieve ${assemble.dir}"/>    
+    <arg line="--target ${appserver.instance.name}"/>	
+    <arg line="${assemble.dir}/${appname}-client.jar"/>
+  </exec>
+</target> 
+
+<target name="undeploy-war-name" depends="init-common">
+  <property name="deployedapp.name" value="${warname}"/>
+  <property name="extra-params" value=""/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="undeploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="${extra-params}"/>
+<!-- deployedapp.name defaults to {appname}App.declared in properties.xml-->
+    <arg line="${deployedapp.name}"/>
+  </exec>
+</target>
+
+<!--  undeploy the applications in AppServ  -->
+<target name="undeploy-common" depends="init-common">
+  <property name="deployedapp.name" value="${appname}App"/>
+  <property name="extra-params" value=""/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="undeploy"/>
+    <arg line="${as.props}"/>
+<!--    
+<arg line=type ${apptype}/> 
+-->
+    <arg line="--target ${appserver.instance.name}"/>	
+    <arg line="${extra-params}"/>
+<!-- deployedapp.name defaults to {appname}App.declared in properties.xml-->
+    <arg line="${deployedapp.name}"/>	
+  </exec>
+</target>
+
+<!--  undeploy the standalone war in AppServ  -->
+<target name="undeploy-war-common" depends="init-common">
+    <echo message="Undeploying warfile ${appname}-web from 
+        ${assemble.dir}/${appname}-web.war from ${basedir}." level="verbose"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="undeploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--target ${appserver.instance.name}"/>	
+    <arg line="${appname}-web"/>
+  </exec>
+</target> 
+
+
+<!--  undeploy the standalone war in AppServ  -->
+<target name="undeploy-jar-common" depends="init-common">
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="undeploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--target ${appserver.instance.name}"/>	
+    <arg line="${appname}-ejb"/>
+  </exec>
+</target>
+
+<!--  undeploy the standalone client in AppServ  -->
+<target name="undeploy-client-common" depends="init-common">
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="undeploy"/>
+    <arg line="${as.props}"/>
+    <arg line="--target ${appserver.instance.name}"/>	
+    <arg line="${appname}-client"/>
+  </exec>
+</target>  
+
+
+<!-- run appclient in AppServ  -->
+<target name="runclient-common" depends="init-common">
+  <echo message="appclient -client ${assemble.dir}/${appname}AppClient.jar -name ${appname}Client -textauth -user j2ee -password j2ee -xml ${admin.domain.dir}/${admin.domain}/config/glassfish-acc.xml ${appclient.application.args}"/>
+  <exec executable="${APPCLIENT}" failonerror="false">
+    <!-- set APPCPATH to include reporter.jar so that all app clients
+         don't have to package the test framework in their apps -->
+    <env key="APPCPATH" file="${env.APS_HOME}/lib/reporter.jar"/>
+    <arg line="-client ${assemble.dir}/${appname}AppClient.jar"/>
+    <arg line="-name ${appname}Client"/>
+    <arg line="-textauth"/>
+    <arg line="-user j2ee"/>
+    <arg line="-password j2ee"/>
+    <arg line="-xml ${admin.domain.dir}/${admin.domain}/config/glassfish-acc.xml"/>
+    <arg line="${appclient.application.args}"/>
+  </exec>
+
+<!-- confirming report generation... -->
+    <antcall target="checkReporting-common">
+        <param name="test.name" value="${appname}"/>
+        <param name="test.description" value="${test.description}"/>
+        <param name="test.count" value="${test.count}"/>
+    </antcall>
+</target>
+
+<!-- run web client in AppServ  -->
+<target name="runwebclient-common" depends="init-common">
+  <echo message="Running Web Test from ${basedir}" level="verbose"/>
+  <echo message="http host: ${http.host}" level="verbose"/>
+  <echo message="http port: ${http.port}" level="verbose"/>
+  <java
+    fork="on" failonerror="false"
+    classpath="${env.APS_HOME}/lib/webtest.jar:${s1astest.classpath}"
+    classname="com.sun.ejte.ccl.webrunner.webtest.WebTest">
+    <arg value="script.txt"/>
+    <arg value="${http.host}"/>
+    <arg value="${http.port}"/>
+    <arg value="appserv-tests"/>
+    <arg value="${testsuite.id}"/>
+  </java>
+</target>
+  
+<!-- prepare Pointbase servers -->
+<target name="preparePB" depends="init-common">
+  <echo message="Starting Pointbase servers" level="verbose"/>
+  <copy file="${env.APS_HOME}/lib/pointbase.ini" 
+      tofile="${db.dir}/pointbase.ini"/>
+  <replace file="${db.dir}/pointbase.ini" token="@@@" value="${db.dir}"/>
+</target>
+
+<!-- start/stop Pointbase servers -->
+<target name="startPB" depends="preparePB">
+    <java classname="com.pointbase.net.netServer"
+        classpath="${db.classpath}" fork="true" spawn="true">
+      <arg line="/port:9092"/>
+      <arg line="/pointbase.ini=${db.dir}/pointbase.ini"/>
+      <arg line="/noconsole"/>
+    </java>
+    <java classname="com.pointbase.net.netServer"
+        classpath="${db.classpath}" fork="true" spawn="true">
+      <arg line="/port:9093"/>
+      <arg line="/pointbase.ini=${db.dir}/pointbase.ini"/>
+      <arg line="/noconsole"/>
+    </java>
+</target>
+
+<!-- target name="startPB" depends="preparePB">
+  <parallel>
+    <java classname="com.pointbase.net.netServer" 
+        classpath="${db.classpath}" failonerror="false" fork="true">
+      <arg line="/port:9092"/>
+      <arg line="/pointbase.ini=${db.dir}/pointbase.ini"/>
+    </java>
+    <java classname="com.pointbase.net.netServer" 
+        classpath="${db.classpath}" failonerror="true" fork="true">
+      <arg line="/port:9093"/>
+      <arg line="/pointbase.ini=${db.dir}/pointbase.ini"/>
+    </java>
+  </parallel>
+</target -->
+
+<!--  start Derby Database -->
+<target name="startDerby">
+  <condition property="darwin">
+	<os name="Mac OS X"/>
+  </condition>
+  <antcall target="startDerbyNonMac"/>
+  <antcall target="startDerbyMac"/>
+</target>
+
+<target name="startDerbyNonMac" depends="init-common" unless="darwin">
+        <echo message="StaRTing Derby DB servers in the Network Mode"/>
+  <parallel>
+    <java classname="org.apache.derby.drda.NetworkServerControl"
+      classpath="${db.classpath}" fork="true" spawn="true">
+      <arg line="-h localhost -p 1527 start"/>
+    </java>
+    <java classname="org.apache.derby.drda.NetworkServerControl"
+      classpath="${db.classpath}" fork="true" spawn="true">
+      <arg line="-h localhost -p 1528 start"/>
+    </java>
+  </parallel>     
+</target>
+
+<target name="startDerbyMac" depends="init-common" if="darwin">
+        <echo message="StaRTing Derby DB servers in the Network Mode"/>
+  <parallel>
+    <java classname="org.apache.derby.drda.NetworkServerControl"
+      classpath="${db.classpath}" fork="true" spawn="true">
+       <sysproperty key="derby.storage.fileSyncTransactionLog" value="true"/>
+      <arg line="-h localhost -p 1527 start"/>
+    </java>
+    <java classname="org.apache.derby.drda.NetworkServerControl"
+      classpath="${db.classpath}" fork="true" spawn="true">
+       <sysproperty key="derby.storage.fileSyncTransactionLog" value="true"/>     
+      <arg line="-h localhost -p 1528 start"/>
+    </java>
+  </parallel>
+</target>
+
+<!--  start Derby Database -->
+<target name="stopDerby" depends="init-common">
+        <echo message="Stopping Derby DB servers ..."/>
+  <parallel>
+    <java classname="org.apache.derby.drda.NetworkServerControl"
+      classpath="${db.classpath}" failonerror="true" fork="true">
+      <arg line="-h localhost -p 1527 shutdown"/>
+    </java>
+    <java classname="org.apache.derby.drda.NetworkServerControl"
+      classpath="${db.classpath}" failonerror="true" fork="true">
+      <arg line="-h localhost -p 1528 shutdown"/>
+    </java>
+  </parallel>
+</target>
+
+<target name="pb">
+  <echo message="So you are using pointbase ... !"/>
+  <property file="${env.APS_HOME}/config/pointbase.properties"/>
+</target>
+
+<!-- setup IMQ for RI Build -->
+<target name="setup-mq-common" depends="init-common">
+    <echo message="Executing Datastore setup for S1MQ. Required only for RI" 
+        level="verbose"/>
+    <echo message="${IMQDBMGR} -javahome ${java.home} 
+        -b ${admin.domain}_${appserver.instance.name} create all" 
+        level="verbose"/>
+  <exec executable="${IMQDBMGR}" failonerror="true">
+     <arg line="-javahome ${java.home} -b ${admin.domain}_${appserver.instance.name} create all" />
+  </exec>
+</target>
+
+<target name="import-wsdl" depends="init-common">
+    <mkdir dir="${build.classes.dir}"/>
+    <exec executable="${WSCOMPILE}">
+<!--
+        <arg line="-classpath ${s1astest.classpath}"/>
+-->
+        <arg line="-classpath ${build.classes.dir}"/>
+        <arg line="-import"/>
+        <arg line="-source 1.1.2"/>
+        <arg line="-keep"/>
+        <arg line="-d "/>
+        <arg path="${build.classes.dir}"/>
+        <!--
+        <arg line="-s "/>
+        <arg path="${basedir}/gensource"/>
+        -->
+        <arg line="-mapping ${build.classes.dir}/${mapping.file}"/>
+        <arg line="${config-wsdl.file}"/>
+    </exec>
+</target>
+
+<!-- Confirm Report Generation -->
+
+<target name="checkReporting-common">
+    <available file="RepRunConf.txt" type="file" property="isReported"/>
+    <antcall target="confirmReportPresent-common"/>
+    <antcall target="confirmMissingReport-common"/>
+</target>
+
+<target name="confirmReportPresent-common" if="isReported">
+    <echo message="file RepRunConf.txt is present."/>
+    <echo message="Test seems to be reported fine"/>
+    <delete file="RepRunConf.txt"/>
+</target>
+
+<target name="confirmMissingReport-common" unless="isReported">
+    <echo message="file RepRunConf.txt is missing!!!"/>
+    <echo message="Test does not seem to have been reported"/>
+    <echo message="Adding status 'did not run' into report..."/>
+    <java classname="com.sun.ejte.ccl.reporter.ReporterClient">
+        <classpath>
+            <pathelement location="${env.APS_HOME}/lib/reporter.jar"/>
+            <pathelement location="."/>
+        </classpath>
+        <arg value="${test.name}"/>
+        <arg value="${test.description}"/>
+        <arg value="${test.count}"/>
+    </java>
+    <delete file="RepRunConf.txt"/>
+</target>
+
+
+<!-- usage  -->
+<target name="usage-common">
+    <echo>         
+        ant clean           Remove all classes files
+        ant build           Build the application
+        ant deploy          Deploy the ear files to S1AS
+        ant run	            Run the application
+        ant undeploy        Undeploy the ear files from S1AS
+        ant usage           Display this message            
+    </echo>
+</target>
+
+
+<!-- EE Targets 8.1 -->
+<!--Added Feb 5th 2004 by Deepa Singh -->
+<target name="ee" depends="ee-common">
+    <echo message="So you are using Enterprise Edition"/>
+    <property name="ee" value="Enterprise Edition"/>
+    <property file="${env.APS_HOME}/eeconfig/ee-config.properties"/>
+    <loadfile property="target-server-port" srcFile="${admin.domain.dir}/${admin.domain}/config/glassfish-acc.xml"/>
+    <condition property="orbPortSet" value="true">
+        <contains string="${target-server-port}" substring="${orb.port}"/>
+    </condition>
+    <antcall target="change-orb-port"/>
+</target>
+
+<target name="change-orb-port" unless="orbPortSet">
+    <echo message="changing orb port from the default [3700] to ${orb.port}"/>
+    <replace file="${admin.domain.dir}/${admin.domain}/config/glassfish-acc.xml" token="3700" value="${orb.port}"/>
+</target>
+
+
+<target name="restart-instance">
+    <echo message="Restarting remote server instance,until this gets fixed"/>
+	<exec executable="${ASADMIN}" failonerror="false">
+        <arg line="stop-instance"/>
+        <arg line="${as.props}"/>
+        <arg line="${appserver.instance.name}"/>
+    </exec>
+    <sleep seconds="30"/>
+	<exec executable="${ASADMIN}" failonerror="false">
+        <arg line="start-instance"/>
+        <arg line="${as.props}"/>
+        <arg line="${appserver.instance.name}"/>
+    </exec>
+</target>
+
+<target name="testTimer" depends="init-common">
+
+<echo message="creating timer table from ${env.APS_HOME}/lib/ejbtimer_${db.type}.sql"/>
+    <sql
+    driver="${db.driver}"
+    url="${db.url}"
+    userid="${db.user}"
+    password="${db.pwd}"
+    src="${env.APS_HOME}/lib/ejbtimer_${db.type}.sql"
+    onerror="continue"
+    print="yes"
+    classpath="${s1astest.classpath}"/>
+
+</target>
+
+<target name="setupTimer" depends="init-common" if="ee">
+	<exec executable="${ASADMIN}" failonerror="false">
+        <arg line="create-resource-ref"/>
+        <arg line="${as.props}"/>
+        <arg line="--target server"/>
+        <arg line="${jdbc.resource.name}"/>
+    </exec>
+    <antcall target="asadmin-common-ignore-fail">
+        <param name="admin.command" value="set" />
+        <param name="operand.props"
+          value="${appserver.instance.name}-config.ejb-container.ejb-timer-service.timer-datasource=${jdbc.resource.name}"/>
+    </antcall>
+
+    <echo message="creating timer table from ${env.APS_HOME}/lib/ejbtimer_{db.type}.sql"/>
+    <sql
+        driver="${db.driver}"
+        url="${db.url}"
+        userid="${db.user}"
+        password="${db.pwd}"
+        src="${env.APS_HOME}/lib/ejbtimer_${db.type}.sql"
+        onerror="continue"
+        print="yes"
+        classpath="${s1astest.classpath}"/>
+
+    <antcall target="restart-instance"/>
+</target>
+
+<target name="unsetupTimer" depends="init-common" if="ee">
+	<exec executable="${ASADMIN}" failonerror="false">
+        <arg line="delete-resource-ref"/>
+        <arg line="${as.props}"/>
+        <arg line="--target server"/>
+        <arg line="${jdbc.resource.name}"/>
+    </exec>
+	<exec executable="${ASADMIN}" failonerror="false">
+        <arg line="unset"/>
+        <arg line="${appserver.instance.name}-config.ejb-container.ejb-timer-service.timer-datasource"/>
+    </exec>
+
+    <echo message="dropping timer table from ${env.APS_HOME}/lib/ejbtimer_${db.type}_drop.sql"/>
+    <sql
+        driver="${db.driver}"
+        url="${db.url}"
+        userid="${db.user}"
+        password="${db.pwd}"
+        src="${env.APS_HOME}/lib/ejbtimer_${db.type}_drop.sql"
+        onerror="continue"
+        print="yes"
+        classpath="${s1astest.classpath}"/>
+</target>
+
+<target name="prepare-truststore-common" depends="init-common">
+    <property name="truststore.db.file" location="${build.base.dir}/cacerts.jks"/>
+    <property name="cert.rfc.file" location="${build.base.dir}/${cert.nickname}.rfc"/>
+
+    <delete quiet="true" file="${truststore.db.file}"/>
+    <delete quiet="true" file="${cert.rfc.file}"/>
+
+    <!--
+      Determine if we need to use the certutil or the keytool command to
+      access the certificate keystore
+    -->
+    <property name="certutil.db.dir" location="${admin.domain.dir}/${admin.domain}/config"/>
+    <condition property="use.certutil">
+        <and>
+            <or>
+                <available file="${env.S1AS_HOME}/lib/certutil"/>
+                <available file="${env.S1AS_HOME}/lib/certutil.exe"/>
+            </or>
+            <available file="${certutil.db.dir}/cert8.db"/>
+            <available file="${certutil.db.dir}/key3.db"/>
+            <available file="${certutil.db.dir}/secmod.db"/>
+        </and>
+    </condition>
+    <antcall target="prepare-truststore-certutil-common"/>
+    <antcall target="prepare-truststore-keytool-common"/>
+</target>
+
+<target name="prepare-truststore-certutil-common" depends="init-common" if="use.certutil">
+    <exec executable="${env.S1AS_HOME}/lib/certutil" failonerror="true" output="${cert.rfc.file}">
+        <!--
+          LD_LIBRARY_PATH is needed on Unix platforms and should have no
+          effect on Windows
+        -->
+        <env key="LD_LIBRARY_PATH" path="${env.S1AS_HOME}/lib"/>
+        <arg line="-L -n '${cert.nickname}' -a"/>
+        <arg value="-d"/>
+        <arg file="${certutil.db.dir}"/>
+    </exec>
+    <exec executable="${java.home}/bin/keytool" failonerror="true">
+        <arg line="-import -trustcacerts -alias '${cert.nickname}' -storepass '${ssl.password}' -noprompt"/>
+        <arg value="-file"/>
+        <arg file="${cert.rfc.file}"/>
+        <arg value="-keystore"/>
+        <arg file="${truststore.db.file}"/>
+    </exec>
+</target>
+
+
+<target name="prepare-truststore-keytool-common" depends="init-common" unless="use.certutil">
+    <copy file="${admin.domain.dir}/${admin.domain}/config/cacerts.jks" tofile="${truststore.db.file}"/>
+</target>
+
+
+<target name="prepare-keystore-common" depends="init-common">
+    <property name="keystore.db.file" location="${build.base.dir}/keystore.jks"/>
+    <delete quiet="true" file="${keystore.db.file}"/>
+    <copy file="${admin.domain.dir}/${admin.domain}/config/keystore.jks" tofile="${keystore.db.file}" failonerror="false"/>
+</target>
+
+<target name="get-version-common" depends="init-common">
+    <exec executable="${ASADMIN}" failonerror="false" outputproperty="appserver.version">
+        <arg line="version"/>
+        <arg line="${as.props}"/>
+        <arg line="--verbose"/>
+    </exec>
+    <condition property="platform" value="true">
+        <contains string="${appserver.version}" substring="Platform" casesensitive="false"/>
+    </condition>
+    <condition property="enterprise" value="true">
+        <contains string="${appserver.version}" substring="Enterprise" casesensitive="false"/>
+    </condition>
+    <antcall target="platform-common"/>
+    <antcall target="enterprise-common"/>
+</target>
+
+<target name="platform-common" if="platform">
+    <echo message="This is Platform Version***"/>
+</target>
+
+<target name="enterprise-common" if="enterprise">
+    <echo message="This is Enterprise Version***"/>
+</target>
+
+<target name="create-PermSize" depends="init-common">
+  <echo message="asadmin create-jvm-options ${as.props} -- -XX:MaxPermSize=${jvm.maxpermsize}"/>
+  <exec executable="${ASADMIN}" failonerror="false">
+    <arg line="create-jvm-options"/>
+    <arg line="${as.props}"/>
+    <arg line="--target ${appserver.instance.name}"/>
+    <arg line="-- -XX\:MaxPermSize=${jvm.maxpermsize}"/>
+  </exec>
+</target>
+
+    <target name="restart-server">
+        <antcall target="stop-server"/>
+        <sleep seconds="5"/>
+        <antcall target="start-server"/>
+
+    </target>
+
+    <target name="stop-server" depends="setOSConditions">
+        <antcall target="stop-server-unix"/>
+        <antcall target="stop-server-windows"/>
+    </target>
+
+    <target name="stop-server-unix" if="isUnix">
+        <echo message="stopping server on unix ..."/>
+        <exec executable="${env.S1AS_HOME}/bin/asadmin">
+            <arg value="stop-domain"/>
+        </exec>
+        <sleep seconds="10"/>
+    </target>
+
+    <target name="stop-server-windows" if="isWindows">
+        <echo message="Stopping server on windows ..."/>
+        <exec executable="cmd">
+            <arg value="/c"/>
+            <arg value="${env.S1AS_HOME}\bin\asadmin.bat"/>
+            <arg value="stop-domain"/>
+        </exec>
+        <sleep seconds="5"/>
+    </target>
+
+    <target name="start-server" depends="setOSConditions">
+
+        <echo>+-----------------------------+</echo>
+        <echo>| |</echo>
+        <echo>| S T A R T I N G GLASSFISH |</echo>
+        <echo>| in Felix mode |</echo>
+        <echo>| |</echo>
+        <echo>+-----------------------------+</echo>
+
+        <antcall target="start-server-unix"/>
+        <antcall target="start-server-windows"/>
+    </target>
+
+    <target name="start-server-unix" if="isUnix">
+        <exec executable="${env.S1AS_HOME}/bin/asadmin">
+            <env key="GlassFish_Platform" value="Felix"/>
+            <arg value="start-domain"/>
+        </exec>
+        <sleep seconds="10"/>
+    </target>
+
+    <target name="start-server-windows" if="isWindows">
+        <exec executable="cmd" spawn="true">
+            <env key="GlassFish_Platform" value="Felix"/>
+            <arg value="/c"/>
+            <arg value="${env.S1AS_HOME}\bin\asadmin.bat"/>
+            <arg value="start-domain"/>
+        </exec>
+        <sleep seconds="5"/>
+    </target>
+
+    <target name="create-jvm-options" depends="init-common">
+        <exec executable="${ASADMIN}">
+            <arg line="create-jvm-options"/>
+            <arg line="--user ${admin.user} --host ${admin.host} --port ${admin.port} --echo=true --terse=true"/>
+            <arg line="${option}"/>
+        </exec>
+        <echo message="REQUIRED TO RESTART SERVER......."/>
+    </target>
+
+    <target name="delete-jvm-options" depends="init-common">
+        <exec executable="${ASADMIN}">
+            <arg line="delete-jvm-options"/>
+            <arg line="--user ${admin.user} --host ${admin.host} --port ${admin.port} --echo=true --terse=true"/>
+            <arg line="${option}"/>
+        </exec>
+        <echo message="REQUIRED TO RESTART SERVER......."/>
+    </target>
+
+<!-- ================================================================ -->
+<!-- Target to Flush connection pool  -->
+<!-- ================================================================ -->
+<target name="flush-connpool-common" depends="init-common">
+<echo message="Flush connection pool ${jdbc.conpool.name}" 
+    level="verbose"/>
+    <exec executable="${ASADMIN}" failonerror="false">
+        <arg line="flush-connection-pool"/>
+        <arg line="${as.props}"/>
+        <arg line="${jdbc.conpool.name}"/>
+    </exec>
+</target>
+
+<!-- ================================================================ -->
+<!-- Target to generate a neat Html report -->
+<!-- ================================================================ -->
+<target name="dev-report" depends="init-common">
+    <java classname="com.sun.appserv.test.util.results.HtmlReportProducer" fork="true" failonerror="false"
+          classpath="${env.APS_HOME}/lib/reportbuilder.jar">
+        <arg value="${env.APS_HOME}/test_results.xml"/>
+    </java>
+</target>
+
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/descriptor/MANIFEST.MF b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/descriptor/MANIFEST.MF
new file mode 100644
index 0000000..5b53761
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/descriptor/MANIFEST.MF
@@ -0,0 +1,21 @@
+Manifest-Version: 1.0
+Archiver-Version: Plexus Archiver
+Created-By: 1.6.0_20 (Sun Microsystems Inc.)
+Built-By: siva
+Build-Jdk: 1.6.0_20
+Extension-Name: simple-cdi-osgi-test
+Implementation-Title: simple-cdi-osgi-test
+Implementation-Version: 1.0
+Bundle-ClassPath: WEB-INF/classes/
+Private-Package: tests.cdi;version="1.0"
+Export-EJB: ALL
+Bundle-Version: 1.0
+Tool: Bnd-0.0.311
+Bundle-Name: Test CDI OSGI
+Bnd-LastModified: 1283184402694
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: tests.cdi.simple-cdi-osgi-test
+Web-ContextPath: /test
+Import-Package: javax.enterprise.context,javax.enterprise.inject,javax
+ .inject,javax.enterprise.inject.spi,javax.servlet,javax.servlet.annotation,javax.servlet.http,javax.naming
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/descriptor/web.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/descriptor/web.xml
new file mode 100644
index 0000000..4812478
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/descriptor/web.xml
@@ -0,0 +1,24 @@
+<?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">
+<!-- IT's AN EMPTY FILE. Needed to satisfy maven-war-plugin.
+-->
+</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/servlet/tests/cdi/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/servlet/tests/cdi/TestBean.java
new file mode 100644
index 0000000..fad6896
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/servlet/tests/cdi/TestBean.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 tests.cdi;
+
+//Simple TestBean to test CDI. 
+//This bean implements Serializable as it needs to be placed into a Stateful Bean
+public class TestBean
+{}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/servlet/tests/cdi/TestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/servlet/tests/cdi/TestServlet.java
new file mode 100644
index 0000000..9e733d8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/simple-wab-with-cdi/servlet/tests/cdi/TestServlet.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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 tests.cdi;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Enumeration;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.inject.Inject;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.naming.InitialContext;
+
+@WebServlet(urlPatterns={"/*"})
+public class TestServlet extends HttpServlet {
+    @Inject TestBean tb;
+    @Inject BeanManager bm;
+    BeanManager bm1;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0");
+        String msg = "";
+        if (tb == null) msg += "Bean injection into Servlet failed";
+        if (bm == null) msg += "BeanManager Injection via @Inject failed";
+        try {
+            bm1 = (BeanManager)((new InitialContext()).lookup("java:comp/BeanManager"));
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            msg += "BeanManager Injection via component environment lookup failed";
+        }
+        if (bm1 == null) msg += "BeanManager Injection via component environment lookup failed";
+        
+        System.out.println("BeanManager is " + bm);
+        System.out.println("BeanManager via lookup is " + bm1);
+        writer.write(msg + "\n");
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/README b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/README
new file mode 100644
index 0000000..96001d0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/README
@@ -0,0 +1 @@
+A Singleton Startup EJB using constructor based injection of CDI beans [issue 13072]
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/build.properties b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/build.properties
new file mode 100644
index 0000000..982c344
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/build.properties
@@ -0,0 +1,27 @@
+<!--
+
+    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-singleton-hello"/>
+<property name="appname" value="${module}"/> 
+<property name="jndiroot" value="${appname}-ejb"/>    
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="se.client" value="com.acme.Client"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
+	
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/build.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/build.xml
new file mode 100644
index 0000000..d29250d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/build.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../../config/common.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="cdi-singleton-hello-App" default="usage" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+      <antcall  target="clean-common"/>
+    </target>
+ 
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="ejb"/>
+        </antcall>
+        <antcall target="compile-common">
+            <param name="src" value="client"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <antcall target="ejb-jar-common">
+            <param name="ejbjar.classes" 
+              value="com/acme/*.class"/>
+        </antcall>
+    </target> 
+    
+    <target name="deploy" 
+            depends="init-common">
+        <antcall target="deploy-jar-common"/>
+    </target>
+
+    <target name="run" depends="init-common">
+        <antcall target="run_se"/>
+    </target>
+ 
+    <target name="run_se" depends="init-common">
+       <java  fork="on" 
+              failonerror="true"
+              classpath="${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/lib/appserv-rt.jar:${build.classes.dir}:${env.APS_HOME}/lib/reporter.jar"
+              classname="${se.client}">
+           <sysproperty key="org.omg.CORBA.ORBInitialPort" value="${orb.port}"/>
+           <arg line="${jndiroot}"/>
+        </java>
+    </target>
+
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-jar-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/client/Client.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/client/Client.java
new file mode 100644
index 0000000..4ec0022
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/client/Client.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+
+import javax.ejb.*;
+import javax.annotation.*;
+
+import javax.naming.InitialContext;
+
+import javax.management.j2ee.ManagementHome;
+import javax.management.j2ee.Management;
+import javax.rmi.PortableRemoteObject;
+
+import com.acme.Hello;
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+public class Client {
+
+    private static SimpleReporterAdapter stat = 
+        new SimpleReporterAdapter("appserv-tests");
+
+    private static String appName;
+
+    public static void main(String args[]) {
+
+	appName = args[0]; 
+	stat.addDescription(appName);
+	Client client = new Client(args);       
+        client.doTest();	
+        stat.printSummary(appName + "ID");
+    }
+
+    public Client(String[] args) {}
+
+    public void doTest() {
+
+	try {
+
+	    // Ensure that MEJB is registered under all three of its JNDI names
+	    System.out.println("Looking up MEJB Homes");
+	    ManagementHome mh1Obj = (ManagementHome) new InitialContext().lookup("ejb/mgmt/MEJB");
+	    ManagementHome mh2Obj = (ManagementHome) new InitialContext().lookup("java:global/mejb/MEJBBean");
+	    ManagementHome mh3Obj = (ManagementHome) new InitialContext().lookup("java:global/mejb/MEJBBean!javax.management.j2ee.ManagementHome");
+        addStatus("mejb relative lookup", (mh1Obj != null));
+        addStatus("mejb global lookup", (mh2Obj != null));
+        addStatus("mejb global lookup with explicit ManagedHome interface", (mh3Obj != null));
+
+	    Hello hello = (Hello) new InitialContext().lookup("java:global/" + appName + "/SingletonBean");
+        String response = hello.hello();
+        addStatus("Singleton bean response", response.equals("hello, world!\n"));
+
+	    try {
+    		hello.testError();
+            addStatus("Expected EJBException from Singleton.testError()", false);
+	    	throw new RuntimeException("Expected EJBException");
+	    } catch(EJBException e) {
+            addStatus("Expected EJBException from Singleton.testError()", true);
+	    }
+
+        String injectionStatus = hello.testInjection();
+        System.out.println("Injection tests in server response"+ injectionStatus);
+        addStatus("Testing Injection in EJB Singleton" , injectionStatus.trim().equals(""));
+
+	} catch(Exception e) {
+	    stat.addStatus("local main", stat.DID_NOT_RUN);
+	    e.printStackTrace();
+	}
+    }
+
+    private void addStatus(String message, boolean result){
+            stat.addStatus(message, (result ? stat.PASS: stat.FAIL));
+    }
+
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/ejb/com/acme/Bar.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/ejb/com/acme/Bar.java
new file mode 100644
index 0000000..07a3880
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/ejb/com/acme/Bar.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import javax.annotation.ManagedBean;
+
+@ManagedBean
+public class Bar implements IBar{
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/ejb/com/acme/Foo.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/ejb/com/acme/Foo.java
new file mode 100644
index 0000000..1d87d9d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/ejb/com/acme/Foo.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import javax.ejb.*;
+
+public class Foo {
+
+    @EJB Hello hello;
+    @javax.inject.Inject TestBean tb;
+    
+    public boolean testInjection(){
+        return tb != null;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/ejb/com/acme/Hello.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/ejb/com/acme/Hello.java
new file mode 100644
index 0000000..23f4df7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/ejb/com/acme/Hello.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+public interface Hello {
+
+    String hello();
+
+    void testError();
+    String testInjection();
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/ejb/com/acme/IBar.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/ejb/com/acme/IBar.java
new file mode 100644
index 0000000..172406e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/ejb/com/acme/IBar.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+public interface IBar {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/ejb/com/acme/SingletonBean.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/ejb/com/acme/SingletonBean.java
new file mode 100644
index 0000000..784bb16
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/ejb/com/acme/SingletonBean.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.annotation.Resource;
+import javax.ejb.EJBException;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+import javax.inject.Inject;
+
+import org.omg.CORBA.ORB;
+
+@Singleton
+@Startup
+public class SingletonBean {
+
+    @Resource
+    private ORB orb;
+
+    @Inject
+    Foo foo;
+    @Inject
+    TestBean tb;
+    
+    Bar b;
+    
+    @Inject
+    public SingletonBean(Bar b){
+        this.b = b;
+    }
+
+    @PostConstruct
+    public void init() {
+        System.out.println("In SingletonBean::init()");
+        System.out.println("orb = " + orb);
+        if (orb == null) {
+            throw new EJBException("null ORB");
+        }
+    }
+
+    public String hello() {
+        System.out.println("In SingletonBean::hello()");
+        return "hello, world!\n";
+    }
+
+    public void testError() {
+        throw new Error("test java.lang.Error");
+    }
+
+    public String testInjection() {
+        if (foo == null)
+            return "foo is null";
+        if (tb == null)
+            return "tb is null";
+        if (!foo.testInjection())
+            return "testInjection in Foo failed";
+        if (b == null)
+            return "Constructor Injection of bean failed"; 
+        return "";
+    }
+
+    @PreDestroy
+    public void destroy() {
+        System.out.println("In SingletonBean::destroy()");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/ejb/com/acme/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/ejb/com/acme/TestBean.java
new file mode 100644
index 0000000..22e521a
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/singleton-startup/hello/ejb/com/acme/TestBean.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.acme;
+
+//Simple test bean to test injection
+public class TestBean {}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/README b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/README
new file mode 100644
index 0000000..f274683
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/README
@@ -0,0 +1,5 @@
+test for issue GLASSFISH-11683
+
+The slf4j api and impl bundled with weld-osgi-bundle must not be exported 
+to applications and if an application bundles a custom slf4j api and an
+implementation bundle, then the bundled SLF4j implmentation must be used
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/WebTest.java
new file mode 100644
index 0000000..511806f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/WebTest.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "slf4j-visibility";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for @WebServlet");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (isExpectedResponse(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: org.jboss.logging.JDKLogger and org.jboss.logging.jboss-logging in output" + 
+                          ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+
+    private boolean isExpectedResponse(String line) {
+        return line.contains("org.jboss.logging.JDKLogger") && line.contains("org.jboss.logging.jboss-logging");
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/build.properties b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/build.properties
new file mode 100644
index 0000000..14467fd
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-slf4j-visibility"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/build.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/build.xml
new file mode 100644
index 0000000..83ad666
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/build.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/lib/slf4j-api-1.7.25.jar b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/lib/slf4j-api-1.7.25.jar
new file mode 100644
index 0000000..0143c09
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/lib/slf4j-api-1.7.25.jar
Binary files differ
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/lib/slf4j-simple-1.7.25.jar b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/lib/slf4j-simple-1.7.25.jar
new file mode 100644
index 0000000..a7260f3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/lib/slf4j-simple-1.7.25.jar
Binary files differ
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/servlet/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/servlet/TestBean.java
new file mode 100644
index 0000000..6d059e2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/servlet/TestBean.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+//Simple TestBean to test CDI. 
+//This bean implements Serializable as it needs to be placed into a Stateful Bean
+public class TestBean
+{}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/servlet/TestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/servlet/TestServlet.java
new file mode 100644
index 0000000..bc1c99f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/smoke-tests/slf4j-visibility/servlet/TestServlet.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.IOException;
+import java.io.PrintWriter;
+
+import javax.enterprise.inject.spi.BeanManager;
+import javax.inject.Inject;
+import javax.naming.InitialContext;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jboss.logging.Logger;
+//import org.slf4j.LoggerFactory;
+
+@WebServlet(name="mytest",
+        urlPatterns={"/myurl"},
+        initParams={ @WebInitParam(name="n1", value="v1"), @WebInitParam(name="n2", value="v2") } )
+public class TestServlet extends HttpServlet {
+    @Inject TestBean tb;
+    @Inject BeanManager bm;
+    BeanManager bm1;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        String msg = "";
+        if (tb == null) msg += "Bean injection into Servlet failed";
+        if (bm == null) msg += "BeanManager Injection via @Inject failed";
+        try {
+            bm1 = (BeanManager)((new InitialContext()).lookup("java:comp/BeanManager"));
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            msg += "BeanManager Injection via component environment lookup failed";
+        }
+        if (bm1 == null) msg += "BeanManager Injection via component environment lookup failed";
+
+        
+        System.out.println("BeanManager is " + bm);
+        System.out.println("BeanManager via lookup is " + bm1);
+        
+        Logger l = Logger.getLogger(getClass());
+        String s = "[ Hello World is logged by an instance of " + l.getClass() + ", which is loaded by " + l.getClass().getClassLoader() + "]";
+        msg += s;
+        l.info(s);
+        
+        writer.write(msg + "\n");
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/README b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/README
new file mode 100644
index 0000000..e8a542b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/README
@@ -0,0 +1,5 @@
+Test
+- Use of Specializes 
+    - tests the problem with alternatives. When an alternative is enabled (either
+    via an alternative stereotype or explicitly) and a default bean with a qualifier exists
+    that there is no alternative for, the default bean is injected.  
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/build.properties b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/build.properties
new file mode 100644
index 0000000..8250682
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-specialization-leak-alternatives"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/build.xml b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/build.xml
new file mode 100644
index 0000000..0b9b3a3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/build.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/client/test/client/WebTest.java
new file mode 100644
index 0000000..98789e4
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/client/test/client/WebTest.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+    private static final String TEST_NAME = "specialization-alternative-leaks";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for stereotypes");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: "
+                        + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/descriptor/beans.xml
new file mode 100644
index 0000000..1cd96c3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/descriptor/beans.xml
@@ -0,0 +1,33 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+   <interceptors>
+      <class>test.beans.artifacts.TransactionInterceptor</class>
+      <class>test.beans.artifacts.RequiresNewTransactionInterceptor</class>
+   </interceptors>
+   <alternatives>
+   <stereotype>test.beans.artifacts.MockStereotype</stereotype>
+   </alternatives>
+   
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/TestBeanInterface.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/TestBeanInterface.java
new file mode 100644
index 0000000..7b4277f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/TestBeanInterface.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public interface TestBeanInterface {
+    public void m1();
+
+    public void m2();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/artifacts/LeakQualifier.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/artifacts/LeakQualifier.java
new file mode 100644
index 0000000..38fe2cb
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/artifacts/LeakQualifier.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface LeakQualifier {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/artifacts/MockStereotype.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/artifacts/MockStereotype.java
new file mode 100644
index 0000000..35fa89e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/artifacts/MockStereotype.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.enterprise.inject.Alternative;
+
+
+
+@Alternative
+@javax.enterprise.inject.Stereotype
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ TYPE })
+public @interface MockStereotype {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/artifacts/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/artifacts/Preferred.java
new file mode 100644
index 0000000..b7584c8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/artifacts/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/artifacts/RequiresNewTransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/artifacts/RequiresNewTransactionInterceptor.java
new file mode 100644
index 0000000..a10a125
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/artifacts/RequiresNewTransactionInterceptor.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+import test.beans.nonmock.TestDependentBean;
+
+@Interceptor
+@Transactional(requiresNew=true, rolesAllowed={"admin", "manager"})
+//the rolesAllowed value must be ignored as it s a non-binding attribute
+public class RequiresNewTransactionInterceptor  {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestDependentBean tb;
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("RequiresNewTransactionInterceptor::AroundInvoke");
+        if (tb == null) errorMessage="Dependency Injection " +
+                "into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/artifacts/TransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/artifacts/TransactionInterceptor.java
new file mode 100644
index 0000000..f02f31b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/artifacts/TransactionInterceptor.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+import test.beans.nonmock.TestDependentBean;
+
+@Interceptor
+@Transactional
+public class TransactionInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestDependentBean tb;
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("TransactionInterceptor::AroundInvoke");
+        if (tb == null) errorMessage="Dependency Injection " +
+        		"into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/artifacts/Transactional.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/artifacts/Transactional.java
new file mode 100644
index 0000000..79cff9b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/artifacts/Transactional.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.enterprise.util.Nonbinding;
+import javax.interceptor.InterceptorBinding;
+
+@Target({TYPE, METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface Transactional {
+    boolean requiresNew() default false;
+    @Nonbinding String[] rolesAllowed() default {};
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/mock/MockBean.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/mock/MockBean.java
new file mode 100644
index 0000000..d309650
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/mock/MockBean.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.mock;
+
+import javax.enterprise.context.RequestScoped;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.MockStereotype;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.Transactional;
+
+@MockStereotype
+@Preferred
+@RequestScoped
+@Transactional
+public class MockBean implements TestBeanInterface{
+    public static boolean mockBeanInvoked = false;
+    @Override
+    public void m1() {
+        mockBeanInvoked = true;
+        System.out.println("MockBean::m1 called");
+    }
+
+    @Override
+    public void m2() {
+        System.out.println("MockBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/mock/MockShoppingCart.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/mock/MockShoppingCart.java
new file mode 100644
index 0000000..fd60138
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/mock/MockShoppingCart.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.mock;
+
+import test.beans.artifacts.MockStereotype;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.Transactional;
+import test.beans.nonmock.ShoppingCart;
+
+@Preferred
+@Transactional(requiresNew=true)
+@MockStereotype
+
+public class MockShoppingCart  extends ShoppingCart{
+    public static boolean mockShoppingCartInvoked = false;
+    
+    public void addItem(String s) {
+        mockShoppingCartInvoked = true;
+        System.out.println("MockShoppingCart::addItem called");
+        
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/nonmock/AnotherTestBeanWithLeakQualifier.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/nonmock/AnotherTestBeanWithLeakQualifier.java
new file mode 100644
index 0000000..a5431cd
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/nonmock/AnotherTestBeanWithLeakQualifier.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+import javax.enterprise.context.RequestScoped;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.LeakQualifier;
+import test.beans.artifacts.Transactional;
+
+@Transactional
+@RequestScoped
+@LeakQualifier
+public class AnotherTestBeanWithLeakQualifier implements TestBeanInterface{
+    public static boolean testBeanInvoked = false;
+
+    @Override
+    public void m1() {
+        testBeanInvoked = true;
+        System.out.println("TestBean::m1 called");
+    }
+
+    @Override
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/nonmock/ShoppingCart.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/nonmock/ShoppingCart.java
new file mode 100644
index 0000000..5408758
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/nonmock/ShoppingCart.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.Transactional;
+
+
+@Preferred
+@Transactional(requiresNew=true)
+public class ShoppingCart  {
+    public static boolean shoppingCartInvoked = false;
+
+    public void addItem(String s) {
+        shoppingCartInvoked = true;
+        System.out.println("ShoppingCart::addItem called");
+        
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/nonmock/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/nonmock/TestBean.java
new file mode 100644
index 0000000..d1bed8f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/nonmock/TestBean.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+import javax.enterprise.context.RequestScoped;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.Transactional;
+
+@Transactional
+@RequestScoped
+@Preferred
+public class TestBean implements TestBeanInterface{
+    public static boolean testBeanInvoked = false;
+
+    @Override
+    public void m1() {
+        testBeanInvoked = true;
+        System.out.println("TestBean::m1 called");
+    }
+
+    @Override
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/nonmock/TestDependentBean.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/nonmock/TestDependentBean.java
new file mode 100644
index 0000000..46f7f38
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/beans/nonmock/TestDependentBean.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+public class TestDependentBean {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/servlet/LeakQualifierTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/servlet/LeakQualifierTestServlet.java
new file mode 100644
index 0000000..e8ea1e1
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/alternative-leaks/servlet/test/servlet/LeakQualifierTestServlet.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.LeakQualifier;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.RequiresNewTransactionInterceptor;
+import test.beans.artifacts.TransactionInterceptor;
+import test.beans.mock.MockBean;
+import test.beans.mock.MockShoppingCart;
+import test.beans.nonmock.AnotherTestBeanWithLeakQualifier;
+import test.beans.nonmock.ShoppingCart;
+import test.beans.nonmock.TestBean;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class LeakQualifierTestServlet extends HttpServlet {
+    @Inject
+    @Preferred
+    TestBeanInterface tb;
+    
+    @Inject
+    @LeakQualifier
+    TestBeanInterface tb_leak;
+    
+    @Inject
+    @Preferred
+    ShoppingCart sc;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        //TestBean uses normal interceptors placed on it
+        if (tb == null)
+            msg += "Injection of request scoped bean failed";
+
+        tb.m1();
+        if (!TransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke not called";
+        tb.m2();
+        if (TransactionInterceptor.aroundInvokeInvocationCount != 2)
+            msg += "Business method interceptor invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =2, actual="
+                    + TransactionInterceptor.aroundInvokeInvocationCount;
+        if (!TransactionInterceptor.errorMessage.trim().equals(""))
+            msg += TransactionInterceptor.errorMessage;
+        
+        if (RequiresNewTransactionInterceptor.aroundInvokeCalled)
+            msg += "RequiresNew TransactionInterceptor called when " +
+            		"it shouldn't have been called";
+        
+        //test that the mocks are called instead of the actual beans
+        if (TestBean.testBeanInvoked)
+            msg += "Test Bean invoked when actually mock bean should " +
+            		"have been invoked";
+        
+        if (!MockBean.mockBeanInvoked)
+            msg += "Mock bean not invoked";
+        
+        TransactionInterceptor.clear();
+        //invoke shopping cart bean. ShoppingCart bean uses a Stereotype to
+        //assign the requires new transaction interceptor
+        //This should result in an invocation on
+        //the RequiresNewTransactional
+        sc.addItem("Test Item");
+        if (!RequiresNewTransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke in requires new " +
+            		"transaction interceptor not called";
+        if (RequiresNewTransactionInterceptor.aroundInvokeInvocationCount != 1)
+            msg += "Business method requires new interceptor invocation on " +
+            		"method-level interceptor annotation count not expected. "
+                    + "expected =1, actual="
+                    + RequiresNewTransactionInterceptor.aroundInvokeInvocationCount;
+        if (!RequiresNewTransactionInterceptor.errorMessage.trim().equals(""))
+            msg += RequiresNewTransactionInterceptor.errorMessage;
+        
+        //TransactionInterceptor should not be called
+        if (TransactionInterceptor.aroundInvokeCalled)
+            msg += "TranscationInterceptor aroundInvoke called when a requiresnew" +
+            		"transaction interceptor should have been called";
+        
+        //test that the mocks are called instead of the actual beans
+        if (ShoppingCart.shoppingCartInvoked)
+            msg += "Test shopping cart invoked when actually mock shopping cart " +
+            		"should have been invoked";
+        
+        if (!MockShoppingCart.mockShoppingCartInvoked)
+            msg += "Mock shopping cart not invoked";
+        
+        //test AnotherTestBeanWithLeakQualifier was injected for LeakQualifier.
+        //There are no mocks for a LeakQualifier annotated bean and so
+        //the actual non-mock AnotherTestBeanWithLeakQualifier is injected
+        //This is the problem with Alternatives and use of Alternative Stereotypes
+        //and is overcome by using Specializes
+        if (tb_leak == null)
+            msg += "leak bean was not injected";
+        
+        if (!(tb_leak instanceof AnotherTestBeanWithLeakQualifier))
+            msg += "leak bean is not an instance of AnotherTestBeanWithLeakQualifier";
+        
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/build.xml b/appserver/tests/appserv-tests/devtests/cdi/specialization/build.xml
new file mode 100644
index 0000000..f7a2b27
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/build.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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="specialization-test" default="usage" basedir=".">
+
+    <property name="specialization-target" value="all"/>
+
+    <target name="run-test">
+        <antcall target="specialization">
+        <param name="specialization-target" value="run-test"/>
+        </antcall>
+    </target>
+
+    <target name="all">
+        <antcall target="specialization">
+        <param name="specialization-target" value="all"/>
+        </antcall>
+    </target>
+
+    <target name="clean">
+        <antcall target="specialization">
+        <param name="specialization-target" value="clean"/>
+        </antcall>
+    </target>
+
+    <target name="build">
+        <antcall target="specialization">
+        <param name="specialization-target" value="build"/>
+        </antcall>
+    </target>
+
+    <target name="setup">
+        <antcall target="specialization">
+        <param name="specialization-target" value="setup"/>
+        </antcall>
+    </target>
+
+    <target name="deploy">
+        <antcall target="specialization">
+        <param name="specialization-target" value="deploy"/>
+        </antcall>
+    </target>
+
+    <target name="undeploy">
+        <antcall target="specialization">
+        <param name="specialization-target" value="undeploy"/>
+        </antcall>
+    </target>
+
+    <target name="unsetup">
+        <antcall target="specialization">
+        <param name="specialization-target" value="unsetup"/>
+        </antcall>
+    </target>
+
+    <target name="run">
+        <antcall target="specialization">
+        <param name="specialization-target" value="run"/>
+        </antcall>
+    </target>
+
+    <target name="specialization">
+        <record name="specialization.output" action="start" />
+            <ant dir="alternative-leaks" target="${specialization-target}"/>
+            <ant dir="specialization-simple" target="${specialization-target}"/>
+        <record name="specialization.output" action="stop" />
+    </target>
+
+    <target name="usage">
+	<echo> Usage:
+		ant all (Executes all the specialization tests)
+		ant clean (cleans all the specialization tests)
+		ant build (builds all the specialization tests)
+		ant setup (sets up all resources for specialization tests)
+		ant deploy (deploys all the specialization apps)
+		ant run (Executes all the specialization tests)
+		ant undeploy (undeploys all the  specialization apps)
+		ant unsetup (unsets all resources for specialization tests)
+	</echo>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/README b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/README
new file mode 100644
index 0000000..3743f31
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/README
@@ -0,0 +1,7 @@
+Test
+- Use of Specializes 
+    - tests that the @Specializes annotated bean (X) replaces the other bean(Y) 
+    [ie inherits Qualifiers] in these 2 scenarios
+        - X extended the other bean Y and marks X as @Specializes
+        - XProducer overrides the producer method YProducer and markes the
+        XProducer's producer method as @Specializes.   
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/build.properties b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/build.properties
new file mode 100644
index 0000000..9a02e14
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-simple-specialization"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/build.xml b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/build.xml
new file mode 100644
index 0000000..0b9b3a3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/build.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/client/test/client/WebTest.java
new file mode 100644
index 0000000..e99de54
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/client/test/client/WebTest.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+    private static final String TEST_NAME = "specialization-simple-specialization";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for stereotypes");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: "
+                        + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/descriptor/beans.xml
new file mode 100644
index 0000000..1cd96c3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/descriptor/beans.xml
@@ -0,0 +1,33 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+   <interceptors>
+      <class>test.beans.artifacts.TransactionInterceptor</class>
+      <class>test.beans.artifacts.RequiresNewTransactionInterceptor</class>
+   </interceptors>
+   <alternatives>
+   <stereotype>test.beans.artifacts.MockStereotype</stereotype>
+   </alternatives>
+   
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/TestBeanInterface.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/TestBeanInterface.java
new file mode 100644
index 0000000..7b4277f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/TestBeanInterface.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public interface TestBeanInterface {
+    public void m1();
+
+    public void m2();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/artifacts/AnotherQualifier.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/artifacts/AnotherQualifier.java
new file mode 100644
index 0000000..3b7f763
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/artifacts/AnotherQualifier.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface AnotherQualifier {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/artifacts/MockStereotype.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/artifacts/MockStereotype.java
new file mode 100644
index 0000000..35fa89e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/artifacts/MockStereotype.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.enterprise.inject.Alternative;
+
+
+
+@Alternative
+@javax.enterprise.inject.Stereotype
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ TYPE })
+public @interface MockStereotype {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/artifacts/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/artifacts/Preferred.java
new file mode 100644
index 0000000..b7584c8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/artifacts/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/artifacts/RequiresNewTransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/artifacts/RequiresNewTransactionInterceptor.java
new file mode 100644
index 0000000..a10a125
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/artifacts/RequiresNewTransactionInterceptor.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+import test.beans.nonmock.TestDependentBean;
+
+@Interceptor
+@Transactional(requiresNew=true, rolesAllowed={"admin", "manager"})
+//the rolesAllowed value must be ignored as it s a non-binding attribute
+public class RequiresNewTransactionInterceptor  {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestDependentBean tb;
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("RequiresNewTransactionInterceptor::AroundInvoke");
+        if (tb == null) errorMessage="Dependency Injection " +
+                "into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/artifacts/TransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/artifacts/TransactionInterceptor.java
new file mode 100644
index 0000000..f02f31b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/artifacts/TransactionInterceptor.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+import test.beans.nonmock.TestDependentBean;
+
+@Interceptor
+@Transactional
+public class TransactionInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestDependentBean tb;
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("TransactionInterceptor::AroundInvoke");
+        if (tb == null) errorMessage="Dependency Injection " +
+        		"into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/artifacts/Transactional.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/artifacts/Transactional.java
new file mode 100644
index 0000000..79cff9b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/artifacts/Transactional.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.enterprise.util.Nonbinding;
+import javax.interceptor.InterceptorBinding;
+
+@Target({TYPE, METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface Transactional {
+    boolean requiresNew() default false;
+    @Nonbinding String[] rolesAllowed() default {};
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/mock/MockAnotherQualifierProducer.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/mock/MockAnotherQualifierProducer.java
new file mode 100644
index 0000000..dd4d273
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/mock/MockAnotherQualifierProducer.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.mock;
+
+
+import javax.enterprise.inject.Produces;
+import javax.enterprise.inject.Specializes;
+
+import test.beans.TestBeanInterface;
+import test.beans.nonmock.AnotherQualifierProducer;
+import test.beans.nonmock.TestBeanForAnotherQualifier;
+
+public class MockAnotherQualifierProducer extends AnotherQualifierProducer{
+    @Produces @Specializes
+    //We don't specify AnotherQualifier here. It is inherited from 
+    //AnotherQualifierProducer.getTestBeanWithAnotherQualifier
+    //because of the @Specializes annotation
+    protected TestBeanInterface getTestBeanWithAnotherQualifier() {
+        return new MockTestBeanForAnotherQualifier();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/mock/MockBean.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/mock/MockBean.java
new file mode 100644
index 0000000..d309650
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/mock/MockBean.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.mock;
+
+import javax.enterprise.context.RequestScoped;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.MockStereotype;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.Transactional;
+
+@MockStereotype
+@Preferred
+@RequestScoped
+@Transactional
+public class MockBean implements TestBeanInterface{
+    public static boolean mockBeanInvoked = false;
+    @Override
+    public void m1() {
+        mockBeanInvoked = true;
+        System.out.println("MockBean::m1 called");
+    }
+
+    @Override
+    public void m2() {
+        System.out.println("MockBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/mock/MockShoppingCart.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/mock/MockShoppingCart.java
new file mode 100644
index 0000000..0e2c7c2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/mock/MockShoppingCart.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.mock;
+
+import javax.enterprise.inject.Specializes;
+
+import test.beans.artifacts.MockStereotype;
+import test.beans.artifacts.Transactional;
+import test.beans.nonmock.ShoppingCart;
+
+
+@MockStereotype
+@Specializes
+@Transactional(requiresNew=true)
+//This alternative (via MockStereotype) does not specify Preferred
+//qualifier, but since it specializes ShoppingCart, it 
+//gets ShoppingCart's qualifers etc
+//Interceptors are not inherited and so we need to specify Transactional
+//explicitly
+public class MockShoppingCart  extends ShoppingCart{
+    public static boolean mockShoppingCartInvoked = false;
+    
+    public void addItem(String s) {
+        mockShoppingCartInvoked = true;
+        System.out.println("MockShoppingCart::addItem called");
+        
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/mock/MockTestBeanForAnotherQualifier.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/mock/MockTestBeanForAnotherQualifier.java
new file mode 100644
index 0000000..d1ca5fd
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/mock/MockTestBeanForAnotherQualifier.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.mock;
+
+import test.beans.TestBeanInterface;
+
+public class MockTestBeanForAnotherQualifier implements TestBeanInterface{
+    public static boolean mockBeanInvoked = false;
+    @Override
+    public void m1() {
+        mockBeanInvoked = true;
+        System.out.println("MockBean::m1 called");
+    }
+
+    @Override
+    public void m2() {
+        System.out.println("MockBean::m2 called");
+    }
+    
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/nonmock/AnotherQualifierProducer.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/nonmock/AnotherQualifierProducer.java
new file mode 100644
index 0000000..cd8d502
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/nonmock/AnotherQualifierProducer.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+import javax.enterprise.inject.Produces;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.AnotherQualifier;
+
+public class AnotherQualifierProducer {
+    @Produces @AnotherQualifier
+    protected TestBeanInterface getTestBeanWithAnotherQualifier() {
+        return new TestBeanForAnotherQualifier();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/nonmock/ShoppingCart.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/nonmock/ShoppingCart.java
new file mode 100644
index 0000000..8ecf56f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/nonmock/ShoppingCart.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.Transactional;
+
+
+@Preferred //This qualifier would be inherited by a @Specializes sub-class.
+@Transactional(requiresNew=true)
+public class ShoppingCart  {
+    public static boolean shoppingCartInvoked = false;
+
+    public void addItem(String s) {
+        shoppingCartInvoked = true;
+        System.out.println("ShoppingCart::addItem called");
+        
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/nonmock/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/nonmock/TestBean.java
new file mode 100644
index 0000000..d1bed8f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/nonmock/TestBean.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+import javax.enterprise.context.RequestScoped;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.Transactional;
+
+@Transactional
+@RequestScoped
+@Preferred
+public class TestBean implements TestBeanInterface{
+    public static boolean testBeanInvoked = false;
+
+    @Override
+    public void m1() {
+        testBeanInvoked = true;
+        System.out.println("TestBean::m1 called");
+    }
+
+    @Override
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/nonmock/TestBeanForAnotherQualifier.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/nonmock/TestBeanForAnotherQualifier.java
new file mode 100644
index 0000000..dc9928f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/nonmock/TestBeanForAnotherQualifier.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+import test.beans.TestBeanInterface;
+
+public class TestBeanForAnotherQualifier implements TestBeanInterface{
+    public static boolean testBeanInvoked = false;
+
+    @Override
+    public void m1() {
+        testBeanInvoked = true;
+        System.out.println("TestBean::m1 called");
+    }
+
+    @Override
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/nonmock/TestDependentBean.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/nonmock/TestDependentBean.java
new file mode 100644
index 0000000..46f7f38
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/beans/nonmock/TestDependentBean.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+public class TestDependentBean {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/servlet/SimpleSpecializationTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/servlet/SimpleSpecializationTestServlet.java
new file mode 100644
index 0000000..3605c52
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/specialization/specialization-simple/servlet/test/servlet/SimpleSpecializationTestServlet.java
@@ -0,0 +1,137 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.AnotherQualifier;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.RequiresNewTransactionInterceptor;
+import test.beans.artifacts.TransactionInterceptor;
+import test.beans.mock.MockBean;
+import test.beans.mock.MockShoppingCart;
+import test.beans.mock.MockTestBeanForAnotherQualifier;
+import test.beans.nonmock.ShoppingCart;
+import test.beans.nonmock.TestBean;
+import test.beans.nonmock.TestBeanForAnotherQualifier;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class SimpleSpecializationTestServlet extends HttpServlet {
+    @Inject
+    @Preferred
+    TestBeanInterface tb;
+    
+    @Inject
+    @AnotherQualifier
+    TestBeanInterface tb_another;
+    
+    @Inject
+    @Preferred
+    ShoppingCart sc;
+    
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        //TestBean uses normal interceptors placed on it
+        if (tb == null)
+            msg += "Injection of request scoped bean failed";
+
+        tb.m1();
+        if (!TransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke not called";
+        tb.m2();
+        if (TransactionInterceptor.aroundInvokeInvocationCount != 2)
+            msg += "Business method interceptor invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =2, actual="
+                    + TransactionInterceptor.aroundInvokeInvocationCount;
+        if (!TransactionInterceptor.errorMessage.trim().equals(""))
+            msg += TransactionInterceptor.errorMessage;
+        
+        if (RequiresNewTransactionInterceptor.aroundInvokeCalled)
+            msg += "RequiresNew TransactionInterceptor called when " +
+            		"it shouldn't have been called";
+        
+        if (TestBean.testBeanInvoked)
+            msg += "Test Bean invoked when actually mock bean should " +
+            		"have been invoked";
+        
+        if (!MockBean.mockBeanInvoked)
+            msg += "Mock bean not invoked";
+        
+        TransactionInterceptor.clear();
+        //invoke shopping cart bean. ShoppingCart bean uses a Stereotype to
+        //assign the requires new transaction interceptor
+        //This should result in an invocation on
+        //the RequiresNewTransactional
+        
+        //check that the mock shopping cart bean inherits the qualifiers when the alternative 
+        //bean extends the actual bean and uses @Specializes to inherit the 
+        //Qualifier 
+        
+        sc.addItem("Test Item");
+        if (!RequiresNewTransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke in requires new " +
+            		"transaction interceptor not called";
+        if (RequiresNewTransactionInterceptor.aroundInvokeInvocationCount != 1)
+            msg += "Business method requires new interceptor invocation on " +
+            		"method-level interceptor annotation count not expected. "
+                    + "expected =1, actual="
+                    + RequiresNewTransactionInterceptor.aroundInvokeInvocationCount;
+        if (!RequiresNewTransactionInterceptor.errorMessage.trim().equals(""))
+            msg += RequiresNewTransactionInterceptor.errorMessage;
+        
+        //TransactionInterceptor should not be called
+        if (TransactionInterceptor.aroundInvokeCalled)
+            msg += "TranscationInterceptor aroundInvoke called when a requiresnew" +
+            		"transaction interceptor should have been called";
+        
+        //test that the mocks are called instead of the actual beans
+        if (ShoppingCart.shoppingCartInvoked)
+            msg += "Test shopping cart invoked when actually mock shopping cart " +
+            		"should have been invoked";
+        
+        if (!MockShoppingCart.mockShoppingCartInvoked)
+            msg += "Mock shopping cart not invoked";
+        
+        //check that the mock bean inherits the qualifiers when the bean is 
+        //produced through a Specializes producer method
+        if (tb_another == null)
+            msg += " bean with another qualifier was not injected";
+        
+        if (!(tb_another instanceof MockTestBeanForAnotherQualifier))
+            msg += "bean with another qualifier is not an instance of TestBeanWithAnotherQualifier";
+        
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/README b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/README
new file mode 100644
index 0000000..d675197
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/README
@@ -0,0 +1,3 @@
+Test
+- Use of Stereotypes 
+    - stereotype to indicate that all the beans it is applied to are @Alternatives 
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/build.properties b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/build.properties
new file mode 100644
index 0000000..73652ed
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-alternative-stereotypes"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/build.xml b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/build.xml
new file mode 100644
index 0000000..0b9b3a3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/build.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/client/test/client/WebTest.java
new file mode 100644
index 0000000..26a1de5
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/client/test/client/WebTest.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+    private static final String TEST_NAME = "stereotypes-alternative-stereotypes";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for stereotypes");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: "
+                        + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/descriptor/beans.xml
new file mode 100644
index 0000000..1cd96c3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/descriptor/beans.xml
@@ -0,0 +1,33 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+   <interceptors>
+      <class>test.beans.artifacts.TransactionInterceptor</class>
+      <class>test.beans.artifacts.RequiresNewTransactionInterceptor</class>
+   </interceptors>
+   <alternatives>
+   <stereotype>test.beans.artifacts.MockStereotype</stereotype>
+   </alternatives>
+   
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/TestBeanInterface.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/TestBeanInterface.java
new file mode 100644
index 0000000..7b4277f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/TestBeanInterface.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public interface TestBeanInterface {
+    public void m1();
+
+    public void m2();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/artifacts/MockStereotype.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/artifacts/MockStereotype.java
new file mode 100644
index 0000000..35fa89e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/artifacts/MockStereotype.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.enterprise.inject.Alternative;
+
+
+
+@Alternative
+@javax.enterprise.inject.Stereotype
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ TYPE })
+public @interface MockStereotype {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/artifacts/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/artifacts/Preferred.java
new file mode 100644
index 0000000..b7584c8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/artifacts/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/artifacts/RequiresNewTransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/artifacts/RequiresNewTransactionInterceptor.java
new file mode 100644
index 0000000..a10a125
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/artifacts/RequiresNewTransactionInterceptor.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+import test.beans.nonmock.TestDependentBean;
+
+@Interceptor
+@Transactional(requiresNew=true, rolesAllowed={"admin", "manager"})
+//the rolesAllowed value must be ignored as it s a non-binding attribute
+public class RequiresNewTransactionInterceptor  {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestDependentBean tb;
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("RequiresNewTransactionInterceptor::AroundInvoke");
+        if (tb == null) errorMessage="Dependency Injection " +
+                "into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/artifacts/TransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/artifacts/TransactionInterceptor.java
new file mode 100644
index 0000000..f02f31b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/artifacts/TransactionInterceptor.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+import test.beans.nonmock.TestDependentBean;
+
+@Interceptor
+@Transactional
+public class TransactionInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestDependentBean tb;
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("TransactionInterceptor::AroundInvoke");
+        if (tb == null) errorMessage="Dependency Injection " +
+        		"into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/artifacts/Transactional.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/artifacts/Transactional.java
new file mode 100644
index 0000000..79cff9b
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/artifacts/Transactional.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.artifacts;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.enterprise.util.Nonbinding;
+import javax.interceptor.InterceptorBinding;
+
+@Target({TYPE, METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface Transactional {
+    boolean requiresNew() default false;
+    @Nonbinding String[] rolesAllowed() default {};
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/mock/MockBean.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/mock/MockBean.java
new file mode 100644
index 0000000..d309650
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/mock/MockBean.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.mock;
+
+import javax.enterprise.context.RequestScoped;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.MockStereotype;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.Transactional;
+
+@MockStereotype
+@Preferred
+@RequestScoped
+@Transactional
+public class MockBean implements TestBeanInterface{
+    public static boolean mockBeanInvoked = false;
+    @Override
+    public void m1() {
+        mockBeanInvoked = true;
+        System.out.println("MockBean::m1 called");
+    }
+
+    @Override
+    public void m2() {
+        System.out.println("MockBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/mock/MockShoppingCart.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/mock/MockShoppingCart.java
new file mode 100644
index 0000000..fd60138
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/mock/MockShoppingCart.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.mock;
+
+import test.beans.artifacts.MockStereotype;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.Transactional;
+import test.beans.nonmock.ShoppingCart;
+
+@Preferred
+@Transactional(requiresNew=true)
+@MockStereotype
+
+public class MockShoppingCart  extends ShoppingCart{
+    public static boolean mockShoppingCartInvoked = false;
+    
+    public void addItem(String s) {
+        mockShoppingCartInvoked = true;
+        System.out.println("MockShoppingCart::addItem called");
+        
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/nonmock/ShoppingCart.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/nonmock/ShoppingCart.java
new file mode 100644
index 0000000..5408758
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/nonmock/ShoppingCart.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.Transactional;
+
+
+@Preferred
+@Transactional(requiresNew=true)
+public class ShoppingCart  {
+    public static boolean shoppingCartInvoked = false;
+
+    public void addItem(String s) {
+        shoppingCartInvoked = true;
+        System.out.println("ShoppingCart::addItem called");
+        
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/nonmock/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/nonmock/TestBean.java
new file mode 100644
index 0000000..d1bed8f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/nonmock/TestBean.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+import javax.enterprise.context.RequestScoped;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.Transactional;
+
+@Transactional
+@RequestScoped
+@Preferred
+public class TestBean implements TestBeanInterface{
+    public static boolean testBeanInvoked = false;
+
+    @Override
+    public void m1() {
+        testBeanInvoked = true;
+        System.out.println("TestBean::m1 called");
+    }
+
+    @Override
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/nonmock/TestDependentBean.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/nonmock/TestDependentBean.java
new file mode 100644
index 0000000..46f7f38
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/beans/nonmock/TestDependentBean.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.nonmock;
+
+public class TestDependentBean {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/servlet/AlternativeStereotypesTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/servlet/AlternativeStereotypesTestServlet.java
new file mode 100644
index 0000000..6903b0d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/alternative-stereotypes/servlet/test/servlet/AlternativeStereotypesTestServlet.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.TestBeanInterface;
+import test.beans.artifacts.Preferred;
+import test.beans.artifacts.RequiresNewTransactionInterceptor;
+import test.beans.artifacts.TransactionInterceptor;
+import test.beans.mock.MockBean;
+import test.beans.mock.MockShoppingCart;
+import test.beans.nonmock.ShoppingCart;
+import test.beans.nonmock.TestBean;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class AlternativeStereotypesTestServlet extends HttpServlet {
+    @Inject
+    @Preferred
+    TestBeanInterface tb;
+    
+    @Inject
+    @Preferred
+    ShoppingCart sc;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        //TestBean uses normal interceptors placed on it
+        if (tb == null)
+            msg += "Injection of request scoped bean failed";
+
+        tb.m1();
+        if (!TransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke not called";
+        tb.m2();
+        if (TransactionInterceptor.aroundInvokeInvocationCount != 2)
+            msg += "Business method interceptor invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =2, actual="
+                    + TransactionInterceptor.aroundInvokeInvocationCount;
+        if (!TransactionInterceptor.errorMessage.trim().equals(""))
+            msg += TransactionInterceptor.errorMessage;
+        
+        if (RequiresNewTransactionInterceptor.aroundInvokeCalled)
+            msg += "RequiresNew TransactionInterceptor called when " +
+            		"it shouldn't have been called";
+        
+        //test that the mocks are called instead of the actual beans
+        if (TestBean.testBeanInvoked)
+            msg += "Test Bean invoked when actually mock bean should " +
+            		"have been invoked";
+        
+        if (!MockBean.mockBeanInvoked)
+            msg += "Mock bean not invoked";
+        
+        TransactionInterceptor.clear();
+        //invoke shopping cart bean. ShoppingCart bean uses a Stereotype to
+        //assign the requires new transaction interceptor
+        //This should result in an invocation on
+        //the RequiresNewTransactional
+        sc.addItem("Test Item");
+        if (!RequiresNewTransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke in requires new " +
+            		"transaction interceptor not called";
+        if (RequiresNewTransactionInterceptor.aroundInvokeInvocationCount != 1)
+            msg += "Business method requires new interceptor invocation on " +
+            		"method-level interceptor annotation count not expected. "
+                    + "expected =1, actual="
+                    + RequiresNewTransactionInterceptor.aroundInvokeInvocationCount;
+        if (!RequiresNewTransactionInterceptor.errorMessage.trim().equals(""))
+            msg += RequiresNewTransactionInterceptor.errorMessage;
+        
+        //TransactionInterceptor should not be called
+        if (TransactionInterceptor.aroundInvokeCalled)
+            msg += "TranscationInterceptor aroundInvoke called when a requiresnew" +
+            		"transaction interceptor should have been called";
+        
+        //test that the mocks are called instead of the actual beans
+        if (ShoppingCart.shoppingCartInvoked)
+            msg += "Test shopping cart invoked when actually mock shopping cart " +
+            		"should have been invoked";
+        
+        if (!MockShoppingCart.mockShoppingCartInvoked)
+            msg += "Mock shopping cart not invoked";
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/build.xml b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/build.xml
new file mode 100644
index 0000000..e06f8e7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/build.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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="stereotypes-test" default="usage" basedir=".">
+
+    <property name="stereotypes-target" value="all"/>
+
+    <target name="run-test">
+        <antcall target="stereotypes">
+        <param name="stereotypes-target" value="run-test"/>
+        </antcall>
+    </target>
+
+    <target name="all">
+        <antcall target="stereotypes">
+        <param name="stereotypes-target" value="all"/>
+        </antcall>
+    </target>
+
+    <target name="clean">
+        <antcall target="stereotypes">
+        <param name="stereotypes-target" value="clean"/>
+        </antcall>
+    </target>
+
+    <target name="build">
+        <antcall target="stereotypes">
+        <param name="stereotypes-target" value="build"/>
+        </antcall>
+    </target>
+
+    <target name="setup">
+        <antcall target="stereotypes">
+        <param name="stereotypes-target" value="setup"/>
+        </antcall>
+    </target>
+
+    <target name="deploy">
+        <antcall target="stereotypes">
+        <param name="stereotypes-target" value="deploy"/>
+        </antcall>
+    </target>
+
+    <target name="undeploy">
+        <antcall target="stereotypes">
+        <param name="stereotypes-target" value="undeploy"/>
+        </antcall>
+    </target>
+
+    <target name="unsetup">
+        <antcall target="stereotypes">
+        <param name="stereotypes-target" value="unsetup"/>
+        </antcall>
+    </target>
+
+    <target name="run">
+        <antcall target="stereotypes">
+        <param name="stereotypes-target" value="run"/>
+        </antcall>
+    </target>
+
+    <target name="stereotypes">
+        <record name="stereotypes.output" action="start" />
+            <ant dir="alternative-stereotypes" target="${stereotypes-target}"/>
+            <ant dir="interceptor-bindings-for-stereotypes" target="${stereotypes-target}"/>
+            <ant dir="stereotype-stacking" target="${stereotypes-target}"/>
+        <record name="stereotypes.output" action="stop" />
+    </target>
+
+    <target name="usage">
+	<echo> Usage:
+		ant all (Executes all the stereotypes tests)
+		ant clean (cleans all the stereotypes tests)
+		ant build (builds all the stereotypes tests)
+		ant setup (sets up all resources for stereotypes tests)
+		ant deploy (deploys all the stereotypes apps)
+		ant run (Executes all the stereotypes tests)
+		ant undeploy (undeploys all the  stereotypes apps)
+		ant unsetup (unsets all resources for stereotypes tests)
+	</echo>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/README b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/README
new file mode 100644
index 0000000..436f3cf
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/README
@@ -0,0 +1,4 @@
+Test
+- Use of stereotypes 
+    - specifying interceptor bindings in a Stereotype 
+    to be inherited by all beans with that Stereotype 
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/build.properties b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/build.properties
new file mode 100644
index 0000000..6f7f81c
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-interceptor-binding-for-stereotypes"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/build.xml b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/build.xml
new file mode 100644
index 0000000..0b9b3a3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/build.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/client/test/client/WebTest.java
new file mode 100644
index 0000000..f99cc54
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/client/test/client/WebTest.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+    private static final String TEST_NAME = "stereotypes-interceptor-bindings-for-stereotypes";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for stereotypes");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: "
+                        + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/descriptor/beans.xml
new file mode 100644
index 0000000..6e5b6a2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/descriptor/beans.xml
@@ -0,0 +1,30 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+   <interceptors>
+      <class>test.beans.TransactionInterceptor</class>
+      <class>test.beans.RequiresNewTransactionInterceptor</class>
+   </interceptors>
+   
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/beans/ActionStereotype.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/beans/ActionStereotype.java
new file mode 100644
index 0000000..1e49019
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/beans/ActionStereotype.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.enterprise.context.RequestScoped;
+
+
+
+@javax.enterprise.inject.Stereotype
+@RequestScoped
+@Transactional(requiresNew=true)
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ TYPE })
+public @interface ActionStereotype {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/beans/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/beans/Preferred.java
new file mode 100644
index 0000000..fa8fdb7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/beans/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/beans/RequiresNewTransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/beans/RequiresNewTransactionInterceptor.java
new file mode 100644
index 0000000..73f5964
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/beans/RequiresNewTransactionInterceptor.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+@Interceptor
+@Transactional(requiresNew=true, rolesAllowed={"admin", "manager"})
+//the rolesAllowed value must be ignored as it s a non-binding attribute
+public class RequiresNewTransactionInterceptor  {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestDependentBean tb;
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("RequiresNewTransactionInterceptor::AroundInvoke");
+        if (tb == null) errorMessage="Dependency Injection " +
+                "into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/beans/ShoppingCart.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/beans/ShoppingCart.java
new file mode 100644
index 0000000..6175fd6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/beans/ShoppingCart.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+
+@ActionStereotype
+@Preferred
+public class ShoppingCart  {
+    
+    public void addItem(String s) {
+        System.out.println("ShoppingCart::addItem called");
+        
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/beans/TestBean.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/beans/TestBean.java
new file mode 100644
index 0000000..4792d26
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/beans/TestBean.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+
+@Transactional
+@RequestScoped
+@Preferred
+public class TestBean {
+
+    public void m1() {
+        System.out.println("TestBean::m1 called");
+    }
+
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/beans/TestDependentBean.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/beans/TestDependentBean.java
new file mode 100644
index 0000000..38e4f18
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/beans/TestDependentBean.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+
+public class TestDependentBean  {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/beans/TransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/beans/TransactionInterceptor.java
new file mode 100644
index 0000000..f762992
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/beans/TransactionInterceptor.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+@Interceptor
+@Transactional
+public class TransactionInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestDependentBean tb;
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("TransactionInterceptor::AroundInvoke");
+        if (tb == null) errorMessage="Dependency Injection " +
+        		"into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/beans/Transactional.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/beans/Transactional.java
new file mode 100644
index 0000000..b8937b9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/beans/Transactional.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.enterprise.util.Nonbinding;
+import javax.interceptor.InterceptorBinding;
+
+@Target({TYPE, METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface Transactional {
+    boolean requiresNew() default false;
+    @Nonbinding String[] rolesAllowed() default {};
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/servlet/InterceptorBindingsForStereotypesTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/servlet/InterceptorBindingsForStereotypesTestServlet.java
new file mode 100644
index 0000000..3e739ff
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/interceptor-bindings-for-stereotypes/servlet/test/servlet/InterceptorBindingsForStereotypesTestServlet.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.Preferred;
+import test.beans.RequiresNewTransactionInterceptor;
+import test.beans.ShoppingCart;
+import test.beans.TestBean;
+import test.beans.TransactionInterceptor;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class InterceptorBindingsForStereotypesTestServlet extends HttpServlet {
+    @Inject
+    @Preferred
+    TestBean tb;
+    
+    @Inject
+    @Preferred
+    ShoppingCart sc;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        //TestBean uses normal interceptors placed on it
+        if (tb == null)
+            msg += "Injection of request scoped bean failed";
+
+        tb.m1();
+        if (!TransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke not called";
+        tb.m2();
+        if (TransactionInterceptor.aroundInvokeInvocationCount != 2)
+            msg += "Business method interceptor invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =2, actual="
+                    + TransactionInterceptor.aroundInvokeInvocationCount;
+        if (!TransactionInterceptor.errorMessage.trim().equals(""))
+            msg += TransactionInterceptor.errorMessage;
+        
+        if (RequiresNewTransactionInterceptor.aroundInvokeCalled)
+            msg += "RequiresNew TransactionInterceptor called when " +
+            		"it shouldn't have been called";
+        
+        TransactionInterceptor.clear();
+        //invoke shopping cart bean. ShoppingCart bean uses a Stereotype to
+        //assign the requires new transaction interceptor
+        //This should result in an invocation on
+        //the RequiresNewTransactional
+        sc.addItem("Test Item");
+        if (!RequiresNewTransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke in requires new " +
+            		"transaction interceptor not called";
+        if (RequiresNewTransactionInterceptor.aroundInvokeInvocationCount != 1)
+            msg += "Business method requires new interceptor invocation on " +
+            		"method-level interceptor annotation count not expected. "
+                    + "expected =1, actual="
+                    + RequiresNewTransactionInterceptor.aroundInvokeInvocationCount;
+        if (!RequiresNewTransactionInterceptor.errorMessage.trim().equals(""))
+            msg += RequiresNewTransactionInterceptor.errorMessage;
+        
+        //TransactionInterceptor should not be called
+        if (TransactionInterceptor.aroundInvokeCalled)
+            msg += "TranscationInterceptor aroundInvoke called when a requiresnew" +
+            		"transaction interceptor should have been called";
+
+        writer.write(msg + "\n");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/README b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/README
new file mode 100644
index 0000000..5682976
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/README
@@ -0,0 +1,3 @@
+Test
+- Use of Stereotypes 
+     - stereotypes may declare other stereotypes [stacking] 
\ No newline at end of file
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/build.properties b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/build.properties
new file mode 100644
index 0000000..e8e6008
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-stacking-stereotypes"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/build.xml b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/build.xml
new file mode 100644
index 0000000..0b9b3a3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/build.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="client" classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="client"/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/client/test/client/WebTest.java
new file mode 100644
index 0000000..3080ce5
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/client/test/client/WebTest.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter(
+            "appserv-tests");
+    private static final String TEST_NAME = "stereotypes-stereotype-stacking";
+
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0.";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+
+    public static void main(String[] args) {
+        stat.addDescription("Unit test for stereotypes");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try {
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+
+        String url = "http://" + host + ":" + port + contextRoot + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url))
+                .openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch (IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: "
+                        + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/descriptor/beans.xml
new file mode 100644
index 0000000..33b2aa7
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/descriptor/beans.xml
@@ -0,0 +1,29 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+   <interceptors>
+      <class>test.beans.interceptors.TransactionInterceptor</class>
+      <class>test.beans.interceptors.SecurityInterceptor</class>
+   </interceptors>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/TestBeanInterface.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/TestBeanInterface.java
new file mode 100644
index 0000000..7b4277f
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/TestBeanInterface.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public interface TestBeanInterface {
+    public void m1();
+
+    public void m2();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/TestDependentBean.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/TestDependentBean.java
new file mode 100644
index 0000000..1c15313
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/TestDependentBean.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+public class TestDependentBean {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/TestSecureBean.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/TestSecureBean.java
new file mode 100644
index 0000000..a127308
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/TestSecureBean.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+
+import test.beans.qualifiers.Preferred;
+import test.beans.stereotypes.SecStereotype;
+
+@SecStereotype
+@RequestScoped
+@Preferred
+public class TestSecureBean implements TestBeanInterface{
+    public static boolean testBeanInvoked = false;
+
+    @Override
+    public void m1() {
+        testBeanInvoked = true;
+        System.out.println("TestBean::m1 called");
+    }
+
+    @Override
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/TestTxBean.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/TestTxBean.java
new file mode 100644
index 0000000..9af2f53
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/TestTxBean.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+
+import test.beans.qualifiers.Preferred;
+import test.beans.stereotypes.TxStereotype;
+
+@TxStereotype
+@RequestScoped
+@Preferred
+public class TestTxBean implements TestBeanInterface{
+    public static boolean testBeanInvoked = false;
+
+    @Override
+    public void m1() {
+        testBeanInvoked = true;
+        System.out.println("TestBean::m1 called");
+    }
+
+    @Override
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/TestTxSecBean.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/TestTxSecBean.java
new file mode 100644
index 0000000..cb70ad3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/TestTxSecBean.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.context.RequestScoped;
+
+import test.beans.qualifiers.Preferred;
+import test.beans.stereotypes.TxSecureStereotype;
+
+@TxSecureStereotype
+@RequestScoped
+@Preferred
+public class TestTxSecBean implements TestBeanInterface {
+    public static boolean testBeanInvoked = false;
+
+    @Override
+    public void m1() {
+        testBeanInvoked = true;
+        System.out.println("TestBean::m1 called");
+    }
+
+    @Override
+    public void m2() {
+        System.out.println("TestBean::m2 called");
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/interceptors/Secure.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/interceptors/Secure.java
new file mode 100644
index 0000000..187d737
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/interceptors/Secure.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.interceptors;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+import javax.interceptor.InterceptorBinding;
+
+
+@Target({ TYPE, METHOD })
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface Secure {
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/interceptors/SecurityInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/interceptors/SecurityInterceptor.java
new file mode 100644
index 0000000..629ecb2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/interceptors/SecurityInterceptor.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.interceptors;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+import test.beans.TestDependentBean;
+
+@Interceptor
+@Secure
+public class SecurityInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestDependentBean tb;
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("SecurityInterceptor::AroundInvoke");
+        if (tb == null) errorMessage="Dependency Injection " +
+                "into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/interceptors/TransactionInterceptor.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/interceptors/TransactionInterceptor.java
new file mode 100644
index 0000000..9380dd8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/interceptors/TransactionInterceptor.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.interceptors;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+import test.beans.TestDependentBean;
+
+@Interceptor
+@Transactional
+public class TransactionInterceptor {
+    public static boolean aroundInvokeCalled = false;
+    public static int aroundInvokeInvocationCount = 0;
+    public static String errorMessage = "";
+    
+    @Inject
+    TestDependentBean tb;
+    
+    @AroundInvoke
+    public Object manageTransaction(InvocationContext ctx) throws Exception {
+        System.out.println("TransactionInterceptor::AroundInvoke");
+        if (tb == null) errorMessage="Dependency Injection " +
+        		"into TransactionInterceptor failed";
+        aroundInvokeCalled = true;
+        aroundInvokeInvocationCount ++;
+        return ctx.proceed();
+    }
+
+    public static void clear() {
+        aroundInvokeCalled = false;
+        aroundInvokeInvocationCount = 0;
+        errorMessage = "";
+    }
+ }
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/interceptors/Transactional.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/interceptors/Transactional.java
new file mode 100644
index 0000000..f5b9db3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/interceptors/Transactional.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.interceptors;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.interceptor.InterceptorBinding;
+
+@Target({TYPE, METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@InterceptorBinding
+public @interface Transactional {
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/qualifiers/Preferred.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/qualifiers/Preferred.java
new file mode 100644
index 0000000..a839658
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/qualifiers/Preferred.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.qualifiers;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Preferred {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/stereotypes/SecStereotype.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/stereotypes/SecStereotype.java
new file mode 100644
index 0000000..9738f58
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/stereotypes/SecStereotype.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.stereotypes;
+
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import test.beans.interceptors.Secure;
+
+@javax.enterprise.inject.Stereotype
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ TYPE })
+@Secure
+public @interface SecStereotype {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/stereotypes/TxSecureStereotype.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/stereotypes/TxSecureStereotype.java
new file mode 100644
index 0000000..89f0ccd
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/stereotypes/TxSecureStereotype.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.stereotypes;
+
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@TxStereotype
+@SecStereotype
+@javax.enterprise.inject.Stereotype
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ TYPE })
+public @interface TxSecureStereotype {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/stereotypes/TxStereotype.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/stereotypes/TxStereotype.java
new file mode 100644
index 0000000..0f6fb1e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/beans/stereotypes/TxStereotype.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans.stereotypes;
+
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import test.beans.interceptors.Transactional;
+
+
+@javax.enterprise.inject.Stereotype
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ TYPE })
+@Transactional
+public @interface TxStereotype {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/servlet/StereotypeStackingTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/servlet/StereotypeStackingTestServlet.java
new file mode 100644
index 0000000..953c845
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/stereotypes/stereotype-stacking/servlet/test/servlet/StereotypeStackingTestServlet.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.beans.TestSecureBean;
+import test.beans.TestTxBean;
+import test.beans.TestTxSecBean;
+import test.beans.interceptors.SecurityInterceptor;
+import test.beans.interceptors.TransactionInterceptor;
+import test.beans.qualifiers.Preferred;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" })
+public class StereotypeStackingTestServlet extends HttpServlet {
+    @Inject
+    @Preferred
+    TestTxBean tb_tx;
+
+    @Inject
+    @Preferred
+    TestSecureBean tb_sec;
+
+    @Inject
+    @Preferred
+    TestTxSecBean tb_tx_sec;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0.");
+        String msg = "";
+
+        // Just Transactional Interceptor
+        if (tb_tx == null)
+            msg += "Injection of transactional bean failed";
+
+        tb_tx.m1();
+        if (!TransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke not called";
+        tb_tx.m2();
+        if (TransactionInterceptor.aroundInvokeInvocationCount != 2)
+            msg += "Business method interceptor [TransactionInterceptor] " +
+            		"invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =2, actual="
+                    + TransactionInterceptor.aroundInvokeInvocationCount;
+        if (!TransactionInterceptor.errorMessage.trim().equals(""))
+            msg += TransactionInterceptor.errorMessage;
+
+        if (SecurityInterceptor.aroundInvokeCalled)
+            msg += "Security Interceptor called when "
+                    + "it shouldn't have been called";
+
+        clearInterceptors();
+        
+        //Just security interceptor
+        if (tb_sec == null)
+            msg += "Injection of @secure bean failed";
+
+        tb_sec.m1();
+        if (!SecurityInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor aroundInvoke not called";
+        tb_sec.m2();
+        if (SecurityInterceptor.aroundInvokeInvocationCount != 2)
+            msg += "Business method interceptor invocation [SecurityInterceptor]" +
+            		"on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =2, actual="
+                    + SecurityInterceptor.aroundInvokeInvocationCount;
+        if (!SecurityInterceptor.errorMessage.trim().equals(""))
+            msg += SecurityInterceptor.errorMessage;
+
+        if (TransactionInterceptor.aroundInvokeCalled)
+            msg += "Security Interceptor called when "
+                    + "it shouldn't have been called";
+
+        clearInterceptors();
+
+        //Both transaction and security interceptors
+        if (tb_tx_sec == null)
+            msg += "Injection of @transactional and @secure bean failed";
+
+        tb_tx_sec.m1();
+        if (!SecurityInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor [Security Interceptor] aroundInvoke not called";
+        if (!TransactionInterceptor.aroundInvokeCalled)
+            msg += "Business method interceptor [Transaction Interceptor] aroundInvoke not called";
+        
+        tb_tx_sec.m2();
+        if (SecurityInterceptor.aroundInvokeInvocationCount != 2)
+            msg += "Business method interceptor invocation [SecurityInterceptor]" +
+                    "on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =2, actual="
+                    + SecurityInterceptor.aroundInvokeInvocationCount;
+        if (TransactionInterceptor.aroundInvokeInvocationCount != 2)
+            msg += "Business method interceptor [TransactionInterceptor] " +
+                    "invocation on method-level "
+                    + "interceptor annotation count not expected. "
+                    + "expected =2, actual="
+                    + TransactionInterceptor.aroundInvokeInvocationCount;
+        
+        if (!SecurityInterceptor.errorMessage.trim().equals(""))
+            msg += SecurityInterceptor.errorMessage;
+        if (!TransactionInterceptor.errorMessage.trim().equals(""))
+            msg += TransactionInterceptor.errorMessage;
+
+
+        writer.write(msg + "\n");
+    }
+
+    private void clearInterceptors() {
+        //clear interceptors
+        TransactionInterceptor.clear();
+        SecurityInterceptor.clear();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/todo.txt b/appserver/tests/appserv-tests/devtests/cdi/todo.txt
new file mode 100644
index 0000000..e82d479
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/todo.txt
@@ -0,0 +1,10 @@
+- Emebeddable EJB container: beans deployed wherever EJBs are deployed
+- Transactional observers (JPA) - 11.7
+- Use @Model in a JSF application -- 12.6
+- test inheritance of @Named in the specialized alternative bean
+- test injection of JMS topics, JavaMail sessions, Connector resources, Remote EJBs and web-services -- 14.1
+- portable extensions: registering a bean (16.6), wrapping an annotated type (16.7), wrapping an injectiontarget (16.8), context interface
+- use of CDI in embedded (refer issue 12658 for usecase)
+- automated stress test (memory leaks and permgen issues) by deploy-use-undeploy of WicketExamples.war referred to in 11668
+- automate test in http://java.net/jira/browse/GLASSFISH-11825
+
diff --git a/appserver/tests/appserv-tests/devtests/cdi/transactions/build.xml b/appserver/tests/appserv-tests/devtests/cdi/transactions/build.xml
new file mode 100644
index 0000000..1524529
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/transactions/build.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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="transactions-test" default="usage" basedir=".">
+
+    <property name="transactions-target" value="all"/>
+
+    <target name="run-test">
+        <antcall target="transactions">
+            <param name="transactions-target" value="run-test"/>
+        </antcall>
+    </target>
+
+    <target name="all">
+        <antcall target="transactions">
+            <param name="transactions-target" value="all"/>
+        </antcall>
+    </target>
+
+    <target name="clean">
+        <antcall target="transactions">
+            <param name="transactions-target" value="clean"/>
+        </antcall>
+    </target>
+
+    <target name="build">
+        <antcall target="transactions">
+            <param name="transactions-target" value="build"/>
+        </antcall>
+    </target>
+
+    <target name="setup">
+        <antcall target="transactions">
+            <param name="transactions-target" value="setup"/>
+        </antcall>
+    </target>
+
+    <target name="deploy">
+        <antcall target="transactions">
+            <param name="transactions-target" value="deploy"/>
+        </antcall>
+    </target>
+
+    <target name="undeploy">
+        <antcall target="transactions">
+            <param name="transactions-target" value="undeploy"/>
+        </antcall>
+    </target>
+
+    <target name="unsetup">
+        <antcall target="transactions">
+            <param name="transactions-target" value="unsetup"/>
+        </antcall>
+    </target>
+
+    <target name="run">
+        <antcall target="transactions">
+            <param name="transactions-target" value="run"/>
+        </antcall>
+    </target>
+
+    <target name="transactions">
+        <record name="transactions.output" action="start" />
+        <ant dir="transaction-scoped" target="${transactions-target}"/>
+        <record name="transactions.output" action="stop" />
+    </target>
+
+    <target name="usage">
+        <echo> Usage:
+            ant all (Executes all the transactions tests)
+            ant clean (cleans all the transactions tests)
+            ant build (builds all the transactions tests)
+            ant setup (sets up all resources for transactions tests)
+            ant deploy (deploys all the transactions apps)
+            ant run (Executes all the transactions tests)
+            ant undeploy (undeploys all the transactions apps)
+            ant unsetup (unsets all resources for transactions tests)
+        </echo>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/transactions/transaction-scoped/README b/appserver/tests/appserv-tests/devtests/cdi/transactions/transaction-scoped/README
new file mode 100644
index 0000000..14ad13d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/transactions/transaction-scoped/README
@@ -0,0 +1,6 @@
+Test
+- Testing @TransactionScoped support
+    - Annotate multiple beans with @TransactionScoped
+    - Inject those beans
+    - Verify identical type of bean is shared within same transaction.
+    - Verify beans destroyed at end of transaction.
diff --git a/appserver/tests/appserv-tests/devtests/cdi/transactions/transaction-scoped/build.properties b/appserver/tests/appserv-tests/devtests/cdi/transactions/transaction-scoped/build.properties
new file mode 100644
index 0000000..3719e49
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/transactions/transaction-scoped/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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}-transaction-scoped"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/transactions/transaction-scoped/build.xml b/appserver/tests/appserv-tests/devtests/cdi/transactions/transaction-scoped/build.xml
new file mode 100644
index 0000000..380dee5
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/transactions/transaction-scoped/build.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../../config/properties.xml">
+        <!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
+        <!ENTITY run SYSTEM "./../../../../config/run.xml">
+        <!ENTITY testproperties SYSTEM "./build.properties">
+        ]>
+
+<project name="transactions_transaction-scoped_devtest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+            <fileset dir="client/test/client" includes="*.class"/>
+        </delete>
+    </target>
+
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/>
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/>
+        </antcall>
+
+        <javac srcdir="client"
+               classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="test/client/WebTest.java"
+               debug="true"/>
+
+    </target>
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+
+    <target name="run" depends="init-common">
+        <java classname="test.client.WebTest" fork="true">
+            <arg value="${http.host}"/>
+            <arg value="${http.port}"/>
+            <arg value="${contextroot}"/>
+            <classpath>
+                <pathelement location="${env.APS_HOME}/lib/reporter.jar"/>
+                <pathelement location="client"/>
+            </classpath>
+            <!--<jvmarg value="-Xdebug"/>-->
+            <!--<jvmarg value="-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"/>-->
+        </java>
+    </target>
+
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/transactions/transaction-scoped/client/test/client/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/transactions/transaction-scoped/client/test/client/WebTest.java
new file mode 100644
index 0000000..52e1c74
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/transactions/transaction-scoped/client/test/client/WebTest.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2009, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.client;
+
+import java.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "transaction-scoped-transactions";
+
+    private static final String EXPECTED_RESPONSE = "@TransactionScoped Test";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Functional test for @TransactionScoped");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot + "/TransactionScopedTestServlet";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection) (new URL(url)).openConnection();
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/transactions/transaction-scoped/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/transactions/transaction-scoped/descriptor/beans.xml
new file mode 100644
index 0000000..1d355f8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/transactions/transaction-scoped/descriptor/beans.xml
@@ -0,0 +1,25 @@
+<!--
+
+    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
+
+-->
+
+<beans
+   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/beans_1_0.xsd">
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/transactions/transaction-scoped/servlet/test/beans/Bean1.java b/appserver/tests/appserv-tests/devtests/cdi/transactions/transaction-scoped/servlet/test/beans/Bean1.java
new file mode 100644
index 0000000..e0a1268
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/transactions/transaction-scoped/servlet/test/beans/Bean1.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import test.servlet.TransactionScopedTestServlet;
+
+import javax.annotation.PreDestroy;
+import javax.transaction.TransactionScoped;
+import java.io.Serializable;
+
+@TransactionScoped
+public class Bean1 implements Serializable {
+    public String foo() {
+        return this + ".foo()";
+    }
+
+    @PreDestroy
+    public void preDestroy() {
+        TransactionScopedTestServlet.bean1PreDestroyCalled = true;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/transactions/transaction-scoped/servlet/test/beans/Bean2.java b/appserver/tests/appserv-tests/devtests/cdi/transactions/transaction-scoped/servlet/test/beans/Bean2.java
new file mode 100644
index 0000000..1fd6b19
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/transactions/transaction-scoped/servlet/test/beans/Bean2.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import test.servlet.TransactionScopedTestServlet;
+
+import javax.annotation.PreDestroy;
+import javax.enterprise.inject.spi.PassivationCapable;
+import javax.transaction.TransactionScoped;
+import java.io.Serializable;
+
+@TransactionScoped
+public class Bean2 implements PassivationCapable, Serializable {
+    public String foo() {
+        return this + ".foo()";
+    }
+
+    @PreDestroy
+    public void preDestroy() {
+        TransactionScopedTestServlet.bean2PreDestroyCalled = true;
+    }
+
+    @Override
+    public String getId() {
+        return "" + this;
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/transactions/transaction-scoped/servlet/test/servlet/TransactionScopedTestServlet.java b/appserver/tests/appserv-tests/devtests/cdi/transactions/transaction-scoped/servlet/test/servlet/TransactionScopedTestServlet.java
new file mode 100644
index 0000000..15c0da8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/transactions/transaction-scoped/servlet/test/servlet/TransactionScopedTestServlet.java
@@ -0,0 +1,136 @@
+/*
+ * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.servlet;
+
+import test.beans.Bean1;
+import test.beans.Bean2;
+
+import javax.enterprise.context.ContextNotActiveException;
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.transaction.UserTransaction;
+import java.io.IOException;
+
+@WebServlet(name = "TransactionScopedTestServlet", urlPatterns = {"/TransactionScopedTestServlet"})
+public class TransactionScopedTestServlet extends HttpServlet {
+    public static boolean bean1PreDestroyCalled = false;
+    public static boolean bean2PreDestroyCalled = false;
+
+    @Inject
+    UserTransaction userTransaction;
+
+    @Inject
+    Bean1 bean1;
+
+    @Inject
+    Bean1 bean1_1;
+
+    @Inject
+    Bean2 bean2;
+
+    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+        StringBuffer msg = new StringBuffer();
+        ServletOutputStream m_out = response.getOutputStream();
+
+        msg.append( "@TransactionScoped Test");
+        try {
+            userTransaction.begin();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        bean1PreDestroyCalled = false;
+        bean2PreDestroyCalled = false;
+        msg.append(doActiveTransaction("First"));
+
+        try {
+            userTransaction.commit();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        msg.append( checkPreDestroyCalled("First") );
+        try {
+            userTransaction.begin();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        bean1PreDestroyCalled = false;
+        bean2PreDestroyCalled = false;
+        msg.append(doActiveTransaction("Second"));
+        try {
+            userTransaction.rollback();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        msg.append( checkPreDestroyCalled("Second") );
+
+        try {
+            bean1.foo();
+            msg.append("Should have gotten a ContextNotActiveException.\n");
+        } catch (ContextNotActiveException cnae) {
+        }
+
+        m_out.print( msg.toString() );
+    }
+
+    private String doActiveTransaction( String transNum ) {
+        StringBuffer msg = new StringBuffer();
+        String bean1Foo = bean1.foo();
+        String bean1_1Foo = bean1_1.foo();
+        String bean2Foo = bean2.foo();
+
+        if ( bean1PreDestroyCalled ) {
+            msg.append( transNum + " Transaction bean1.preDestroyCalled initialized incorrectly.\n");
+        }
+
+        if ( bean2PreDestroyCalled ) {
+            msg.append( transNum + " Transaction bean2.preDestroyCalled initialized incorrectly.\n");
+        }
+
+        if (!bean1Foo.equals(bean1_1Foo)) {
+            msg.append( transNum + " Transaction bean1 does not equal bean1_1.  It should.\n");
+        }
+
+        if (bean2Foo.equals(bean1Foo)) {
+            msg.append(transNum + " Transaction bean2 equals bean1.  It should not.\n");
+        }
+
+        return msg.toString();
+    }
+
+    private String checkPreDestroyCalled( String transNum ) {
+        StringBuffer msg = new StringBuffer();
+
+        if ( ! bean1PreDestroyCalled ) {
+            msg.append( transNum + " Transaction bean1.preDestroyCalled not called.\n");
+        }
+
+        if ( ! bean2PreDestroyCalled ) {
+            msg.append( transNum + " bean2.preDestroyCalled not called.\n");
+        }
+
+        return msg.toString();
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/unproxyable-deps/README b/appserver/tests/appserv-tests/devtests/cdi/unproxyable-deps/README
new file mode 100644
index 0000000..0dcab93
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/unproxyable-deps/README
@@ -0,0 +1,2 @@
+Test
+- Alternatives: MockPaymentProcessor is an Alternative that is enabled through beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/unproxyable-deps/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/unproxyable-deps/WebTest.java
new file mode 100644
index 0000000..3b8c277
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/unproxyable-deps/WebTest.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "unproxyable-deps-tests";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0. initParams: n1=v1, n2=v2";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Testing Alternatives");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+        System.out.println("TESTNAME " + TEST_NAME);
+
+        int code = conn.getResponseCode();
+        if (code != 404) {//This should return a 404 as the application must not deply
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+                stat.addStatus(TEST_NAME, stat.PASS);
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/unproxyable-deps/build.properties b/appserver/tests/appserv-tests/devtests/cdi/unproxyable-deps/build.properties
new file mode 100644
index 0000000..317b372
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/unproxyable-deps/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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-alternatives"/>
+<property name="appname" value="${module}-servlet-annotation"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/unproxyable-deps/build.xml b/appserver/tests/appserv-tests/devtests/cdi/unproxyable-deps/build.xml
new file mode 100644
index 0000000..9a442d6
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/unproxyable-deps/build.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+    	    <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+            <java classname="WebTest">
+              <arg value="${http.host}"/>
+              <arg value="${http.port}"/>
+              <arg value="${contextroot}"/>
+              <classpath>
+               <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+               <pathelement location="."/>
+             </classpath>
+            </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+<!-- Nothing to undeply here as the deployment must fail for this test 
+        <antcall target="undeploy-war-common"/>
+-->
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/unproxyable-deps/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/unproxyable-deps/descriptor/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/unproxyable-deps/descriptor/beans.xml
diff --git a/appserver/tests/appserv-tests/devtests/cdi/unproxyable-deps/servlet/UnproxyableDepsTest.java b/appserver/tests/appserv-tests/devtests/cdi/unproxyable-deps/servlet/UnproxyableDepsTest.java
new file mode 100644
index 0000000..26fe8c9
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/unproxyable-deps/servlet/UnproxyableDepsTest.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.artifacts.AppScopedBean;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" }, initParams = {
+        @WebInitParam(name = "n1", value = "v1"),
+        @WebInitParam(name = "n2", value = "v2") })
+public class UnproxyableDepsTest extends HttpServlet {
+
+    @Inject AppScopedBean ab;
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0. ");
+        String msg = "n1=" + getInitParameter("n1") + ", n2="
+                + getInitParameter("n2");
+
+        writer.write("initParams: " + msg + "\n");
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/unproxyable-deps/servlet/test/artifacts/AppScopedBean.java b/appserver/tests/appserv-tests/devtests/cdi/unproxyable-deps/servlet/test/artifacts/AppScopedBean.java
new file mode 100644
index 0000000..09251a4
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/unproxyable-deps/servlet/test/artifacts/AppScopedBean.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
+@ApplicationScoped
+public class AppScopedBean {
+    //injecting a request-scoped unproxyable bean
+    @Inject BeanScopedBean bscopedBean;
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/unproxyable-deps/servlet/test/artifacts/BeanScopedBean.java b/appserver/tests/appserv-tests/devtests/cdi/unproxyable-deps/servlet/test/artifacts/BeanScopedBean.java
new file mode 100644
index 0000000..76307f3
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/unproxyable-deps/servlet/test/artifacts/BeanScopedBean.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+
+import javax.enterprise.context.RequestScoped;
+
+@RequestScoped
+//A request-scoped final class(therefore un-proxyable)
+public final class BeanScopedBean {
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/README b/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/README
new file mode 100644
index 0000000..228b621
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/README
@@ -0,0 +1,2 @@
+Test
+- Ensure that presence of an alternative removes an unsatisfied dependency
diff --git a/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/WebTest.java b/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/WebTest.java
new file mode 100644
index 0000000..9201dcb
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/WebTest.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.*;
+import java.net.*;
+import com.sun.ejte.ccl.reporter.*;
+
+/*
+ * Unit test for @WebServlet
+ */
+public class WebTest {
+
+    private static SimpleReporterAdapter stat
+        = new SimpleReporterAdapter("appserv-tests");
+    private static final String TEST_NAME = "unsatisfied-dependencies-tests";
+    private static final String EXPECTED_RESPONSE = "Hello from Servlet 3.0. initParams: n1=v1, n2=v2";
+
+    private String host;
+    private String port;
+    private String contextRoot;
+
+    public WebTest(String[] args) {
+        host = args[0];
+        port = args[1];
+        contextRoot = args[2];
+    }
+    
+    public static void main(String[] args) {
+        stat.addDescription("Testing Unsatisfied dependencies");
+        WebTest webTest = new WebTest(args);
+        webTest.doTest();
+        stat.printSummary(TEST_NAME);
+    }
+
+    public void doTest() {
+        try { 
+            invoke();
+        } catch (Exception ex) {
+            System.out.println(TEST_NAME + " test failed");
+            stat.addStatus(TEST_NAME, stat.FAIL);
+            ex.printStackTrace();
+        }
+    }
+
+    private void invoke() throws Exception {
+        
+        String url = "http://" + host + ":" + port + contextRoot
+                     + "/myurl";
+        System.out.println("opening connection to " + url);
+        HttpURLConnection conn = (HttpURLConnection)
+            (new URL(url)).openConnection();
+        System.out.println("TESTNAME " + TEST_NAME);
+
+        int code = conn.getResponseCode();
+        if (code != 200) {
+            System.out.println("Unexpected return code: " + code);
+            stat.addStatus(TEST_NAME, stat.FAIL);
+        } else {
+            InputStream is = null;
+            BufferedReader input = null;
+            String line = null;
+            try {
+                is = conn.getInputStream();
+                input = new BufferedReader(new InputStreamReader(is));
+                line = input.readLine();
+                System.out.println("line = " + line);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+                try {
+                    if (input != null) {
+                        input.close();
+                    }
+                } catch(IOException ioe) {
+                    // ignore
+                }
+            }
+            if (EXPECTED_RESPONSE.equals(line)) {
+                stat.addStatus(TEST_NAME, stat.PASS);
+            } else {
+                System.out.println("Wrong response. Expected: " + 
+                        EXPECTED_RESPONSE + ", received: " + line);
+                stat.addStatus(TEST_NAME, stat.FAIL);
+            }
+        }    
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/build.properties b/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/build.properties
new file mode 100644
index 0000000..b44a74e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    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-unsatisfieddeps"/>
+<property name="appname" value="${module}-servlet-annotation"/>
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="contextroot" value="/${appname}"/>
+<property name="beans.xml" value="descriptor/beans.xml"/>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/build.xml b/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/build.xml
new file mode 100644
index 0000000..c0d904d
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/build.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available 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 commonSetup SYSTEM "./../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "./../../../config/common.xml">
+<!ENTITY run SYSTEM "./../../../config/run.xml">
+<!ENTITY testproperties SYSTEM "./build.properties">
+]>
+
+<project name="webcontainer_unittest" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &testproperties;
+    &run;
+
+    <target name="all" depends="build,deploy,run,undeploy"/>
+
+    <target name="clean" depends="init-common">
+        <antcall target="clean-common"/>
+        <delete>
+            <fileset dir="." includes="*.class"/>
+        </delete>
+    </target>
+       
+    <target name="compile" depends="clean">
+        <antcall target="compile-common">
+            <param name="src" value="servlet"/>
+        </antcall>
+    </target>
+
+    <target name="build" depends="compile">
+        <property name="hasWebclient" value="yes"/> 
+        <antcall target="webclient-war-common">
+            <param name="hasWebclient" value="yes"/>
+            <param name="webclient.war.classes" value="**/*.class"/> 
+        </antcall>
+
+        <javac srcdir="." classpath="${env.APS_HOME}/lib/reportbuilder.jar"
+               includes="WebTest.java"/>
+
+    </target> 
+
+    <target name="build-publish-war" depends="build, publish-war-common" />
+    
+    <target name="deploy" depends="init-common">
+        <antcall target="deploy-war-common"/>
+    </target>
+    
+    <target name="run" depends="init-common">
+        <java classname="WebTest">
+          <arg value="${http.host}"/>
+          <arg value="${http.port}"/>
+          <arg value="${contextroot}"/>
+          <classpath>
+           <pathelement location="${env.APS_HOME}/lib/reportbuilder.jar"/>
+           <pathelement location="."/>
+         </classpath>
+        </java>
+    </target>
+ 
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+    </target>   
+
+    <target name="usage">
+        <antcall target="usage-common"/>
+    </target>
+</project>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/descriptor/beans.xml b/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/descriptor/beans.xml
new file mode 100644
index 0000000..47d88ee
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/descriptor/beans.xml
@@ -0,0 +1,27 @@
+<!--
+
+    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
+
+-->
+
+<beans 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/beans_1_0.xsd">
+  <alternatives>
+  <!--  This test passes because this alternative is enabled -->
+    <class>test.artifacts.MockPaymentProcessor</class>
+  </alternatives>
+</beans>
diff --git a/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/servlet/UnsatisfiedDependenciesServlet.java b/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/servlet/UnsatisfiedDependenciesServlet.java
new file mode 100644
index 0000000..6e739b8
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/servlet/UnsatisfiedDependenciesServlet.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.io.IOException;
+import java.io.PrintWriter;
+
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import test.artifacts.MockPaymentProcessor;
+import test.artifacts.PaymentProcessor;
+import test.beans.BeanToTestUnsatisfiedDependencies;
+
+@WebServlet(name = "mytest", urlPatterns = { "/myurl" }, initParams = {
+        @WebInitParam(name = "n1", value = "v1"),
+        @WebInitParam(name = "n2", value = "v2") })
+public class UnsatisfiedDependenciesServlet extends HttpServlet {
+
+    @Inject
+    BeanToTestUnsatisfiedDependencies tb;
+
+    @Inject
+    PaymentProcessor paymentProcessor;
+
+    public void service(HttpServletRequest req, HttpServletResponse res)
+            throws IOException, ServletException {
+        PrintWriter writer = res.getWriter();
+        writer.write("Hello from Servlet 3.0. ");
+        String msg = "n1=" + getInitParameter("n1") + ", n2="
+                + getInitParameter("n2");
+
+        if (!tb.testInjection())
+            msg += "Injection of Mock dependency Failed";
+
+        //In the case of ambiguous dependencies such as synchronous and asynchronous payment processors
+        //the enabled alternative wins
+        boolean qualifierTestSuccess = paymentProcessor instanceof MockPaymentProcessor;
+        if (!qualifierTestSuccess)
+            msg += "Mock dependency injection into Servlet Failed";
+
+        writer.write("initParams: " + msg + "\n");
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/servlet/test/artifacts/MockPaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/servlet/test/artifacts/MockPaymentProcessor.java
new file mode 100644
index 0000000..13686d2
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/servlet/test/artifacts/MockPaymentProcessor.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+
+import javax.enterprise.inject.Alternative;
+
+@Alternative 
+public class MockPaymentProcessor implements PaymentProcessor{
+
+    @Override
+    public boolean processPayment() {
+        return true;
+    }
+
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/servlet/test/artifacts/PaymentProcessor.java b/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/servlet/test/artifacts/PaymentProcessor.java
new file mode 100644
index 0000000..3e25336
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/servlet/test/artifacts/PaymentProcessor.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.artifacts;
+
+public interface PaymentProcessor {
+    boolean processPayment();
+}
diff --git a/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/servlet/test/beans/BeanToTestUnsatisfiedDependencies.java b/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/servlet/test/beans/BeanToTestUnsatisfiedDependencies.java
new file mode 100644
index 0000000..fd327c0
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/cdi/unsatisfied-deps/servlet/test/beans/BeanToTestUnsatisfiedDependencies.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available 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.beans;
+
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Instance;
+import javax.inject.Inject;
+
+import test.artifacts.MockPaymentProcessor;
+import test.artifacts.PaymentProcessor;
+
+//Alternatives injection and test for availability of other beans via @Any Failed
+public class BeanToTestUnsatisfiedDependencies {
+    private int numberOfPaymentProcessors = 0;
+
+    @Inject
+    private PaymentProcessor pp;
+
+    @Inject
+    public void init(@Any Instance<PaymentProcessor> payInstances) {
+        for (PaymentProcessor p : payInstances) {
+            System.out.println("Payment Processor #"
+                    + numberOfPaymentProcessors + ":" + p);
+            numberOfPaymentProcessors++;
+        }
+    }
+
+    public boolean testInjection() {
+        System.out.println("# of Payment processors:"
+                + numberOfPaymentProcessors);
+        System.out.println("mock payment procssor:" + pp);
+        return (numberOfPaymentProcessors == 1) // MockPaymentProcessor
+                && (pp instanceof MockPaymentProcessor); 
+    }
+}