-
Bug
-
Resolution: Duplicate
-
Blocker
For more information about origin of this issue see JBEAP-13857.
Scenario
- There are two servers called JMS servers which have deployed destinations
- There are two servers called MDB servers which have configured RA to connect to JMS servers and have deployed MDBs
- MDBs resend messages from InQueue to OutQueue
Issue: RA on MDB servers is not able to connect to JMS servers.
Detailed description of the issue
There is an MDB with following activation config:
@MessageDriven(name = "mdb1", activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), @ActivationConfigProperty(propertyName = "destination", propertyValue = "jms/queue/InQueue"), @ActivationConfigProperty(propertyName = "rebalanceConnections", propertyValue = "true"), @ActivationConfigProperty(propertyName = "hA", propertyValue = "true"), @ActivationConfigProperty(propertyName = "messageSelector", propertyValue = "color = 'RED'")})
In ActiveMQActivation::setupDestination method there is a code which tries to do a JNDI lookup. If it fails the destination is created using the ActiveMQJMSClient::createQueue where the destination name is created from the JNDI name.
try { destination = (ActiveMQDestination) ActiveMQRaUtils.lookup(ctx, destinationName, destinationType); } catch (Exception e) { if (destinationName == null) { throw ActiveMQRABundle.BUNDLE.noDestinationName(); } String calculatedDestinationName = destinationName.substring(destinationName.lastIndexOf('/') + 1); logger.debug("Unable to retrieve " + destinationName + " from JNDI. Creating a new " + destinationType.getName() + " named " + calculatedDestinationName + " to be used by the MDB."); // If there is no binding on naming, we will just create a new instance if (isTopic) { destination = (ActiveMQDestination) ActiveMQJMSClient.createTopic(calculatedDestinationName); } else { destination = (ActiveMQDestination) ActiveMQJMSClient.createQueue(calculatedDestinationName); } }
When the destination is not deployed locally (on the same server as MDB is deployed), the lookup fails and the destination is created using ActiveMQJMSClient::createQueue method, where calculatedDestinationName is InQueue.
Later in the code, when RA tries to connect to the remote EAP server, it uses this destination when it creates a consumer. Since on the remote server there is no destination with core address InQueue, the request to create the consumer fails and it is being periodically retried.
- blocks
-
JBEAP-13857 [Artemis upgrade] Changes in address naming conventions
-
- Closed
-
- duplicates
-
WFWIP-26 [Artemis 2.x Upgrade] MDB doesn't find its source queue when useJndi property is set to false
-
- Resolved
-