EJB3.0 MDB实现

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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值