通讯流程图,其中EJB扮演了Client2的角色
首先是Server端的开发及设置:
1、增加一个用户:
bin\add-user.bat
用户名密码随便,但要属于guest组
2、启动Server
standalone.bat -server-config=standalone-full.xml
3、新建Queue
jboss-cli.bat --connect jms-queue add --queue-address=neoQueue --entries=queue/neoQueue,java:jboss/exported/jms/queue/neoQueue
4、新建java项目
4.1、写一个QueueBean
MessageQueueBean.java
package com.neohope.ejb.test; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.TextMessage; /** * Created by Hansen */ @MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/neoQueue"), @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") }) public class MessageQueueBean implements javax.jms.MessageListener { public MessageQueueBean() { } @Override public void onMessage(Message message) { try { System.out.println("MessageQueueBean.onMessage invoked"); if(message instanceof TextMessage) { TextMessage textMessage = (TextMessage)message; System.out.println("Message: " + textMessage.getText()); } else { System.out.println("Message is not a TextMessage"); } } catch (JMSException e) { e.printStackTrace(); } } }
4.2、打jar包,或者自己压缩为TestEJBServer.jar
5、新建一个ear项目
5.1增加application.xml文件
<?xml version="1.0" encoding="UTF-8"?> <application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" version="6"> <description>EAR Test</description> <display-name>EAR Test</display-name> <module> <ejb>TestEJBServer.jar</ejb> </module> <library-directory>lib</library-directory> </application>
5.2打ear包,或自己压缩为TestEar.ear
5.3TestEar的结构为:
│ TestEJBServer.jar │ ├─lib └─META-INF application.xml
6.通过EAP进行部署
到这里服务端已经完成了。
然后是客户端的设置:
1、通过Queue方式访问
package com.neohope.ejb.test; import javax.jms.*; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import java.util.Hashtable; /** * Created by Hansen */ public class TestQueueBean { public static void main(String[] args) throws NamingException, JMSException { final Hashtable jndiProperties = new Hashtable(); jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); jndiProperties.put(Context.PROVIDER_URL, "remote://localhost:4447"); final InitialContext ctx = new InitialContext(jndiProperties); QueueConnectionFactory factory = (QueueConnectionFactory) ctx.lookup("jms/RemoteConnectionFactory"); QueueConnection connection = factory.createQueueConnection("user001", "user001#"); QueueSession session = connection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE); Queue queue = (Queue) ctx.lookup("jms/queue/neoQueue"); TextMessage msg = session.createTextMessage("Queue Test Messagee"); QueueSender sender = session.createSender(queue); sender.send(msg); session.close(); connection.close(); } }
2、通过MessageProducer方式访问
package com.neohope.ejb.test; import javax.jms.*; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import java.util.Hashtable; /** * Created by Hansen */ public class TestQueueBean { public static void main(String[] args) throws NamingException, JMSException { final Hashtable jndiProperties = new Hashtable(); jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); jndiProperties.put(Context.PROVIDER_URL, "remote://localhost:4447"); final InitialContext ctx = new InitialContext(jndiProperties); ConnectionFactory connectionFactory = (ConnectionFactory) ctx.lookup("jms/RemoteConnectionFactory"); Destination destination = (Destination) ctx.lookup("jms/queue/neoQueue"); Connection connection = connectionFactory.createConnection("user001", "user001#"); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer producer = session.createProducer(destination); connection.start(); TextMessage msg = session.createTextMessage("Queue Test Messagee"); producer.send(msg); session.close(); connection.close(); } }