MDB有两种实现(点对点:p2p ; 发布-订阅:pub/sub)
第一种p2p:
服务端:
package fh.mdb;
import java.nio.ByteOrder;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.BytesMessage;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.jms.StreamMessage;
import javax.jms.TextMessage;
import com.sun.xml.internal.messaging.saaj.util.ByteInputStream;
import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream;
import fh.bean.User;
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/myDestination") })
public class MdbQueue00 implements MessageListener {
@Override
public void onMessage(Message msg) {
try {
if (msg instanceof TextMessage) {
TextMessage tmsg = (TextMessage) msg;
String content = tmsg.getText();
System.out.println(content);
} else if (msg instanceof ObjectMessage) {
ObjectMessage omsg=(ObjectMessage) msg;
User user=(User) omsg.getObject();
System.out.println("ObjectMessage:"+user.getName()+":"+user.getPass());
} else if (msg instanceof MapMessage) {
MapMessage mmsg=(MapMessage) msg;
System.out.println("MapMessage:"+mmsg.getString("fh"));
} else if (msg instanceof BytesMessage) {
BytesMessage bmsg=(BytesMessage) msg;
ByteOutputStream out=new ByteOutputStream();
byte[] buffer=new byte[1024];
int length=0;
while((length=bmsg.readBytes(buffer))!=-1){
out.write(buffer);
}
System.out.println("BytesMessage:"+out.toString());
} else if (msg instanceof StreamMessage) {
StreamMessage smsg=(StreamMessage) msg;
System.out.println("StreamMessage:"+smsg.readString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
客户端:
package fh.mdb;
import java.util.Properties;
import javassist.bytecode.annotation.ByteMemberValue;
import javax.jms.BytesMessage;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSession;
import javax.jms.StreamMessage;
import javax.jms.TextMessage;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.print.DocFlavor.BYTE_ARRAY;
import fh.bean.User;
public class MdbQueue00 {
public static void main(String[] args) {
QueueConnection conn = null;
QueueSession session = null;
// Properties props=new Properties();
// props.setProperty("java.naming.factory.initial",
// "org.jnp.interfaces.NamingContextFactory");
// props.setProperty("java.naming.provider.url", "localhost:1099");
try {
InitialContext ctx = new InitialContext();
QueueConnectionFactory factory=(QueueConnectionFactory) ctx.lookup("ConnectionFactory");
conn=factory.createQueueConnection();
//
session=conn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
Destination destination=(Queue) ctx.lookup("queue/myDestination");
MessageProducer producer=session.createProducer(destination);
//发送文本
TextMessage tmsg=session.createTextMessage("text消息!!");
producer.send(tmsg);
//发送Object
producer.send(session.createObjectMessage(new User("fh","498219")));
//发送MapMessage
MapMessage mapMsg=session.createMapMessage();
mapMsg.setObject("fh", "498219");
producer.send(mapMsg);
//发送BytesMessage
BytesMessage byteMsg=session.createBytesMessage();
byteMsg.writeBytes("第一个byte!!!".getBytes());
producer.send(byteMsg);
//发送StreamMessage
StreamMessage streamMsg=session.createStreamMessage();
streamMsg.writeString("我就爱流读写!!");
producer.send(streamMsg);
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
还需要两个文件:
classpath下加一个jbdi.properties文件:
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost:1099
jboss的deploy中加mymdb-service.xml:
<?xml version="1.0" encoding="UTF-8"?>
<server>
<mbean code="org.jboss.mq.server.jms.Queue" name="jboss.mq.destination:service=Queue,name=myDestination">
<attribute name="JNDIName">queue/myDestination</attribute>
<depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
</mbean>
</server>