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"
})