summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorMartin Ritchie <ritchiem@apache.org>2006-11-07 13:36:47 +0000
committerMartin Ritchie <ritchiem@apache.org>2006-11-07 13:36:47 +0000
commit4c315330f0acf00dbab36d7c17f1ed3373182388 (patch)
tree9f484fd181f76c6908ad6dca362aaf55cd70d19d /java
parent108e603b3a5ba878005c903303e8646cfe33f7f0 (diff)
downloadqpid-python-4c315330f0acf00dbab36d7c17f1ed3373182388.tar.gz
Added attempt to unbind if an error occurs.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@472108 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java')
-rw-r--r--java/client/src/org/apache/qpid/client/transport/TransportConnection.java108
-rw-r--r--java/client/test/src/org/apache/qpid/transacted/TransactedTest.java23
2 files changed, 81 insertions, 50 deletions
diff --git a/java/client/src/org/apache/qpid/client/transport/TransportConnection.java b/java/client/src/org/apache/qpid/client/transport/TransportConnection.java
index a7ca3ffc3c..5db2ac76e7 100644
--- a/java/client/src/org/apache/qpid/client/transport/TransportConnection.java
+++ b/java/client/src/org/apache/qpid/client/transport/TransportConnection.java
@@ -187,38 +187,40 @@ public class TransportConnection
if (!_inVmPipeAddress.containsKey(port))
{
_logger.info("Creating InVM Qpid.AMQP listening on port " + port);
-
+ IoHandlerAdapter provider = null;
try
{
VmPipeAddress pipe = new VmPipeAddress(port);
- String protocolProviderClass = System.getProperty("amqj.protocolprovider.class", DEFAULT_QPID_SERVER);
- _logger.info("Creating Qpid protocol provider: " + protocolProviderClass);
+ provider = createBrokerInstance(port);
+
+ _acceptor.bind(pipe, provider);
- // can't use introspection to get Provider as it is a server class.
- // need to go straight to IoHandlerAdapter but that requries the queues and exchange from the ApplicationRegistry which we can't access.
+ _inVmPipeAddress.put(port, pipe);
+ _logger.info("Created InVM Qpid.AMQP listening on port " + port);
+ }
+ catch (IOException e)
+ {
+ _logger.error(e);
- //get right constructor and pass in instancec ID - "port"
- IoHandlerAdapter provider;
+ //Try and unbind provider
try
{
- Class[] cnstr = {Integer.class};
- Object[] params = {port};
- provider = (IoHandlerAdapter) Class.forName(protocolProviderClass).getConstructor(cnstr).newInstance(params);
- //Give the broker a second to create
- try
- {
- Thread.sleep(1000);
- }
- catch (InterruptedException e)
+ VmPipeAddress pipe = new VmPipeAddress(port);
+
+ _acceptor.unbind(pipe);
+
+ if (provider == null)
{
- //do nothing
+ provider = createBrokerInstance(port);
}
+
+ _acceptor.bind(pipe, provider);
+ _inVmPipeAddress.put(port, pipe);
+ _logger.info("Created InVM Qpid.AMQP listening on port " + port);
}
- catch (Exception e)
+ catch (IOException justUseFirstException)
{
- _logger.info("Unable to create InVM Qpid.AMQP on port " + port + ". Because: " + e.getCause());
- _logger.error(e);
String because;
if (e.getCause() == null)
{
@@ -229,37 +231,61 @@ public class TransportConnection
because = e.getCause().toString();
}
-
- throw new AMQVMBrokerCreationException(port, because + " Stopped InVM Qpid.AMQP creation");
+ throw new AMQVMBrokerCreationException(port, because + " Stopped binding of InVM Qpid.AMQP");
}
+ }
+ }
+ else
+ {
+ _logger.info("InVM Qpid.AMQP on port " + port + " already exits.");
+ }
- _acceptor.bind(pipe, provider);
+ }
- _inVmPipeAddress.put(port, pipe);
- _logger.info("Created InVM Qpid.AMQP listening on port " + port);
+ private static IoHandlerAdapter createBrokerInstance(int port) throws AMQVMBrokerCreationException
+ {
+ String protocolProviderClass = System.getProperty("amqj.protocolprovider.class", DEFAULT_QPID_SERVER);
+ _logger.info("Creating Qpid protocol provider: " + protocolProviderClass);
+
+ // can't use introspection to get Provider as it is a server class.
+ // need to go straight to IoHandlerAdapter but that requries the queues and exchange from the ApplicationRegistry which we can't access.
+
+ //get right constructor and pass in instancec ID - "port"
+ IoHandlerAdapter provider;
+ try
+ {
+ Class[] cnstr = {Integer.class};
+ Object[] params = {port};
+ provider = (IoHandlerAdapter) Class.forName(protocolProviderClass).getConstructor(cnstr).newInstance(params);
+ //Give the broker a second to create
+ try
+ {
+ Thread.sleep(1000);
}
- catch (IOException e)
+ catch (InterruptedException e)
{
- _logger.error(e);
-
- String because;
- if (e.getCause() == null)
- {
- because = e.toString();
- }
- else
- {
- because = e.getCause().toString();
- }
-
- throw new AMQVMBrokerCreationException(port, because + " Stopped binding of InVM Qpid.AMQP");
+ //do nothing
}
}
- else
+ catch (Exception e)
{
- _logger.info("InVM Qpid.AMQP on port " + port + " already exits.");
+ _logger.info("Unable to create InVM Qpid.AMQP on port " + port + ". Because: " + e.getCause());
+ _logger.error(e);
+ String because;
+ if (e.getCause() == null)
+ {
+ because = e.toString();
+ }
+ else
+ {
+ because = e.getCause().toString();
+ }
+
+
+ throw new AMQVMBrokerCreationException(port, because + " Stopped InVM Qpid.AMQP creation");
}
+ return provider;
}
public static void killAllVMBrokers()
diff --git a/java/client/test/src/org/apache/qpid/transacted/TransactedTest.java b/java/client/test/src/org/apache/qpid/transacted/TransactedTest.java
index 8b2c930a36..3b102f5373 100644
--- a/java/client/test/src/org/apache/qpid/transacted/TransactedTest.java
+++ b/java/client/test/src/org/apache/qpid/transacted/TransactedTest.java
@@ -30,6 +30,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.Assert;
import org.junit.BeforeClass;
+import org.junit.AfterClass;
import javax.jms.*;
@@ -53,13 +54,7 @@ public class TransactedTest
private MessageConsumer testConsumer2;
@BeforeClass
- public static void setupVM()
- {
- System.setProperty("amqj.NoAutoCreateVMBroker", "true");
- }
-
- @Before
- public void setup() throws Exception
+ public static void setupBeforeClass()
{
try
{
@@ -69,6 +64,18 @@ public class TransactedTest
{
Assert.fail("Unable to create VM Broker: " + e.getMessage());
}
+ }
+
+ @AfterClass
+ public static void setupAfterClass()
+ {
+ TransportConnection.killVMBroker(1);
+ }
+
+ @Before
+ public void setup() throws Exception
+ {
+
queue1 = new AMQQueue("Q1", false);
queue2 = new AMQQueue("Q2", false);
@@ -115,8 +122,6 @@ public class TransactedTest
con.close();
testCon.close();
prepCon.close();
-
- TransportConnection.killVMBroker(1);
}
@Test