]
Miroslav Novak updated WFWIP-14:
--------------------------------
Steps to Reproduce:
{code}
git clone
cd eap-tests-hornetq/scripts/
groovy
-DEAP_ZIP_URL=https://eap-qe-jenkins.rhev-ci-vms.eng.rdu2.redhat.com/view/EAP7/view/EAP7-JMS/view/early-testing/view/tooling/job/early-testing-messaging-prepare/124/artifact/jboss-eap.zip
PrepareServers7.groovy
export WORKSPACE=$PWD
export JBOSS_HOME_1=$WORKSPACE/server1/jboss-eap
export JBOSS_HOME_2=$WORKSPACE/server2/jboss-eap
export JBOSS_HOME_3=$WORKSPACE/server3/jboss-eap
export JBOSS_HOME_4=$WORKSPACE/server4/jboss-eap
cd ../jboss-hornetq-testsuite/
mvn clean test -Dtest=ActivationConfigPropertiesTestCase#useJndiTest -DfailIfNoTests=false
-Deap=7x -Deap7.org.jboss.qa.hornetq.apps.clients.version=7.1517218654-SNAPSHOT | tee log
{code}
was:
{code}
git clone
cd eap-tests-hornetq/scripts/
groovy
-DEAP_ZIP_URL=https://eap-qe-jenkins.rhev-ci-vms.eng.rdu2.redhat.com/view/EAP7/view/EAP7-JMS/view/early-testing/view/tooling/job/early-testing-messaging-prepare/124/artifact/jboss-eap.zip
PrepareServers7.groovy
export WORKSPACE=$PWD
export JBOSS_HOME_1=$WORKSPACE/server1/jboss-eap
export JBOSS_HOME_2=$WORKSPACE/server2/jboss-eap
export JBOSS_HOME_3=$WORKSPACE/server3/jboss-eap
export JBOSS_HOME_4=$WORKSPACE/server4/jboss-eap
cd ../jboss-hornetq-testsuite/
mvn clean test
-Dtest=BytemanLodh2TestCase#testSimpleLodh2KillWithFiltersOnTransactionPrepare
-DfailIfNoTests=false -Deap=7x
-Deap7.org.jboss.qa.hornetq.apps.clients.version=7.1517218654-SNAPSHOT | tee log
{code}
[Artemis upgrade] MDB cannot connect to remote server via RA if
destination is not deployed locally
---------------------------------------------------------------------------------------------------
Key: WFWIP-14
URL:
https://issues.jboss.org/browse/WFWIP-14
Project: WildFly WIP
Issue Type: Bug
Components: JMS
Reporter: Erich Duda
Assignee: Martyn Taylor
Priority: Blocker
Labels: activemq, feature-branch-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:
{code}
@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'")})
{code}
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.
{code}
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);
}
}
{code}
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.