You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by an...@apache.org on 2015/11/20 17:46:00 UTC

tomee git commit: Add lock

Repository: tomee
Updated Branches:
  refs/heads/tomee-1.7.x 70ac3f9ce -> dd0614976


Add lock


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

Branch: refs/heads/tomee-1.7.x
Commit: dd0614976de2e079fd253f2bcbcc58f3313b2fa6
Parents: 70ac3f9
Author: AndyGee <an...@gmx.de>
Authored: Fri Nov 20 17:07:50 2015 +0100
Committer: AndyGee <an...@gmx.de>
Committed: Fri Nov 20 17:07:50 2015 +0100

----------------------------------------------------------------------
 .../core/transaction/JtaTransactionPolicy.java  |  7 ++-
 .../activemq/ConnectionFactoryWrapper.java      | 49 ++++++++++++------
 .../resource/activemq/ConnectionWrapper.java    | 54 +++++++++++++-------
 pom.xml                                         |  2 +-
 4 files changed, 75 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/dd061497/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/JtaTransactionPolicy.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/JtaTransactionPolicy.java b/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/JtaTransactionPolicy.java
index b51e79c..e744852 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/JtaTransactionPolicy.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/JtaTransactionPolicy.java
@@ -133,7 +133,12 @@ public abstract class JtaTransactionPolicy implements TransactionPolicy {
     @Override
     public void putResource(final Object key, final Object value) {
         if (isTransactionActive()) {
-            this.getSynchronizationRegistry().putResource(key, value);
+            final TransactionSynchronizationRegistry sr = this.getSynchronizationRegistry();
+            if (null != sr) {
+                sr.putResource(key, value);
+            } else {
+                logger.warning("TransactionSynchronizationRegistry has not been initialized");
+            }
         }
 
         if (resources == null) {

http://git-wip-us.apache.org/repos/asf/tomee/blob/dd061497/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/ConnectionFactoryWrapper.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/ConnectionFactoryWrapper.java b/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/ConnectionFactoryWrapper.java
index 0e94c1d..6e024e9 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/ConnectionFactoryWrapper.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/ConnectionFactoryWrapper.java
@@ -19,11 +19,13 @@ import javax.jms.TopicConnection;
 import javax.jms.TopicConnectionFactory;
 import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.concurrent.locks.ReentrantLock;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
 public class ConnectionFactoryWrapper implements ConnectionFactory, TopicConnectionFactory, QueueConnectionFactory {
 
+    private static final ReentrantLock lock = new ReentrantLock();
     private static final ArrayList<ConnectionWrapper> connections = new ArrayList<ConnectionWrapper>();
 
     private final org.apache.activemq.ra.ActiveMQConnectionFactory factory;
@@ -45,30 +47,45 @@ public class ConnectionFactoryWrapper implements ConnectionFactory, TopicConnect
     }
 
     private static Connection getConnection(final String name, final Connection connection) {
-        final ConnectionWrapper wrapper = new ConnectionWrapper(name, connection);
-        connections.add(wrapper);
-        return wrapper;
+        lock.lock();
+        try {
+            final ConnectionWrapper wrapper = new ConnectionWrapper(name, connection);
+            connections.add(wrapper);
+            return wrapper;
+        } finally {
+            lock.unlock();
+        }
     }
 
     protected static void remove(final ConnectionWrapper connectionWrapper) {
-        connections.remove(connectionWrapper);
+        lock.lock();
+        try {
+            connections.remove(connectionWrapper);
+        } finally {
+            lock.unlock();
+        }
     }
 
     public static void closeConnections() {
-        final Iterator<ConnectionWrapper> iterator = connections.iterator();
+        lock.lock();
+        try {
+            final Iterator<ConnectionWrapper> iterator = connections.iterator();
 
-        ConnectionWrapper next;
-        while (iterator.hasNext()) {
-            next = iterator.next();
-            iterator.remove();
-            try {
-                next.close();
-            } catch (final Exception e) {
-                //no-op
-            } finally {
-                Logger.getLogger(ConnectionFactoryWrapper.class.getName()).log(Level.SEVERE, "Closed a JMS connection. You have an application that fails to close a connection "
-                        + "created by this injection path: " + next.getName());
+            ConnectionWrapper next;
+            while (iterator.hasNext()) {
+                next = iterator.next();
+                iterator.remove();
+                try {
+                    next.close();
+                } catch (final Exception e) {
+                    //no-op
+                } finally {
+                    Logger.getLogger(ConnectionFactoryWrapper.class.getName()).log(Level.SEVERE, "Closed a JMS connection. You have an application that fails to close a connection "
+                            + "created by this injection path: " + next.getName());
+                }
             }
+        } finally {
+            lock.unlock();
         }
     }
 

http://git-wip-us.apache.org/repos/asf/tomee/blob/dd061497/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/ConnectionWrapper.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/ConnectionWrapper.java b/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/ConnectionWrapper.java
index 707e9bd..fe86874 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/ConnectionWrapper.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/ConnectionWrapper.java
@@ -26,11 +26,13 @@ import javax.jms.TopicConnection;
 import javax.jms.TopicSession;
 import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.concurrent.locks.ReentrantLock;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
 public class ConnectionWrapper implements Connection, TopicConnection, QueueConnection {
 
+    private final ReentrantLock lock = new ReentrantLock();
     private final ArrayList<SessionWrapper> sessions = new ArrayList<SessionWrapper>();
 
     private final String name;
@@ -47,13 +49,23 @@ public class ConnectionWrapper implements Connection, TopicConnection, QueueConn
     }
 
     private Session getSession(final Session session) {
-        final SessionWrapper wrapper = new SessionWrapper(this, session);
-        sessions.add(wrapper);
-        return wrapper;
+        lock.lock();
+        try {
+            final SessionWrapper wrapper = new SessionWrapper(this, session);
+            sessions.add(wrapper);
+            return wrapper;
+        } finally {
+            lock.unlock();
+        }
     }
 
     protected void remove(final SessionWrapper wrapper) {
-        sessions.remove(wrapper);
+        lock.lock();
+        try {
+            sessions.remove(wrapper);
+        } finally {
+            lock.unlock();
+        }
     }
 
     @Override
@@ -108,26 +120,30 @@ public class ConnectionWrapper implements Connection, TopicConnection, QueueConn
 
     @Override
     public void close() throws JMSException {
+        lock.lock();
+        try {
+            final Iterator<SessionWrapper> iterator = sessions.iterator();
+
+            while (iterator.hasNext()) {
+                final SessionWrapper next = iterator.next();
+                iterator.remove();
+                try {
+                    next.close();
+                } catch (final Exception e) {
+                    //no-op
+                } finally {
+                    Logger.getLogger(ConnectionFactoryWrapper.class.getName()).log(Level.SEVERE, "Closed a JMS session. You have an application that fails to close a session "
+                            + "created by this injection path: " + this.name);
+                }
+            }
 
-        final Iterator<SessionWrapper> iterator = sessions.iterator();
-
-        while (iterator.hasNext()) {
-            final SessionWrapper next = iterator.next();
-            iterator.remove();
             try {
-                next.close();
-            } catch (final Exception e) {
-                //no-op
+                con.close();
             } finally {
-                Logger.getLogger(ConnectionFactoryWrapper.class.getName()).log(Level.SEVERE, "Closed a JMS session. You have an application that fails to close a session "
-                        + "created by this injection path: " + this.name);
+                ConnectionFactoryWrapper.remove(this);
             }
-        }
-
-        try {
-            con.close();
         } finally {
-            ConnectionFactoryWrapper.remove(this);
+            lock.unlock();
         }
     }
 

http://git-wip-us.apache.org/repos/asf/tomee/blob/dd061497/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 7ec8339..6ae0220 100644
--- a/pom.xml
+++ b/pom.xml
@@ -237,7 +237,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-compiler-plugin</artifactId>
-          <version>3.2</version>
+          <version>3.3</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>