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>