刚刚在JBOSS上面搞顶JMS MDB,有什么问题以后可以切磋,过几天发个贴上来。总结下经验。
消息驱动bean的HELLOWORLD
client
public class Aa {
private static Context context;
private boolean transacted = false;
private int acknowledgementMode = javax.jms.Session.AUTO_ACKNOWLEDGE;
private QueueConnectionFactory queueConnectionFactory;
private QueueConnection queueConnection;
private QueueSession queueSession;
private QueueSender queueSender;
private QueueReceiver queueReceiver;
private Queue queue;
private String queueConnectionFactoryName = "java:comp/env/jms/QCF";
private String sendQueueName = "queue/test";
private String recvQueueName = "queue/test";
private MapMessage message=null;
private Context getInitialContext() throws NamingException {
Hashtable environment = new Hashtable();
environment.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
environment.put(Context.URL_PKG_PREFIXES,
"org.jboss.naming:org.jnp.interfaces");
environment.put(Context.PROVIDER_URL, "jnp://localhost:1099");
return new InitialContext(environment);
}
private Context getContext() throws Exception {
if (context == null) {
try {
context = getInitialContext();
} catch (Exception ex) {
ex.printStackTrace();
throw ex;
}
}
return context;
}
public Aa()
{
try
{
context=getContext();
queueConnectionFactory=(QueueConnectionFactory)context.lookup("ConnectionFactory");
queueConnection=queueConnectionFactory.createQueueConnection();
queue=(Queue)context.lookup("queue/test");
queueSession=queueConnection.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);
queueConnection.start();
queueSender=queueSession.createSender(queue);
TextMessage mes=queueSession.createTextMessage("abcabcabc");
queueSender.send(mes);
}
catch(Exception e)
{
throw new EJBException(e.getMessage());
}
}
public static void main(String [] args)
{
Aa a=new Aa();
}
}
MDB
public class processOrderBean implements MessageDrivenBean, MessageListener {
MessageDrivenContext messageDrivenContext;
private QueueConnection conn;
private QueueSession session;
public void ejbCreate() {
}
public void ejbRemove() {
}
public void onMessage(Message message) {
System.out.println("hello world");
}
public void setMessageDrivenContext(MessageDrivenContext
messageDrivenContext) {
this.messageDrivenContext = messageDrivenContext;
}
}
JBOSS.XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 3.2//EN" "http://www.jboss.org/j2ee/dtd/jboss_3_2.dtd">
<jboss>
<enterprise-beans>
<message-driven>
<ejb-name>processOrder</ejb-name>
<destination-jndi-name>queue/test</destination-jndi-name>
<resource-ref>
<res-ref-name>jms/QCF</res-ref-name>
<jndi-name>ConnectionFactory</jndi-name>
</resource-ref>
</message-driven>
</enterprise-beans>
</jboss>
EJB-JAR.XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar>
<display-name>danke</display-name>
<enterprise-beans>
<message-driven>
<ejb-name>processOrder</ejb-name>
<ejb-class>untitled9.processOrderBean</ejb-class>
<transaction-type>Container</transaction-type>
<message-driven-destination>
<destination-type>javax.jms.Queue</destination-type>
</message-driven-destination>
<resource-ref>
<res-ref-name>jms/QCF</res-ref-name>
<res-type>javax.jms.QueueConnectionFactory</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</message-driven>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>processOrder</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>