[jboss-cvs] JBoss Messaging SVN: r7698 - in trunk: src/main/org/jboss/messaging/core/client/impl and 2 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Mon Aug 10 08:41:59 EDT 2009
Author: timfox
Date: 2009-08-10 08:41:58 -0400 (Mon, 10 Aug 2009)
New Revision: 7698
Modified:
trunk/src/main/org/jboss/messaging/core/client/ClientSessionFactory.java
trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionFactoryImpl.java
trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionImpl.java
trunk/src/main/org/jboss/messaging/jms/client/JBossConnection.java
trunk/tests/src/org/jboss/messaging/tests/integration/client/FailureDeadlockTest.java
Log:
reworked deadlock fix
Modified: trunk/src/main/org/jboss/messaging/core/client/ClientSessionFactory.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/client/ClientSessionFactory.java 2009-08-10 10:37:23 UTC (rev 7697)
+++ trunk/src/main/org/jboss/messaging/core/client/ClientSessionFactory.java 2009-08-10 12:41:58 UTC (rev 7698)
@@ -173,6 +173,4 @@
void setDiscoveryRefreshTimeout(long discoveryRefreshTimeout);
void close();
-
- Executor getThreadPool();
}
Modified: trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionFactoryImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionFactoryImpl.java 2009-08-10 10:37:23 UTC (rev 7697)
+++ trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionFactoryImpl.java 2009-08-10 12:41:58 UTC (rev 7698)
@@ -848,11 +848,6 @@
closed = true;
}
-
- public Executor getThreadPool()
- {
- return threadPool;
- }
// DiscoveryListener implementation --------------------------------------------------------
Modified: trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionImpl.java 2009-08-10 10:37:23 UTC (rev 7697)
+++ trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionImpl.java 2009-08-10 12:41:58 UTC (rev 7698)
@@ -23,7 +23,6 @@
import static org.jboss.messaging.utils.SimpleString.toSimpleString;
-import java.io.File;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -1276,7 +1275,10 @@
channel.close();
}
- connectionManager.removeSession(this);
+ if (!channel.getConnection().isDestroyed())
+ {
+ connectionManager.removeSession(this);
+ }
}
private void cleanUpChildren() throws Exception
Modified: trunk/src/main/org/jboss/messaging/jms/client/JBossConnection.java
===================================================================
--- trunk/src/main/org/jboss/messaging/jms/client/JBossConnection.java 2009-08-10 10:37:23 UTC (rev 7697)
+++ trunk/src/main/org/jboss/messaging/jms/client/JBossConnection.java 2009-08-10 12:41:58 UTC (rev 7698)
@@ -123,8 +123,6 @@
private final int transactionBatchSize;
private ClientSession initialSession;
-
- private final Executor executor;
// Constructors ---------------------------------------------------------------------------------
@@ -145,8 +143,6 @@
this.clientID = clientID;
this.sessionFactory = sessionFactory;
-
- this.executor = new OrderedExecutorFactory(sessionFactory.getThreadPool()).getExecutor();
uid = UUIDGenerator.getInstance().generateSimpleStringUUID();
@@ -400,7 +396,7 @@
{
tempQueues.remove(queueAddress);
}
-
+
public boolean containsTemporaryQueue(final SimpleString queueAddress)
{
return tempQueues.contains(queueAddress);
@@ -425,7 +421,7 @@
{
sessions.remove(session);
}
-
+
public ClientSession getInitialSession()
{
return initialSession;
@@ -441,8 +437,7 @@
{
if (!closed)
{
- log.warn("I'm closing a connection you left open. Please make sure you close all connections explicitly " +
- "before letting them go out of scope!");
+ log.warn("I'm closing a connection you left open. Please make sure you close all connections explicitly " + "before letting them go out of scope!");
close();
}
}
@@ -523,8 +518,8 @@
{
try
{
- initialSession = sessionFactory.createSession(username, password, false, false, false, false, 0);
-
+ initialSession = sessionFactory.createSession(username, password, false, false, false, false, 0);
+
initialSession.addFailureListener(listener);
}
catch (MessagingException me)
@@ -537,16 +532,16 @@
private class JMSFailureListener implements FailureListener
{
- //Make sure it's only called once
+ // Make sure it's only called once
private boolean failed;
-
+
public synchronized boolean connectionFailed(final MessagingException me)
{
if (failed)
{
return true;
}
-
+
if (me == null)
{
return true;
@@ -557,19 +552,16 @@
final JMSException je = new JMSException(me.toString());
je.initCause(me);
-
-// executor.execute(new Runnable()
-// {
-// public void run()
-// {
-// synchronized (exceptionListener)
-// {
- exceptionListener.onException(je);
-// }
-// }
-// });
+
+ new Thread(new Runnable()
+ {
+ public void run()
+ {
+ exceptionListener.onException(je);
+ }
+ }).start();
}
-
+
failed = true;
return true;
Modified: trunk/tests/src/org/jboss/messaging/tests/integration/client/FailureDeadlockTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/client/FailureDeadlockTest.java 2009-08-10 10:37:23 UTC (rev 7697)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/client/FailureDeadlockTest.java 2009-08-10 12:41:58 UTC (rev 7698)
@@ -98,98 +98,95 @@
super.tearDown();
}
-
- public void testFoo()
- {}
-
+
// https://jira.jboss.org/jira/browse/JBMESSAGING-1702
//Test that two failures concurrently executing and calling the same exception listener
//don't deadlock
-// public void testDeadlock() throws Exception
-// {
-// for (int i = 0; i < 100; i++)
-// {
-// final Connection conn1 = cf1.createConnection();
-//
-// Session sess1 = conn1.createSession(false, Session.AUTO_ACKNOWLEDGE);
-// RemotingConnection rc1 = ((ClientSessionImpl)((JBossSession)sess1).getCoreSession()).getConnection();
-//
-// final Connection conn2 = cf2.createConnection();
-//
-// Session sess2 = conn2.createSession(false, Session.AUTO_ACKNOWLEDGE);
-// RemotingConnection rc2 = ((ClientSessionImpl)((JBossSession)sess2).getCoreSession()).getConnection();
-//
-// ExceptionListener listener1 = new ExceptionListener()
-// {
-// public void onException(JMSException exception)
-// {
-// try
-// {
-// conn2.close();
-// }
-// catch (Exception e)
-// {
-// log.error("Failed to close connection2", e);
-// }
-// }
-// };
-//
-// conn1.setExceptionListener(listener1);
-//
-// conn2.setExceptionListener(listener1);
-//
-// Failer f1 = new Failer(rc1);
-//
-// Failer f2 = new Failer(rc2);
-//
-// f1.start();
-//
-// f2.start();
-//
-// f1.join();
-//
-// f2.join();
-//
-// conn1.close();
-//
-// conn2.close();
-// }
-// }
-//
-// private class Failer extends Thread
-// {
-// RemotingConnection conn;
-//
-// Failer(RemotingConnection conn)
-// {
-// this.conn = conn;
-// }
-//
-// public void run()
-// {
-// conn.fail(new MessagingException(MessagingException.NOT_CONNECTED, "blah"));
-// }
-// }
-//
-//
-// //https://jira.jboss.org/jira/browse/JBMESSAGING-1703
-// //Make sure that failing a connection removes it from the connection manager and can't be returned in a subsequent call
-// public void testUsingDeadConnection() throws Exception
-// {
-// for (int i = 0; i < 100; i++)
-// {
-// final Connection conn1 = cf1.createConnection();
-//
-// Session sess1 = conn1.createSession(false, Session.AUTO_ACKNOWLEDGE);
-// RemotingConnection rc1 = ((ClientSessionImpl)((JBossSession)sess1).getCoreSession()).getConnection();
-//
-// rc1.fail(new MessagingException(MessagingException.NOT_CONNECTED, "blah"));
-//
-// Session sess2 = conn1.createSession(false, Session.AUTO_ACKNOWLEDGE);
-//
-// conn1.close();
-// }
-// }
+ public void testDeadlock() throws Exception
+ {
+ for (int i = 0; i < 100; i++)
+ {
+ final Connection conn1 = cf1.createConnection();
+ Session sess1 = conn1.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ RemotingConnection rc1 = ((ClientSessionImpl)((JBossSession)sess1).getCoreSession()).getConnection();
+
+ final Connection conn2 = cf2.createConnection();
+
+ Session sess2 = conn2.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ RemotingConnection rc2 = ((ClientSessionImpl)((JBossSession)sess2).getCoreSession()).getConnection();
+
+ ExceptionListener listener1 = new ExceptionListener()
+ {
+ public void onException(JMSException exception)
+ {
+ try
+ {
+ conn2.close();
+ }
+ catch (Exception e)
+ {
+ log.error("Failed to close connection2", e);
+ }
+ }
+ };
+
+ conn1.setExceptionListener(listener1);
+
+ conn2.setExceptionListener(listener1);
+
+ Failer f1 = new Failer(rc1);
+
+ Failer f2 = new Failer(rc2);
+
+ f1.start();
+
+ f2.start();
+
+ f1.join();
+
+ f2.join();
+
+ conn1.close();
+
+ conn2.close();
+ }
+ }
+
+ private class Failer extends Thread
+ {
+ RemotingConnection conn;
+
+ Failer(RemotingConnection conn)
+ {
+ this.conn = conn;
+ }
+
+ public void run()
+ {
+ conn.fail(new MessagingException(MessagingException.NOT_CONNECTED, "blah"));
+ }
+ }
+
+
+ //https://jira.jboss.org/jira/browse/JBMESSAGING-1703
+ //Make sure that failing a connection removes it from the connection manager and can't be returned in a subsequent call
+ public void testUsingDeadConnection() throws Exception
+ {
+ for (int i = 0; i < 100; i++)
+ {
+ final Connection conn1 = cf1.createConnection();
+
+ Session sess1 = conn1.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ RemotingConnection rc1 = ((ClientSessionImpl)((JBossSession)sess1).getCoreSession()).getConnection();
+
+ rc1.fail(new MessagingException(MessagingException.NOT_CONNECTED, "blah"));
+
+ Session sess2 = conn1.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ conn1.close();
+ }
+ }
+
}
More information about the jboss-cvs-commits
mailing list