You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2016/03/15 20:16:55 UTC

tomee git commit: TOMEE-1735 fixing JAXB model, and adding the default connection factory

Repository: tomee
Updated Branches:
  refs/heads/master 1bf768b76 -> 7674cbb92


TOMEE-1735 fixing JAXB model, and adding the default connection factory


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/7674cbb9
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/7674cbb9
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/7674cbb9

Branch: refs/heads/master
Commit: 7674cbb9217ac5da7cfc18156e822598ebc1f1c1
Parents: 1bf768b
Author: Romain manni-Bucau <rm...@gmail.com>
Authored: Tue Mar 15 20:16:44 2016 +0100
Committer: Romain manni-Bucau <rm...@gmail.com>
Committed: Tue Mar 15 20:16:44 2016 +0100

----------------------------------------------------------------------
 .../org/apache/openejb/config/AutoConfig.java   | 28 ++++-----
 .../config/BuiltInEnvironmentEntries.java       |  7 +++
 .../resource/activemq/jms2/DelegateMessage.java |  4 ++
 .../openejb/resource/activemq/jms2/JMS2.java    |  2 +-
 .../activemq/jms2/TomEEXAConnection.java        |  9 ++-
 .../activemq/jms2/cdi/JMS2CDIExtension.java     | 37 ++++++++----
 .../JMS2AMQDefaultConnectionFactoryTest.java    | 62 ++++++++++++++++++++
 .../apache/openejb/activemq/JMS2AMQTest.java    |  9 +++
 .../org/apache/openejb/jee/Application.java     |  3 +-
 .../apache/openejb/jee/ApplicationClient.java   |  3 +-
 .../java/org/apache/openejb/jee/EntityBean.java |  1 +
 .../org/apache/openejb/jee/Interceptor.java     |  1 +
 .../openejb/jee/JMSConnectionFactory.java       |  1 +
 .../apache/openejb/jee/MessageDrivenBean.java   |  1 +
 .../org/apache/openejb/jee/SessionBean.java     |  1 +
 .../java/org/apache/openejb/jee/WebApp.java     |  1 +
 .../org/apache/openejb/jee/WebFragment.java     |  1 +
 17 files changed, 137 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/7674cbb9/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java b/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
index 2f75f84..fa81261 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
@@ -65,20 +65,6 @@ import org.apache.openejb.util.SuperProperties;
 import org.apache.openejb.util.URISupport;
 import org.apache.openejb.util.URLs;
 
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
 import javax.annotation.ManagedBean;
 import javax.ejb.TimerService;
 import javax.enterprise.inject.spi.BeanManager;
@@ -102,6 +88,20 @@ import javax.ws.rs.core.SecurityContext;
 import javax.ws.rs.core.UriInfo;
 import javax.ws.rs.ext.ContextResolver;
 import javax.ws.rs.ext.Providers;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.TreeSet;
 
 import static java.util.Arrays.asList;
 

http://git-wip-us.apache.org/repos/asf/tomee/blob/7674cbb9/container/openejb-core/src/main/java/org/apache/openejb/config/BuiltInEnvironmentEntries.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/BuiltInEnvironmentEntries.java b/container/openejb-core/src/main/java/org/apache/openejb/config/BuiltInEnvironmentEntries.java
index af90000..d5c9d20 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/BuiltInEnvironmentEntries.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/BuiltInEnvironmentEntries.java
@@ -94,6 +94,13 @@ public class BuiltInEnvironmentEntries implements DynamicDeployer {
             add(jndi.getResourceEnvRefMap(), new ResourceEnvRef().name("java:comp/DefaultManagedExecutorService").type(ManagedExecutorService.class));
             add(jndi.getResourceEnvRefMap(), new ResourceEnvRef().name("java:comp/DefaultManagedScheduledExecutorService").type(ManagedScheduledExecutorService.class));
             add(jndi.getResourceEnvRefMap(), new ResourceEnvRef().name("java:comp/DefaultManagedThreadFactory").type(ManagedThreadFactory.class));
+            try {
+                final ResourceEnvRef ref = new ResourceEnvRef().name("java:comp/DefaultJMSConnectionFactory")
+                    .type(Thread.currentThread().getContextClassLoader().loadClass("javax.jms.ConnectionFactory"));
+                add(jndi.getResourceEnvRefMap(), ref);
+            } catch (final ClassNotFoundException | NoClassDefFoundError notThere) {
+                // no-op
+            }
         }
 
 

http://git-wip-us.apache.org/repos/asf/tomee/blob/7674cbb9/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/jms2/DelegateMessage.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/jms2/DelegateMessage.java b/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/jms2/DelegateMessage.java
index a7efd81..793c45e 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/jms2/DelegateMessage.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/jms2/DelegateMessage.java
@@ -278,4 +278,8 @@ public class DelegateMessage implements Message {
     public void clearBody() throws JMSException {
         message.clearBody();
     }
+
+    public Message unwrap() {
+        return message;
+    }
 }

http://git-wip-us.apache.org/repos/asf/tomee/blob/7674cbb9/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/jms2/JMS2.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/jms2/JMS2.java b/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/jms2/JMS2.java
index 33118e3..4182ff0 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/jms2/JMS2.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/jms2/JMS2.java
@@ -44,7 +44,7 @@ import javax.jms.TransactionInProgressRuntimeException;
 import javax.jms.TransactionRolledBackException;
 import javax.jms.TransactionRolledBackRuntimeException;
 
-class JMS2 {
+final class JMS2 {
     private JMS2() {
         // no-op
     }

http://git-wip-us.apache.org/repos/asf/tomee/blob/7674cbb9/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/jms2/TomEEXAConnection.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/jms2/TomEEXAConnection.java b/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/jms2/TomEEXAConnection.java
index 7726fd5..38039e3 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/jms2/TomEEXAConnection.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/jms2/TomEEXAConnection.java
@@ -1,6 +1,5 @@
 package org.apache.openejb.resource.activemq.jms2;
 
-import org.apache.activemq.ActiveMQConnection;
 import org.apache.activemq.ActiveMQXAConnection;
 import org.apache.activemq.management.JMSStatsImpl;
 import org.apache.activemq.transport.Transport;
@@ -20,23 +19,23 @@ public class TomEEXAConnection extends ActiveMQXAConnection {
 
     @Override
     public Session createSession(final int sessionMode) throws JMSException {
-        return null;
+        return super.createSession(sessionMode == Session.SESSION_TRANSACTED, sessionMode);
     }
 
     @Override
     public Session createSession() throws JMSException {
-        return null;
+        return createSession(Session.AUTO_ACKNOWLEDGE);
     }
 
     @Override
     public ConnectionConsumer createSharedDurableConnectionConsumer(final Topic topic, final String subscriptionName, final String messageSelector,
                                                                     final ServerSessionPool sessionPool, final int maxMessages) throws JMSException {
-        return null;
+        throw new IllegalStateException("Not allowed in a RA");
     }
 
     @Override
     public ConnectionConsumer createSharedConnectionConsumer(final Topic topic, final String subscriptionName, final String messageSelector,
                                                              final ServerSessionPool sessionPool, final int maxMessages) throws JMSException {
-        return null;
+        throw new IllegalStateException("Not allowed in a RA");
     }
 }

http://git-wip-us.apache.org/repos/asf/tomee/blob/7674cbb9/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/jms2/cdi/JMS2CDIExtension.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/jms2/cdi/JMS2CDIExtension.java b/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/jms2/cdi/JMS2CDIExtension.java
index 43eb6ec..1b4c22a 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/jms2/cdi/JMS2CDIExtension.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/jms2/cdi/JMS2CDIExtension.java
@@ -17,6 +17,8 @@
 package org.apache.openejb.resource.activemq.jms2.cdi;
 
 import org.apache.openejb.OpenEJB;
+import org.apache.openejb.assembler.classic.OpenEjbConfiguration;
+import org.apache.openejb.assembler.classic.ResourceInfo;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.spi.ContainerSystem;
 
@@ -83,16 +85,34 @@ public class JMS2CDIExtension implements Extension {
             final JMSSessionMode sessionMode = annotated.getAnnotation(JMSSessionMode.class);
             final JMSPasswordCredential credential = annotated.getAnnotation(JMSPasswordCredential.class);
 
-            final String jndi = jmsConnectionFactory == null ? null : "openejb:Resource/" + jmsConnectionFactory.value();
+            final String jndi = "openejb:Resource/" +
+                (jmsConnectionFactory == null ? findAnyConnectionFactory() : jmsConnectionFactory.value());
             return new Key(
                 jndi,
                 credential != null ? credential.userName() : null,
                 credential != null ? credential.password() : null,
                 sessionMode != null ? sessionMode.value() : null);
         }
+
+        private String findAnyConnectionFactory() {
+            final OpenEjbConfiguration component = SystemInstance.get().getComponent(OpenEjbConfiguration.class);
+            if (component != null && component.facilities != null) {
+                for (final ResourceInfo ri : component.facilities.resources) {
+                    if (ri.types.contains("javax.jms.ConnectionFactory")) {
+                        return ri.id;
+                    }
+                }
+
+                // try the default one
+                return "DefaultJMSConnectionFactory";
+            }
+            // something is wrong, just fail
+            throw new IllegalArgumentException(
+                "No connection factory found, either use @JMSConnectionFactory JMSContext or define a connection factory");
+        }
     }
 
-    public static abstract class AutoContextDestruction implements Serializable {
+    public abstract static class AutoContextDestruction implements Serializable {
         private transient Map<Key, JMSContext> contexts = new ConcurrentHashMap<>();
 
         public void push(final Key key, final JMSContext c) {
@@ -159,22 +179,15 @@ public class JMS2CDIExtension implements Extension {
                     return connectionFactoryInstance;
                 }
                 try {
-                    return connectionFactoryInstance = connectionFactory == null ?
-                        findDefaultConnectionFactory() :
-                        ConnectionFactory.class.cast(
-                            SystemInstance.get().getComponent(ContainerSystem.class).getJNDIContext()
-                                .lookup(connectionFactory));
+                    return connectionFactoryInstance = ConnectionFactory.class.cast(
+                        SystemInstance.get().getComponent(ContainerSystem.class).getJNDIContext()
+                            .lookup(connectionFactory));
                 } catch (final NamingException e) {
                     throw new JMSRuntimeException(e.getMessage(), null, e);
                 }
             }
         }
 
-        private ConnectionFactory findDefaultConnectionFactory() {
-            // TODO: link scanning to auto create a default and use it there? See AutoConfig
-            throw new IllegalArgumentException("You have to specify @JMSConnectionFactory");
-        }
-
         public JMSContext create() {
             if (username != null && session != null) {
                 return connectionFactory().createContext(username, password, session);

http://git-wip-us.apache.org/repos/asf/tomee/blob/7674cbb9/container/openejb-core/src/test/java/org/apache/openejb/activemq/JMS2AMQDefaultConnectionFactoryTest.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/activemq/JMS2AMQDefaultConnectionFactoryTest.java b/container/openejb-core/src/test/java/org/apache/openejb/activemq/JMS2AMQDefaultConnectionFactoryTest.java
new file mode 100644
index 0000000..8da8300
--- /dev/null
+++ b/container/openejb-core/src/test/java/org/apache/openejb/activemq/JMS2AMQDefaultConnectionFactoryTest.java
@@ -0,0 +1,62 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.activemq;
+
+import org.apache.openejb.junit.ApplicationComposer;
+import org.apache.openejb.testing.Classes;
+import org.apache.openejb.testing.SimpleLog;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.ejb.Singleton;
+import javax.inject.Inject;
+import javax.jms.ConnectionFactory;
+import javax.jms.JMSContext;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+@SimpleLog
+@Classes(cdi = true, innerClassesAsBean = true)
+@RunWith(ApplicationComposer.class)
+public class JMS2AMQDefaultConnectionFactoryTest {
+    @Inject
+    private JMSContext defaultContext;
+
+    @Inject
+    private JustToGetAJndiContext justToGetAJndiContext;
+
+    @Test
+    public void checkCF() throws Exception {
+        assertEquals("test", defaultContext.createTextMessage("test").getText());
+        justToGetAJndiContext.checkJndi();
+    }
+
+    @Singleton
+    public static class JustToGetAJndiContext {
+        public void checkJndi() {
+            try {
+                assertTrue(ConnectionFactory.class.isInstance(new InitialContext().lookup("java:comp/DefaultJMSConnectionFactory")));
+            } catch (final NamingException e) {
+                fail();
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/tomee/blob/7674cbb9/container/openejb-core/src/test/java/org/apache/openejb/activemq/JMS2AMQTest.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/activemq/JMS2AMQTest.java b/container/openejb-core/src/test/java/org/apache/openejb/activemq/JMS2AMQTest.java
index 5fc8e64..3ef3b04 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/activemq/JMS2AMQTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/activemq/JMS2AMQTest.java
@@ -107,6 +107,9 @@ public class JMS2AMQTest {
     @JMSConnectionFactory("cf")
     private JMSContext context;
 
+    @Inject // just there to ensure the injection works and we don't require @JMSConnectionFactory
+    private JMSContext defaultContext;
+
     @Before
     public void resetLatch() {
         Listener.reset();
@@ -235,6 +238,12 @@ public class JMS2AMQTest {
     }
 
     @Test
+    public void sendToMdbWithDefaultCf() throws Exception {
+        defaultContext.createProducer().send(destination, TEXT);
+        assertTrue(Listener.sync());
+    }
+
+    @Test
     public void receive() throws InterruptedException {
         final String text = TEXT + "2";
         final AtomicReference<Throwable> error = new AtomicReference<>();

http://git-wip-us.apache.org/repos/asf/tomee/blob/7674cbb9/container/openejb-jee/src/main/java/org/apache/openejb/jee/Application.java
----------------------------------------------------------------------
diff --git a/container/openejb-jee/src/main/java/org/apache/openejb/jee/Application.java b/container/openejb-jee/src/main/java/org/apache/openejb/jee/Application.java
index 1d7beaa..da3c49b 100644
--- a/container/openejb-jee/src/main/java/org/apache/openejb/jee/Application.java
+++ b/container/openejb-jee/src/main/java/org/apache/openejb/jee/Application.java
@@ -92,7 +92,8 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
     "persistenceContextRef",
     "persistenceUnitRef",
     "messageDestination",
-    "dataSource"
+    "dataSource",
+    "jmsConnectionFactories"
 })
 public class Application implements JndiConsumer, NamedModule {
 

http://git-wip-us.apache.org/repos/asf/tomee/blob/7674cbb9/container/openejb-jee/src/main/java/org/apache/openejb/jee/ApplicationClient.java
----------------------------------------------------------------------
diff --git a/container/openejb-jee/src/main/java/org/apache/openejb/jee/ApplicationClient.java b/container/openejb-jee/src/main/java/org/apache/openejb/jee/ApplicationClient.java
index 59aba37..578ea32 100644
--- a/container/openejb-jee/src/main/java/org/apache/openejb/jee/ApplicationClient.java
+++ b/container/openejb-jee/src/main/java/org/apache/openejb/jee/ApplicationClient.java
@@ -88,7 +88,8 @@ import java.util.Map;
     "preDestroy",
     "callbackHandler",
     "messageDestination",
-    "dataSource"
+    "dataSource",
+    "jmsConnectionFactories"
 
 })
 public class ApplicationClient implements JndiConsumer, Lifecycle, NamedModule {

http://git-wip-us.apache.org/repos/asf/tomee/blob/7674cbb9/container/openejb-jee/src/main/java/org/apache/openejb/jee/EntityBean.java
----------------------------------------------------------------------
diff --git a/container/openejb-jee/src/main/java/org/apache/openejb/jee/EntityBean.java b/container/openejb-jee/src/main/java/org/apache/openejb/jee/EntityBean.java
index cd10c1d..29b307d 100644
--- a/container/openejb-jee/src/main/java/org/apache/openejb/jee/EntityBean.java
+++ b/container/openejb-jee/src/main/java/org/apache/openejb/jee/EntityBean.java
@@ -104,6 +104,7 @@ import java.util.Map;
     "postConstruct",
     "preDestroy",
     "dataSource",
+    "jmsConnectionFactories",
     "securityRoleRef",
     "securityIdentity",
     "query"

http://git-wip-us.apache.org/repos/asf/tomee/blob/7674cbb9/container/openejb-jee/src/main/java/org/apache/openejb/jee/Interceptor.java
----------------------------------------------------------------------
diff --git a/container/openejb-jee/src/main/java/org/apache/openejb/jee/Interceptor.java b/container/openejb-jee/src/main/java/org/apache/openejb/jee/Interceptor.java
index 1acd12f..47c0c35 100644
--- a/container/openejb-jee/src/main/java/org/apache/openejb/jee/Interceptor.java
+++ b/container/openejb-jee/src/main/java/org/apache/openejb/jee/Interceptor.java
@@ -76,6 +76,7 @@ import java.util.Map;
     "postConstruct",
     "preDestroy",
     "dataSource",
+    "jmsConnectionFactories",
     "postActivate",
     "prePassivate",
     "afterBegin",

http://git-wip-us.apache.org/repos/asf/tomee/blob/7674cbb9/container/openejb-jee/src/main/java/org/apache/openejb/jee/JMSConnectionFactory.java
----------------------------------------------------------------------
diff --git a/container/openejb-jee/src/main/java/org/apache/openejb/jee/JMSConnectionFactory.java b/container/openejb-jee/src/main/java/org/apache/openejb/jee/JMSConnectionFactory.java
index 754be0a..f967378 100644
--- a/container/openejb-jee/src/main/java/org/apache/openejb/jee/JMSConnectionFactory.java
+++ b/container/openejb-jee/src/main/java/org/apache/openejb/jee/JMSConnectionFactory.java
@@ -32,6 +32,7 @@ import java.util.List;
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlType(name = "jms-connection-factoryType", propOrder = {
     "name",
+    "descriptions",
     "className",
     "interfaceName",
     "resourceAdapter",

http://git-wip-us.apache.org/repos/asf/tomee/blob/7674cbb9/container/openejb-jee/src/main/java/org/apache/openejb/jee/MessageDrivenBean.java
----------------------------------------------------------------------
diff --git a/container/openejb-jee/src/main/java/org/apache/openejb/jee/MessageDrivenBean.java b/container/openejb-jee/src/main/java/org/apache/openejb/jee/MessageDrivenBean.java
index 936032f..b9b1d88 100644
--- a/container/openejb-jee/src/main/java/org/apache/openejb/jee/MessageDrivenBean.java
+++ b/container/openejb-jee/src/main/java/org/apache/openejb/jee/MessageDrivenBean.java
@@ -100,6 +100,7 @@ import java.util.Map;
     "postConstruct",
     "preDestroy",
     "dataSource",
+    "jmsConnectionFactories",
     "securityRoleRef",
     "securityIdentity"
 })

http://git-wip-us.apache.org/repos/asf/tomee/blob/7674cbb9/container/openejb-jee/src/main/java/org/apache/openejb/jee/SessionBean.java
----------------------------------------------------------------------
diff --git a/container/openejb-jee/src/main/java/org/apache/openejb/jee/SessionBean.java b/container/openejb-jee/src/main/java/org/apache/openejb/jee/SessionBean.java
index 4f2611a..5091b8a 100644
--- a/container/openejb-jee/src/main/java/org/apache/openejb/jee/SessionBean.java
+++ b/container/openejb-jee/src/main/java/org/apache/openejb/jee/SessionBean.java
@@ -137,6 +137,7 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
     "postConstruct",
     "preDestroy",
     "dataSource",
+    "jmsConnectionFactories",
     "postActivate",
     "prePassivate",
     "securityRoleRef",

http://git-wip-us.apache.org/repos/asf/tomee/blob/7674cbb9/container/openejb-jee/src/main/java/org/apache/openejb/jee/WebApp.java
----------------------------------------------------------------------
diff --git a/container/openejb-jee/src/main/java/org/apache/openejb/jee/WebApp.java b/container/openejb-jee/src/main/java/org/apache/openejb/jee/WebApp.java
index 44a70cb..82c78c7 100644
--- a/container/openejb-jee/src/main/java/org/apache/openejb/jee/WebApp.java
+++ b/container/openejb-jee/src/main/java/org/apache/openejb/jee/WebApp.java
@@ -95,6 +95,7 @@ import java.util.Map;
     "messageDestination",
     "absoluteOrdering",
     "dataSource",
+    "jmsConnectionFactories",
     "moduleName"
 
 })

http://git-wip-us.apache.org/repos/asf/tomee/blob/7674cbb9/container/openejb-jee/src/main/java/org/apache/openejb/jee/WebFragment.java
----------------------------------------------------------------------
diff --git a/container/openejb-jee/src/main/java/org/apache/openejb/jee/WebFragment.java b/container/openejb-jee/src/main/java/org/apache/openejb/jee/WebFragment.java
index 0adfef9..5ff0687 100644
--- a/container/openejb-jee/src/main/java/org/apache/openejb/jee/WebFragment.java
+++ b/container/openejb-jee/src/main/java/org/apache/openejb/jee/WebFragment.java
@@ -93,6 +93,7 @@ import java.util.Map;
     "messageDestination",
     "ordering",
     "dataSource",
+    "jmsConnectionFactories",
     "name"
 
 })