Connecting from mdb to remote queue
judy333 Jan 30, 2002 5:05 AMI've read all posts in the forum, but i cant get it to run.
My situation:
Host1 ----------------- Host2
Jboss-2.4.3-----------Jboss-2.4.3 - simple MDB
|
|
TestClient
The TestClient send a message to a queue (testQueue) of JBoss on host1:
public static void main(String args[]) {
Context jndiContext = null;
QueueConnectionFactory queueConnectionFactory = null;
QueueConnection queueConnection = null;
QueueSession queueSession = null;
Queue queue = null;
QueueSender queueSender = null;
TextMessage message = null;
try {
java.util.Properties props = new java.util.Properties();
props.setProperty("java.naming.factory.initial",
"org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url",
"jnp://localhost:1099");
props.setProperty("java.naming.factory.url.pkgs",
"org.jboss.naming.org.jnp.interfaces");
jndiContext = new InitialContext(props);
} catch (NamingException e) {
System.out.println("Could not create JNDI " +
"context: " + e.toString());
System.exit(1);
}
try {
queueConnectionFactory = (QueueConnectionFactory)
jndiContext.lookup
("QueueConnectionFactory");
queue = (Queue) jndiContext.lookup("queue/testQueue");
} catch (NamingException e) {
System.out.println("JNDI lookup failed: " +
e.toString() + "\n " + e.getMessage());
System.exit(1);
}
try {
queueConnection = queueConnectionFactory.createQueueConnection();
queueSession =
queueConnection.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
queueSender = queueSession.createSender(queue);
message = queueSession.createTextMessage();
message.setText("message - send for testing");
queueSender.send(message);
} catch (JMSException e) {
System.out.println("Exception occurred: " + e.toString());
} finally {
if (queueConnection != null) {
try {
queueConnection.close();
} catch (JMSException e) {}
}
}
}
On Host2 the MDB should get the messages from the testQueue on Host1:
MDB:
public class Mail_2 implements MessageDrivenBean, javax.jms.MessageListener {
private transient MessageDrivenContext mdc = null;
private Context context;
private int counter = 0;
public Mail_2() {
System.out.println("In Constructor of Mail");
}
public void setMessageDrivenContext(MessageDrivenContext mdc) {
System.out.println("In Mail.setMessageDrivenContext()");
this.mdc = mdc;
}
public void ejbCreate() {
System.out.println("In Mail.ejbCreate()");
}
public void onMessage(Message inMessage) {
TextMessage msg = null;
try {
if (inMessage instanceof TextMessage) {
msg = (TextMessage) inMessage;
System.out.println("MESSAGE BEAN: Message received: "
+ msg.getText());
} else {
System.out.println("Message of wrong type: "
+ inMessage.getClass().getName());
}
} catch (JMSException e) {
e.printStackTrace();
}
}
public void ejbRemove() {
System.out.println("In Mail.remove()");
}
}
And on host2 i have added a RemoteJMSProvider in the jboss.jcml:
<mbean code="org.jboss.jms.jndi.JMSProviderLoader" name=":service=JMSProviderLoader, name=RemoteJMSProvider"
RemoteJMSProvider
192.168.30.86:1099
XAConnectionFactory
XAConnectionFactory
org.jboss.jms.jndi.JBossMQProvider
The jboss.xml of the MDB:
<?xml version="1.0" encoding="Cp1252"?>
<enterprise-beans>
<message-driven>
<ejb-name>Mail_2</ejb-name>
<configuration-name>Standard Message Driven Bean</configuration-name>
<destination-jndi-name>queue/testQueue</destination-jndi-name>
</message-driven>
</enterprise-beans>
<container-configurations>
<container-configuration>
<container-name>My Message Driven Config</container-name>
<call-logging>false</call-logging>
<container-invoker>org.jboss.ejb.plugins.jms.JMSContainerInvoker</container-invoker>
<!-- <container-interceptors>
org.jboss.ejb.plugins.LogInterceptor
org.jboss.ejb.plugins.SecurityInterceptor
--> <!-- CMT -->
<!-- org.jboss.ejb.plugins.TxInterceptorCMT
org.jboss.ejb.plugins.MetricsInterceptor
org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor
--> <!-- BMT -->
<!-- org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor
org.jboss.ejb.plugins.MessageDrivenTxInterceptorBMT
org.jboss.ejb.plugins.MetricsInterceptor
</container-interceptors>-->
<instance-pool>org.jboss.ejb.plugins.MessageDrivenInstancePool</instance-pool>
<instance-cache></instance-cache>
<persistence-manager></persistence-manager>
<transaction-manager>org.jboss.tm.TxManager</transaction-manager>
<container-invoker-conf>
RemoteJMSProvider
StdJMSPool
15
1
True
</container-invoker-conf>
<container-pool-conf>
100
10
</container-pool-conf>
</container-configuration>
</container-configurations>
And the ejb-jar.xml:
<?xml version="1.0"?>
<!DOCTYPE ejb-jar>
<ejb-jar>
<enterprise-beans>
<message-driven>
<ejb-name>Mail_2</ejb-name>
<ejb-class>mail2.Mail_2</ejb-class>
<message-selector></message-selector>
<transaction-type>Container</transaction-type>
<!-- <acknowledge-mode>Auto-acknowledge</acknowledge-mode>-->
<message-driven-destination>
<destination-type>javax.jms.Queue</destination-type>
</message-driven-destination>
</message-driven>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<ejb-name>Mail_2</ejb-name>
<method-name>*</method-name>
<trans-attribute>NotSupported</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
I get no exception, but the mdb on host2 never revieces a message.
I have no idea.
Thanks for help
judy