I am trying to embed an ActiveMQ broker inside an application that is
exposing services via JMS. The intent is to create a cluster of brokers so
that:
- each instance of the application has its own broker via VM transport;
- each instance exposes a TCP transport to clients;
- each instance is a node of a network of brokers, where each broker
connects to the others using the TCP transport (statically configured).
So far I have been able to start one node, but when the second node starts
as soon as it tries to get a connection it gets this mind boggling
exception:
javax.jms.JMSException: Could not create Transport. Reason:
java.io.IOException: VMTransportServer already bound at: vm://null
at
org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:35)
at
org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQConnectionFactory.java:239)
at
org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:252)
at
org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:224)
at
org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:172)
...
Caused by: java.io.IOException: VMTransportServer already bound at:
vm://null
at
org.apache.activemq.transport.vm.VMTransportFactory.bind(VMTransportFactory.java:201)
at
org.apache.activemq.transport.vm.VMTransportFactory.doCompositeConnect(VMTransportFactory.java:133)
at
org.apache.activemq.transport.vm.VMTransportFactory.doConnect(VMTransportFactory.java:53)
at
org.apache.activemq.transport.TransportFactory.doConnect(TransportFactory.java:51)
at
org.apache.activemq.transport.TransportFactory.connect(TransportFactory.java:80)
at
org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQConnectionFactory.java:237)
... 6 more
The code that starts the embedded broker is like this:
-------------------------------
ActiveMQConnectionFactory conFactory= new ActiveMQConnectionFactory(
"vm://" + nodeName + "?create=false&waitForStart=10000");
BrokerService activeMQ= new BrokerService();
activeMQ.setBrokerName(nodeName);
if (otherNodes.length > 0) {
String nodesConnectorString= "static:(";
for (String node : otherNodes)
nodesConnectorString += "tcp://" + node.trim() + ",";
nodesConnectorString= nodesConnectorString.substring(
0, nodesConnectorString.length() -1) + ")";
URI nodesConnectorUri= new URI(nodesConnectorString);
NetworkConnector nodeConnector= activeMQ.addNetworkConnector(
nodesConnectorUri);
nodeConnector.setDuplex(true);
}
URI localConnectorUri= new URI("tcp://localhost:" + externalPort);
activeMQ.addConnector(localConnectorUri);
activeMQ.start();
ActiveMQConnection connection=
(ActiveMQConnection) conFactory.createConnection(); // EXCEPTION!
connection.start();
-------------------------------
I don't understand to what that "vm://null" is referring, since I created
the connection factory specifying a name for the broker (the "nodeName" is
not null). And more, I don't understand how the exception can be raised
about the VM transport, since the two nodes are on separate JVMs...
Any help would be greatly appreciated.
Thanks in advance.
Gianluca
--
View this message in context:
http://www.nabble.com/VMTransportServer-already-bound-tp23296126p23296126.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.