Port PAYARA-4048 fix to GlassFish.
MDBs are not CDI contextual instances. Interceptors were being added twice to the MDB.

Signed-off-by: smillidge <steve.millidge@payara.fish>
diff --git a/appserver/web/weld-integration/src/main/java/org/glassfish/weld/services/JCDIServiceImpl.java b/appserver/web/weld-integration/src/main/java/org/glassfish/weld/services/JCDIServiceImpl.java
index 14d854d..4728096 100644
--- a/appserver/web/weld-integration/src/main/java/org/glassfish/weld/services/JCDIServiceImpl.java
+++ b/appserver/web/weld-integration/src/main/java/org/glassfish/weld/services/JCDIServiceImpl.java
@@ -71,6 +71,7 @@
 import java.util.logging.Logger;
 import org.glassfish.logging.annotation.LogMessagesResourceBundle;
 import org.glassfish.logging.annotation.LoggerInfo;
+import org.jboss.weld.manager.api.WeldInjectionTarget;
 
 
 @Service
@@ -216,7 +217,14 @@
         }
 
         // Create the injection target
-        InjectionTarget it = weldManager.createInjectionTarget(ejbDesc);
+
+        InjectionTarget it = null;
+        if (ejbDesc.isMessageDriven()) {
+            // message driven beans are non-contextual and therefore createInjectionTarget is not appropriate
+            it = createMdbInjectionTarget(weldManager, ejbDesc);
+        } else {
+            it = weldManager.createInjectionTarget(ejbDesc);
+        }
 	if (null != jcdiCtx) {
         jcdiCtx.setInjectionTarget( it );
 	}
@@ -244,6 +252,17 @@
     	return jcdiCtx;
         // Injection is not performed yet. Separate injectEJBInstance() call is required.
     }
+    
+        private <T> InjectionTarget<T> createMdbInjectionTarget(WeldManager weldManager, org.jboss.weld.ejb.spi.EjbDescriptor<T> ejbDesc) {
+        AnnotatedType<T> type = weldManager.createAnnotatedType(ejbDesc.getBeanClass());
+        WeldInjectionTarget<T> target = weldManager.createInjectionTargetBuilder(type)
+                .setDecorationEnabled(false)
+                .setInterceptionEnabled(false)
+                .setTargetClassLifecycleCallbacksEnabled(false)
+                .setBean(weldManager.getBean(ejbDesc))
+                .build();
+        return weldManager.fireProcessInjectionTarget(type, target);
+    }
 
     private BeanDeploymentArchive getBDAForBeanClass(BundleDescriptor bundleDesc, String beanClassName){
         if (logger.isLoggable(Level.FINE)) {