Jeff Mesnil created ARTEMIS-1431:
------------------------------------
Summary: AMQ154003: AMQ154003: Unable to reconnect
org.apache.activemq.artemis.ra.inflow.ActiveMQActivationSpec
Key: ARTEMIS-1431
URL: https://issues.apache.org/jira/browse/ARTEMIS-1431
Project: ActiveMQ Artemis
Issue Type: Bug
Components: Broker
Affects Versions: 1.5.5
Reporter: Jeff Mesnil
Use case:
Artemis 1.5.x Resource adapter that connects to a remote HornetQ broker.
The RA is configured to use the protocol-manager-factory for HornetQ
(protocol-manager-factory="org.apache.activemq.artemis.core.protocol.hornetq.client.HornetQClientProtocolManagerFactory")
and use Artemis remote connector to connect to HornetQ.
When the RA is activated and its JMS resources are setup, it creates 15
ClientSessions.
The first one is created without any issue and manage to connect to HornetQ
broker.
However in
org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryImpl#getConnection,
it will subscribes to cluster topology from the remote HornetQ broker.
The HornetQ boker will send back its topology with the remote connector
information (that uses the
org.hornetq.core.remoting.impl.netty.NettyConnectorFactory).
The ServerLocator will be updated to use this topology info instead of the
initialConnectors and
subsequent creations of Connection will fail because of the ClassCastException
at
org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryImpl#instantiateConnectorFactory:
{code}
2017-09-18 09:05:14,006 ERROR [org.apache.activemq.artemis.ra] (default-threads
- 1) AMQ154003: Unable to reconnect
org.apache.activemq.artemis.ra.inflow.ActiveMQActivationSpec(ra=org.apache.activemq.artemis.ra.ActiveMQResourceAdapter@3ca2957
destination=inQueue destinationType=javax.jms.Queue ack=Auto-acknowledge
durable=false clientID=null user=null maxSession=15):
java.lang.ClassCastException:
org.hornetq.core.remoting.impl.netty.NettyConnectorFactory cannot be cast to
org.apache.activemq.artemis.spi.core.remoting.ConnectorFactory
at
org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryImpl$2.run(ClientSessionFactoryImpl.java:952)
at
org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryImpl$2.run(ClientSessionFactoryImpl.java:950)
at java.security.AccessController.doPrivileged(Native Method)
at
org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryImpl.instantiateConnectorFactory(ClientSessionFactoryImpl.java:950)
at
org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryImpl.<init>(ClientSessionFactoryImpl.java:179)
at
org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:757)
at
org.apache.activemq.artemis.ra.inflow.ActiveMQActivation.setup(ActiveMQActivation.java:316)
at
org.apache.activemq.artemis.ra.inflow.ActiveMQActivation.reconnect(ActiveMQActivation.java:681)
at
org.apache.activemq.artemis.ra.inflow.ActiveMQActivation$SetupActivation.run(ActiveMQActivation.java:725)
at org.jboss.jca.core.workmanager.WorkWrapper.run(WorkWrapper.java:223)
at
org.jboss.threads.SimpleDirectExecutor.execute(SimpleDirectExecutor.java:33)
at org.jboss.threads.QueueExecutor.runTask(QueueExecutor.java:808)
at org.jboss.threads.QueueExecutor.access$100(QueueExecutor.java:45)
at org.jboss.threads.QueueExecutor$Worker.run(QueueExecutor.java:828)
at java.lang.Thread.run(Thread.java:748)
at org.jboss.threads.JBossThread.run(JBossThread.java:320)
{code}
I propose that we enhance the ClientProtocolManagerFactory to handle this case.
When it receives topology (and TransportConfiguration), it should be possible
to "adapt" the transport configuration.
This would be a no-op for Artemis ClientProtocolManagerFactory but it would
allow the HornetQClientProtocolManagerFactory to adapt its transport
configuration to replace the use of the HornetQ NettyConnectorFactory by the
use of the Netty one.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)