I've been able to cluster servicemix instances by using a networkconnector
that lists each possible servicemix host that may participate in the cluster
(multicast isn't available). Not all machines will be up and running at all
times. Since I don't have multicast available, I decided to try having the
servicemix instances try to connect to a single activemq instance when they
come online. The only problem, is that when I try this, it seems like
broadcasted messages from the servicemix instances error out. It looks like
the errors only occur when components become registered or deregistered from
a specific servicemix container and notifications of the component
registration/deregistration is sent to other containers. This results in
the other containers not being aware that a component has been added/removed
to/from one of the other containers. Everything seems to work fine when I
cluster servicemix containers using their own activemq instances (though I
do periodically seem to see broadcast message errors, though nothing
critical seems affected). I do have different names for each of the
servicemix containers and I've removed the activemq.xml from each of them so
they don't start a broker. I also reordered the jms flows so that jmsFlow
is first (is that all I have to do? It definitely doesn't seem to work if
jmsFlow isn't first) like this:
<sm:broker>
<sm:securedBroker authorizationMap="#authorizationMap">
<sm:flows>
<sm:jmsFlow jmsURL="${activemq.url}" />
<sm:sedaFlow />
<sm:jcaFlow connectionManager="#connectionManager"
jmsURL="${activemq.url}" />
</sm:flows>
</sm:securedBroker>
</sm:broker>
Here are the error messages I get. I thought JMS flow was to be used for
clustered communications.. I'm not sure why jcaflow ends up used. Is there
anything other than reordering the flows and giving each servicemix
container a name that needs do?
Thanks for any help! Here are the errors I get when components attempt to
be registered.
15:58:29,493 | ERROR | pool-flow.jca.org.apache.servicemix.JCAFlow-thread-19
| JCAFlow | mix.jbi.nmr.flow.jca.JCAFlow$3 327 | Error
processing incoming broadcast message
java.lang.NullPointerException
at
org.apache.servicemix.jbi.nmr.flow.jca.JCAFlow$3.onMessage(JCAFlow.java:317)
at
org.jencks.LocalTransactionEndpoint.onMessage(LocalTransactionEndpoint.java:68)
at
org.apache.activemq.ra.MessageEndpointProxy$MessageEndpointAlive.onMessage(MessageEndpointProxy.java:123)
at
org.apache.activemq.ra.MessageEndpointProxy.onMessage(MessageEndpointProxy.java:64)
at org.apache.activemq.ActiveMQSession.run(ActiveMQSession.java:766)
at
org.apache.activemq.ra.ServerSessionImpl.run(ServerSessionImpl.java:169)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
15:58:29,493 | ERROR | ActiveMQ Session Task | JMSFlow |
nmr.flow.jms.AbstractJMSFlow$3 265 | Error processing incoming broadcast
message
java.lang.NullPointerException
at
org.apache.servicemix.jbi.nmr.flow.jms.AbstractJMSFlow$3.onMessage(AbstractJMSFlow.java:254)
at
org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:1073)
at
org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:127)
at
org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:197)
at
org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122)
at
org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
15:58:29,493 | ERROR | pool-flow.jca.org.apache.servicemix.JCAFlow-thread-20
| JCAFlow | mix.jbi.nmr.flow.jca.JCAFlow$3 327 | Error
processing incoming broadcast message
java.lang.NullPointerException
at
org.apache.servicemix.jbi.nmr.flow.jca.JCAFlow$3.onMessage(JCAFlow.java:317)
at
org.jencks.LocalTransactionEndpoint.onMessage(LocalTransactionEndpoint.java:68)
at
org.apache.activemq.ra.MessageEndpointProxy$MessageEndpointAlive.onMessage(MessageEndpointProxy.java:123)
at
org.apache.activemq.ra.MessageEndpointProxy.onMessage(MessageEndpointProxy.java:64)
at org.apache.activemq.ActiveMQSession.run(ActiveMQSession.java:766)
at
org.apache.activemq.ra.ServerSessionImpl.run(ServerSessionImpl.java:169)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
15:58:29,493 | ERROR | ActiveMQ Session Task | JMSFlow |
nmr.flow.jms.AbstractJMSFlow$3 265 | Error processing incoming broadcast
message
java.lang.NullPointerException
at
org.apache.servicemix.jbi.nmr.flow.jms.AbstractJMSFlow$3.onMessage(AbstractJMSFlow.java:254)
at
org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:1073)
at
org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:127)
at
org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:197)
at
org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122)
at
org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
15:58:29,525 | ERROR | pool-flow.jca.org.apache.servicemix.JCAFlow-thread-21
| JCAFlow | mix.jbi.nmr.flow.jca.JCAFlow$3 327 | Error
processing incoming broadcast message
java.lang.NullPointerException
at
org.apache.servicemix.jbi.nmr.flow.jca.JCAFlow$3.onMessage(JCAFlow.java:317)
at
org.jencks.LocalTransactionEndpoint.onMessage(LocalTransactionEndpoint.java:68)
at
org.apache.activemq.ra.MessageEndpointProxy$MessageEndpointAlive.onMessage(MessageEndpointProxy.java:123)
at
org.apache.activemq.ra.MessageEndpointProxy.onMessage(MessageEndpointProxy.java:64)
at org.apache.activemq.ActiveMQSession.run(ActiveMQSession.java:766)
at
org.apache.activemq.ra.ServerSessionImpl.run(ServerSessionImpl.java:169)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
15:58:29,540 | ERROR | ActiveMQ Session Task | JMSFlow |
nmr.flow.jms.AbstractJMSFlow$3 265 | Error processing incoming broadcast
message
java.lang.NullPointerException
at
org.apache.servicemix.jbi.nmr.flow.jms.AbstractJMSFlow$3.onMessage(AbstractJMSFlow.java:254)
at
org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:1073)
at
org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:127)
at
org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:197)
at
org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122)
at
org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
15:58:29,540 | ERROR | pool-flow.jca.org.apache.servicemix.JCAFlow-thread-22
| JCAFlow | mix.jbi.nmr.flow.jca.JCAFlow$3 327 | Error
processing incoming broadcast message
java.lang.NullPointerException
at
org.apache.servicemix.jbi.nmr.flow.jca.JCAFlow$3.onMessage(JCAFlow.java:317)
at
org.jencks.LocalTransactionEndpoint.onMessage(LocalTransactionEndpoint.java:68)
at
org.apache.activemq.ra.MessageEndpointProxy$MessageEndpointAlive.onMessage(MessageEndpointProxy.java:123)
at
org.apache.activemq.ra.MessageEndpointProxy.onMessage(MessageEndpointProxy.java:64)
at org.apache.activemq.ActiveMQSession.run(ActiveMQSession.java:766)
at
org.apache.activemq.ra.ServerSessionImpl.run(ServerSessionImpl.java:169)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
15:58:29,540 | ERROR | ActiveMQ Session Task | JMSFlow |
nmr.flow.jms.AbstractJMSFlow$3 265 | Error processing incoming broadcast
message
java.lang.NullPointerException
at
org.apache.servicemix.jbi.nmr.flow.jms.AbstractJMSFlow$3.onMessage(AbstractJMSFlow.java:254)
at
org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:1073)
at
org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:127)
at
org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:197)
at
org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122)
at
org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
15:58:29,556 | ERROR | ActiveMQ Session Task | JMSFlow |
nmr.flow.jms.AbstractJMSFlow$3 265 | Error processing incoming broadcast
message
java.lang.NullPointerException
at
org.apache.servicemix.jbi.nmr.flow.jms.AbstractJMSFlow$3.onMessage(AbstractJMSFlow.java:254)
at
org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:1073)
at
org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:127)
at
org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:197)
at
org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122)
at
org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
15:58:29,556 | ERROR | pool-flow.jca.org.apache.servicemix.JCAFlow-thread-23
| JCAFlow | mix.jbi.nmr.flow.jca.JCAFlow$3 327 | Error
processing incoming broadcast message
java.lang.NullPointerException
at
org.apache.servicemix.jbi.nmr.flow.jca.JCAFlow$3.onMessage(JCAFlow.java:317)
at
org.jencks.LocalTransactionEndpoint.onMessage(LocalTransactionEndpoint.java:68)
at
org.apache.activemq.ra.MessageEndpointProxy$MessageEndpointAlive.onMessage(MessageEndpointProxy.java:123)
at
org.apache.activemq.ra.MessageEndpointProxy.onMessage(MessageEndpointProxy.java:64)
at org.apache.activemq.ActiveMQSession.run(ActiveMQSession.java:766)
at
org.apache.activemq.ra.ServerSessionImpl.run(ServerSessionImpl.java:169)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)