You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by jg...@apache.org on 2020/04/02 16:02:16 UTC

[tomee] branch master updated (b08f797 -> f53ac2d)

This is an automated email from the ASF dual-hosted git repository.

jgallimore pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/tomee.git.


    from b08f797  Merge branch 'cl-config'
     new cedcf57  TOMEE-2770 Add a unit test to use JMX to ensure producers are not leaked.
     new f53ac2d  Revert previous check

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../resource/activemq/jms2/JMSContextImpl.java     |  3 ++
 .../org/apache/openejb/activemq/JMS2AMQTest.java   | 43 +++++++++++++++++++++-
 2 files changed, 44 insertions(+), 2 deletions(-)


[tomee] 01/02: TOMEE-2770 Add a unit test to use JMX to ensure producers are not leaked.

Posted by jg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jgallimore pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomee.git

commit cedcf5714344969ba86149cc8501c240e2232f05
Author: Jonathan Gallimore <jo...@jrg.me.uk>
AuthorDate: Thu Apr 2 16:59:42 2020 +0100

    TOMEE-2770 Add a unit test to use JMX to ensure producers are not leaked.
---
 .../resource/activemq/jms2/JMSContextImpl.java     |  3 ++
 .../org/apache/openejb/activemq/JMS2AMQTest.java   | 43 +++++++++++++++++++++-
 .../java/org/superbiz/jms/CustomJmsService.java    |  3 ++
 3 files changed, 47 insertions(+), 2 deletions(-)

diff --git a/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/jms2/JMSContextImpl.java b/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/jms2/JMSContextImpl.java
index 573624d..872b1c9 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/jms2/JMSContextImpl.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/jms2/JMSContextImpl.java
@@ -143,6 +143,9 @@ public class JMSContextImpl implements JMSContext {
     public void close() {
         try {
             synchronized (this) {
+                if (session != null) {
+                    session.close();
+                }
                 if (connection != null) {
                     connection.close();
                 }
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 ba6ab54..acffaaf 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
@@ -27,15 +27,19 @@ import org.apache.openejb.testing.SimpleLog;
 import org.apache.openejb.testng.PropertiesBuilder;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.spi.ContextsService;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
 import javax.annotation.Resource;
 import javax.ejb.ActivationConfigProperty;
+import javax.ejb.EJB;
 import javax.ejb.MessageDriven;
+import javax.ejb.Singleton;
+import javax.ejb.TransactionAttribute;
+import javax.ejb.TransactionAttributeType;
 import javax.enterprise.context.RequestScoped;
-import javax.enterprise.context.SessionScoped;
 import javax.inject.Inject;
 import javax.jms.ConnectionFactory;
 import javax.jms.JMSConnectionFactory;
@@ -48,6 +52,8 @@ import javax.jms.MessageListener;
 import javax.jms.Queue;
 import javax.jms.TextMessage;
 import javax.jms.XAConnectionFactory;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
 import javax.transaction.HeuristicMixedException;
 import javax.transaction.HeuristicRollbackException;
 import javax.transaction.NotSupportedException;
@@ -56,7 +62,9 @@ import javax.transaction.SystemException;
 import javax.transaction.TransactionScoped;
 import javax.transaction.UserTransaction;
 import java.io.Serializable;
+import java.lang.management.ManagementFactory;
 import java.util.Properties;
+import java.util.Set;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
@@ -96,7 +104,7 @@ public class JMS2AMQTest {
     }
 
     @Module
-    @Classes(cdi = true, value = JustHereToCheckDeploymentIsOk.class)
+    @Classes(cdi = true, value = { JustHereToCheckDeploymentIsOk.class, ProducerBean.class })
     public MessageDrivenBean jar() {
         return new MessageDrivenBean(Listener.class);
     }
@@ -129,6 +137,9 @@ public class JMS2AMQTest {
     @Resource
     private UserTransaction ut;
 
+    @EJB
+    private ProducerBean pb;
+
     @Before
     public void resetLatch() {
         Listener.reset();
@@ -286,6 +297,19 @@ public class JMS2AMQTest {
     }
 
     @Test
+    public void sendToMdbWithTxAndCheckLeaks() throws Exception {
+        for (int i = 0; i < 50; i++) {
+            pb.sendInNewTx();
+        }
+
+        assertTrue(Listener.sync());
+
+        final MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
+        Set<ObjectName> objs = mBeanServer.queryNames(new ObjectName("org.apache.activemq:type=Broker,brokerName=localhost,endpoint=dynamicProducer,*"), null);
+        Assert.assertEquals(0, objs.size());
+    }
+
+    @Test
     public void receive() throws InterruptedException {
         final String text = TEXT + "2";
         final AtomicReference<Throwable> error = new AtomicReference<>();
@@ -422,4 +446,19 @@ public class JMS2AMQTest {
             assertNotNull(context);
         }
     }
+
+    @Singleton
+    public static class ProducerBean {
+        @Inject
+        @JMSConnectionFactory("cf")
+        private JMSContext context;
+
+        @Resource(name = "target")
+        private Queue destination;
+
+        @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
+        public void sendInNewTx() {
+            context.createProducer().send(destination, TEXT);
+        }
+    }
 }
diff --git a/examples/simple-jms-context/src/main/java/org/superbiz/jms/CustomJmsService.java b/examples/simple-jms-context/src/main/java/org/superbiz/jms/CustomJmsService.java
index f14fc18..38af21d 100644
--- a/examples/simple-jms-context/src/main/java/org/superbiz/jms/CustomJmsService.java
+++ b/examples/simple-jms-context/src/main/java/org/superbiz/jms/CustomJmsService.java
@@ -18,6 +18,8 @@ package org.superbiz.jms;
 
 import javax.annotation.Resource;
 import javax.ejb.Stateless;
+import javax.ejb.TransactionAttribute;
+import javax.ejb.TransactionAttributeType;
 import javax.inject.Inject;
 import javax.jms.*;
 import javax.ws.rs.GET;
@@ -26,6 +28,7 @@ import javax.ws.rs.Path;
 
 @Stateless
 @Path("message")
+@TransactionAttribute(TransactionAttributeType.NEVER)
 public class CustomJmsService {
 
     @Resource


[tomee] 02/02: Revert previous check

Posted by jg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jgallimore pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomee.git

commit f53ac2d869a5e7979786400c47caad7808674b9f
Author: Jonathan Gallimore <jo...@jrg.me.uk>
AuthorDate: Thu Apr 2 17:01:40 2020 +0100

    Revert previous check
---
 .../src/main/java/org/superbiz/jms/CustomJmsService.java               | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/examples/simple-jms-context/src/main/java/org/superbiz/jms/CustomJmsService.java b/examples/simple-jms-context/src/main/java/org/superbiz/jms/CustomJmsService.java
index 38af21d..f14fc18 100644
--- a/examples/simple-jms-context/src/main/java/org/superbiz/jms/CustomJmsService.java
+++ b/examples/simple-jms-context/src/main/java/org/superbiz/jms/CustomJmsService.java
@@ -18,8 +18,6 @@ package org.superbiz.jms;
 
 import javax.annotation.Resource;
 import javax.ejb.Stateless;
-import javax.ejb.TransactionAttribute;
-import javax.ejb.TransactionAttributeType;
 import javax.inject.Inject;
 import javax.jms.*;
 import javax.ws.rs.GET;
@@ -28,7 +26,6 @@ import javax.ws.rs.Path;
 
 @Stateless
 @Path("message")
-@TransactionAttribute(TransactionAttributeType.NEVER)
 public class CustomJmsService {
 
     @Resource