diff options
author | Martin Ritchie <ritchiem@apache.org> | 2006-11-07 13:36:47 +0000 |
---|---|---|
committer | Martin Ritchie <ritchiem@apache.org> | 2006-11-07 13:36:47 +0000 |
commit | 4c315330f0acf00dbab36d7c17f1ed3373182388 (patch) | |
tree | 9f484fd181f76c6908ad6dca362aaf55cd70d19d /java | |
parent | 108e603b3a5ba878005c903303e8646cfe33f7f0 (diff) | |
download | qpid-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.java | 108 | ||||
-rw-r--r-- | java/client/test/src/org/apache/qpid/transacted/TransactedTest.java | 23 |
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 |