通过会话Bean发送JMS消息给MDB的实例
2009-09-25 15:50
369 查看
MDB是通过JMS消息驱动的,当消息队列中有消息时,将会引发MDB的onMessage方法调用,而这些JMS消息可能来自于各种消息生产者,比如POJO、其他消息中间件、EJB等,本实例使用无状态会话Bean发送JMS消息。
本实例的平台为:netbeans6.7.1 + jdk1.6 + Glassfish2.1 + JSF1.2
实现流程是:通过将jsp页面表单中输入的文本消息,发送给JSF后台受管BEAN,受管BEAN再以文本消息作为参数调用会话Bean,会话Bean将文本消息打包成TextMessage发送到消息队列(消息目的地)当中。消息队列再驱动MDB对消息进行处理,并打印处理。
jsp页面:
受管BEAN:
无状态会话Bean:
@Resource(name = "jms/MyQueue")
private Queue myQueue;
是注入的JMS目标资源
@Resource(name = "jms/MyQueueFactory")
private ConnectionFactory myQueueFactory;
是注入的JMS连接工厂
这两个资源应该保证已经在Glassfish中已经存在,没有的话,请登陆控制台,进行添加。当然在NETBEANS中可以右键源代码行,选择【插入代码】,然后选择【发送JMS消息】,在出现的对话框窗口中进行添加。
无状态会话Bean接口:
消息驱动Bean:
mappedName = "jms/MyQueue"
指定JMS目标资源(消息队列)
本实例的平台为:netbeans6.7.1 + jdk1.6 + Glassfish2.1 + JSF1.2
实现流程是:通过将jsp页面表单中输入的文本消息,发送给JSF后台受管BEAN,受管BEAN再以文本消息作为参数调用会话Bean,会话Bean将文本消息打包成TextMessage发送到消息队列(消息目的地)当中。消息队列再驱动MDB对消息进行处理,并打印处理。
jsp页面:
<h1><h:outputText value="开始发送消息给MDB"/></h1> <h:form> <h:outputLabel for="message" value="输入消息"/> <h:inputText id="message" value="#{NewJSFManagedBean.message}"/> <h:commandButton type="submit" value="发送" action="#{NewJSFManagedBean.sendMes}"/> </h:form>
受管BEAN:
package Sing.temp; import javax.ejb.EJB; public class NewJSFManagedBean { @EJB private NewSession nsb; private String message; public NewJSFManagedBean() { } public void sendMes(){ System.out.print("run into ManagedBean!"); nsb.sendMes(this.message); } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
无状态会话Bean:
package Sing.temp; import java.util.logging.Level; import java.util.logging.Logger; import javax.annotation.Resource; import javax.ejb.Remote; import javax.ejb.Stateless; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage; @Stateless @Remote(NewSession.class) public class NewSessionBean implements NewSession { @Resource(name = "jms/MyQueue") private Queue myQueue; @Resource(name = "jms/MyQueueFactory") private ConnectionFactory myQueueFactory; public void sendMes(String mes) { System.out.print("run into NewSessionBean!"); System.out.print(mes + ":session is used to sent!"); try { sendJMSMessageToMyQueue(mes); } catch (JMSException ex) { Logger.getLogger(NewSessionBean.class.getName()).log(Level.SEVERE, null, ex); } } private Message createJMSMessageForjmsMyQueue(Session session, Object messageData) throws JMSException { // TODO create and populate message to send TextMessage tm = session.createTextMessage(); tm.setText(messageData.toString()); return tm; } private void sendJMSMessageToMyQueue(Object messageData) throws JMSException { Connection connection = null; Session session = null; try { connection = myQueueFactory.createConnection(); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer messageProducer = session.createProducer(myQueue); messageProducer.send(createJMSMessageForjmsMyQueue(session, messageData)); } finally { if (session != null) { try { session.close(); } catch (JMSException e) { Logger.getLogger(this.getClass().getName()).log(Level.WARNING, "Cannot close session", e); } } if (connection != null) { connection.close(); } } } }
@Resource(name = "jms/MyQueue")
private Queue myQueue;
是注入的JMS目标资源
@Resource(name = "jms/MyQueueFactory")
private ConnectionFactory myQueueFactory;
是注入的JMS连接工厂
这两个资源应该保证已经在Glassfish中已经存在,没有的话,请登陆控制台,进行添加。当然在NETBEANS中可以右键源代码行,选择【插入代码】,然后选择【发送JMS消息】,在出现的对话框窗口中进行添加。
无状态会话Bean接口:
package Sing.temp; public interface NewSession { void sendMes(String mes); }
消息驱动Bean:
package Sing.temp; import java.util.logging.Level; import java.util.logging.Logger; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; @MessageDriven(mappedName = "jms/MyQueue", activationConfig = { @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") }) public class NewMessageBean implements MessageListener { public NewMessageBean() { } public void onMessage(Message message) { TextMessage tm=(TextMessage)message; try { String mesStr = (String) tm.getText(); System.out.print("从队列中获取到消息:"); System.out.print(mesStr); } catch (JMSException ex) { Logger.getLogger(NewMessageBean.class.getName()).log(Level.SEVERE, null, ex); } } }
mappedName = "jms/MyQueue"
指定JMS目标资源(消息队列)
相关文章推荐
- activemq的连接池,通过spring的JmsTemplate发送消息到指定的Destination
- java通过ActiveMQ实现JMS的消息队列实例
- 通过Oracle数据库向ActiveMQ发送JMS消息
- ActiveMQ实例2--Spring JMS发送消息
- JMS消息发送和接收实例 - 点对点模式
- JMS消息发送和接收实例 - 点对点模式
- activemq的连接池,通过spring的JmsTemplate发送消息到指定的Destination
- |对话框与对话框中发送消息实例|
- 在两个不同的程序实例中发送消息,相互通信
- 淘淘商城系列——Spring与ActiveMQ的整合及用JmsTemplate发送消息
- [sip]SIP多方会话消息之实例讲解
- Android笔记之高德地图定位(通过开启服务发送广播用handle消息机制更新位置信息)
- JBoss+Ant实现EJB无状态会话bean实例
- zabbix通过skype发送报警消息之终结
- 微信通过openID发送消息/后台post、get提交并接收数据 C# .NET 配置404,500等错误信息 连接字符串
- 发送Windows消息实例
- 有状态会话Bean实例
- JMS的两种模式 P2P,PUB/SUB 消息发送
- Android中通过BroadcastReceiver发送消息,在Service中播放音乐。
- zabbix通过微信企业号发送图文消息 推荐