这个例子是为了熟悉jms的开发流程。
效果是一个servlet向一个message driven bean(mdb)发送消息。服务器是glassfish3.1。
首先建一些jms的资源,包括connectionfactory和一个queue,这个例子是一个PTP的jms链接。
建连接工厂
启动glassfish-》资源-》jms资源-》链接工厂-》新建
池名称(即jndi名称)起名为:jms/QueueConnectionFactory
资源类型选:javax.jms.QueueConnectionFactory,因为我们需要一个队列链接
保存
再建一个目的资源
jms资源-》目的地资源-》新建
jndi名称:jms/SimpleQueue
物理目的地址:SimpleQueue(不懂派什么用,随便取个名字)
资源类型:javax.jms.Queue
资源建好了,开始建立消息通信的两端,producer和consumer。
建一个servlet做producer
eclipse新建一个动态页面项目,新建一个servlet名为Producer,内容如下:
原本这里的两个资源可以通过@Resource来注入的,不过遇到个问题就是@Resource在jdk和glassfish中有两个不同的版本,一个(jee6)有成员lookup一个(j2se)没有,所以要用注入会编译出错,所以只能用老派办法,直接从jndi上下文找资源来初始化成员变量。
servlet功能很简单,向SimpleQueue发送一个字符串。
把项目export为war,然后用glassfish发布。
再建一个mdb做consumer:
eclipse新建EJB项目
新建一个类(eclipse的新建mdb有点不对)
|
|
jms/SimpleQueue
|
|
|
jms/SimpleQueue
|
|
jms/QueueConnectionFactory
|
|
|
jms/SimpleQueue
|
代码如下:
主要就是实现了MessageListener的方法,并且这个类有MessageDriven的annotation,然后映射到SimpleQueue上。这样就能在这个jms消息队列有消息时,在onMessage方法中收到消息。
打包项目为一个ejb-jar,然后用glassfish发布。
运行之前的servlet,只要在浏览器地址栏里天上servlet对应的地址,我这里是http://localhost:8080/jmsServlet/Producer
glassfish的控制台就会输出servlet发送消息的println和mdb收到消息的println了
|
|
jms/SimpleQueue
|
|
|
jms/SimpleQueue
|
本文提供了一个简单的JMS应用示例,通过Servlet作为消息生产者,使用Message Driven Bean作为消费者。在Glassfish服务器上配置JMS资源,包括QueueConnectionFactory和Queue,然后在Servlet中创建并发送消息,MDB监听并处理接收到的消息。
508





