WLS JMS

JMS派生自Message接口的消息类型:
· StreamMessage:Java数值流,用标准流操作来顺序的填充和读取。
· MapMessage:名/值对应格式;名称为 string 类型,而值为 Java 的基本类型。
· TextMessage:String格式。
· ObjectMessage:Serializable Java对象,能使用JDK的集合类。
· BytesMessage:字节流,编码主体以匹配现存的消息格式。
· XMLMessage: XML,扩展TextMessage,XMLMessage 类型使消息过滤非常便利。
详细参数见:http://www.oracle86.com/ora_doc/server.111/b28420/jm_create.htm#CACDGEIF

JMS程序消息产生和使用一般途径:
· 通过JNDI查找ConnectionFactory。
· 通过JNDI查找Destination。
· 用ConnectionFactory创建一个Connection。
· 用Connection创建一个或多个Session。
· 用Session和Destination创建MessageProducer和MessageConsumer。
· 启动Connection。

JMS消息发送
/***初始化JNDI Tree,使用LDAP或文件的InitialContext对象时,程序寻找JNDI名称的操作稍复杂,必须在一个Properties或Hashtable对象中设定 INITIAL_CONTEXT_FACTORY和PROVIDER_URL,然后将该Properties对象或Hashtable对象作为参数调用InitialContext的构造函数。而一般简单环境中InitialContext initContext = new InitialContext();就够了***/
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
env.put(Context.PROVIDER_URL, PROVIDER_URL);
return new InitialContext(env);

/***lookup ConnectionFactory***/
qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);

/***lookup Destination***/
queue = (Queue) ctx.lookup(queueName);

/***用ConnectionFactory create Connection,JMS QueueConnection提供了一个通向底层MOM的连接,创建的连接使用默认的Java绑定传输端口连接到队列管理器。***/
qcon = qconFactory.createQueueConnection();

/*** use Connection creste Session,QueueSession对象有一个单线程的上下文,不是线程安全的,因此会话对象本身以及在会话对象基础上创建的对象都不是线程安全的,在多线程环境中必须加以保护。createQueueSession方法有两个参数,第一个参数指定了JMS事务类型,当前的队列会话是事务化的(true,多个消息被视为一个工作单元)还是非事务化的(false),当然,事务化会话是要比非事务化会话慢。第二个参数是一个整数,指定了确认模式,也就是决定了如何向服务器证实消息已经传到***/
qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

/***用Session和Destination创建MessageProducer***/
qsender = qsession.createSender(queue);

/***启动 Connection***/
qcon.start();

/***发送消息***/
msg = qsession.createTextMessage();
msg.setText(message);
qsender.send(msg);

JMS消息接收
/***初始化JNDI Tree***/
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
env.put(Context.PROVIDER_URL, PROVIDER_URL);
return new InitialContext(env);

/***lookup ConnectionFactory***/
qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);

/***lookup Destination***/
queue = (Queue) ctx.lookup(queueName);

/***用ConnectionFactory创建Connection***/
qcon = qconFactory.createQueueConnection();

/***用Connection创建Session***/
qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

/***用Session和Destination创建MessageConsumer***/
qreceiver = qsession.createReceiver(queue);

/***设置监听,异步接收消息,MessageListener中的关键事件是public void onMessage(Message message)。一个Session对象可以同时控制旗下多个Consumer对象和MessageListener对象,但是这个Session是一个单线程模式的传递机制,即必须在当前Message对象被onMessage处理之后,才能继续接收下一条异步传送过来的Message对象***/
qreceiver.setMessageListener(this);

/***启动 Connection***/
qcon.start();

另,MDB可用的事务属性有两个:NotSupported和Required。如果一个MDB组件有NotSupported事务属性,则它的消息处理过程不属于任何事务上下文。 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22788213/viewspace-670051/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22788213/viewspace-670051/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值