java j2ee8 jms - kent state universitypersonal.kent.edu/.../java_j2ee/java_j2ee8_jms.pdf ·...
TRANSCRIPT
l系统学习J2EE技术l成为一名熟练的J2EE应用设计师和开发者l获得SCJA证书
制作: Linda
欢迎参加Java SL425培训
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
作者自我介绍姓名:Linda主要著作:《Tomcat与JavaWeb开发技术详解》
《Java 2认证考试指南与试题解析》
下载SL275、SL285、SL314、SL425培训讲义:www.personal.kent.edu/~hli4
下载培训讲义的Java源程序:www.personal.kent.edu/~hli4/javasource.htm
与我联系: [email protected]
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
推荐Java书籍1.《Tomcat与JavaWeb开发技术详解》作者:孙卫琴编著
出版社:电子工业出版社
购买网址:http://www.phei.com.cn下载本书样稿:
http://www.personal.kent.edu/~hli4/
2.《Java 2认证考试指南与试题解析》作者:孙卫琴编著
出版社:上海科学技术出版社
购买网址:http://www.book.sh.cn/下载本书样稿:
http://www.personal.kent.edu/~hli4/
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
Java消息服务
l 消息的作用
l 发送消息的类型
l 消息服务器
l 消息的类型
l 发送队列消息
l 接受队列消息
l 消息驱动Bean
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
消息的作用
l 消息用来实现两个组件之间通信,它可以跨平台和跨语言。
l 消息可以实现组件之间的松散耦合
l 通过方法调用交互的组件耦合很紧,对时间很敏感。
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
利用方法调用通信
客户机 服务器
方法1调用
方法2调用
方法3调用
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
利用消息通信
客户机 服务器
消息 消息 消息
响应 响应
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
发送消息类型
l 点对点:生产者生成的消息只有一个消费者
l 发布/预定:生产者生成的消息可以被多个预定的消费者消费
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
消息服务器
l 消息服务器提供消息服务
l 点对点消息用队列发送
l 发布/预定消息用主题发送
消息生产者
消息消费者
队列
主题
JMS
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
点对点消息发送机制
l 生产者将消息发送到队列中,消费者从队列中获取消息
l 消息在队列中先进先出
l 消息一直保存在队列中,除非有消费者接受了消息
l 消息一旦被某个消费者接受,就从队列中移除,所以一条消息只能被一个消费者消费。
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
发布/预定消息发送机制l 生产者将消息发送到主题中,生产者从主题中获取消息
l 消息在主题中先进先出
l 消息具有实时性,如果生产者发送消息时,没有消费者,消息不会被保存。类似于实时广播。
l 消息可以被多个消费者同时接受。
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
消息的类型
l BytesMessagel MapMessagel ObjectMessagel StreamMessagel TextMessage
www.personal.kent.edu/~hli4
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
发送队列消息
JMS API在javax.jms包中l 1.通过JNDI找到QueueConnectionFactoryl 2. 由QueueConnectionFactory建立连接
QueueConnectionl 3. 由QueueConnection生成会话QueueSessionl 4.由QueueSession生成Queue或通过JNDI找到已经存在的Queue
l 5. 由QueueSession生成Messagel 6. 由QueueSession生成QueueSenderl 7.用QueueSender将Message发送到Queue
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
接受队列消息
l 1.通过JNDI找到QueueConnectionFactoryl 2. 由QueueConnectionFactory建立连接
QueueConnectionl 3. 由QueueConnection生成会话QueueSessionl 4. 通过JNDI找到已经存在的Queuel 5. 由QueueSession生成QueueReceiverl 6.用QueueReceiver的receive方法接受Message,或者QueueReceiver注册一个消息监听者MessageListener,由消息监听者在onMessage方法中接受消息
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
发送和接受队列消息的例子
l 在C:\bea\wlserver6.1\samples\examples\jms\queue目录中有发送和接受消息的例子:QueueSend和QUeueReceive
l 它们采用的QueueConnectionFactory和Queue的JNDI如下:
QueueConnectionFactory=weblogic.examples.jms.QueueConnectionFactoryQueue=weblogic.examples.jms.exampleQueue
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
运行发送和接受队列消息的例子
1. 在dos命令行,运行C:\bea\wlserver6.1\config\examples\setExamplesEnv.cmd,设置环境参数
2. 然后转到C:\bea\wlserver6.1\samples\examples\jms\queue目录,输入如下命令:ant compile
这个命令将根据build.xml中的描述信息,编译上述三个java文件,生成结果放在 C:\bea\wlserver6.1\config\examples\clientclasses目录下
3.启动weblogic
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
运行发送和接受队列消息的例子
4.启动控制台http://localhost:7001/console5.配置一个新的JMSServer(采用缺省配置), 将Target指定为MyServer6.配置一个新的JMS Connection Factory, JNDI名字为
weblogic.examples.jms.QueueConnectionFactory,将Target指定为MyServer
7.在创建的JMSServer中配置一个新的Destination, 即配置一个新的Queue, JNDI名字为weblogic.examples.jms.exampleQueue
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
运行发送和接受队列消息的例子
8.在Dos下运行QueueSendjava examples.jms.queue.QueueSend "t3://localhost:7001 "
9.启动两个Dos,在设置好环境后都运行QueueReceivejava examples.jms.queue.QueueReceive "t3://localhost:7001"
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
运行发送和接受队列消息的例子
在weblogic的Console中,可以监控队列的状态,选中队列的Monitoring链接
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
发送主题消息
l 1.通过JNDI找到TopicConnectionFactoryl 2. 由TopicConnectionFactory建立连接
TopicConnectionl 3. 由TopicConnection生成会话TopicSessionl 4.由TopicSession生成会话TopicPublisherl 4.由TopicSession生成Topic或通过JNDI找到已经存在的Topic
l 5.由TopicSession创建一些Messagel 6.用TopicPublisher将Message发送到Topic
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
接受主题消息
l 1.通过JNDI找到TopicConnectionFactoryl 2. 由TopicConnectionFactory建立连接
TopicConnectionl 3. 由TopicConnection生成会话TopicSessionl 4.由TopicSession生成会话TopicSubscriberl 4.通过JNDI找到已经存在的Topicl 5.用TopicSubscriber通过subscribe方法接受消息,或者TopicSubscriber注册一个消息监听者,由消息监听者在onMessage方法中接受消息
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
发送和接受主题消息的例子
l 在C:\bea\wlserver6.1\samples\examples\jms\topic目录中有发送和接受消息的例子:TopicSend和TopicReceive
l 它们采用的TopicConnectionFactory和Topic的JNDI如下:
TopicConnectionFactory=weblogic.examples.jms.TopicConnectionFactoryTopic=weblogic.examples.jms.exampleTopic
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
运行发送和接受主题消息的例子
1. 在dos命令行,运行C:\bea\wlserver6.1\config\examples\setExamplesEnv.cmd,设置环境参数
2. 然后转到C:\bea\wlserver6.1\samples\examples\jms\topic目录,输入如下命令:ant compile
这个命令将根据build.xml中的描述信息,编译上述三个java文件,生成结果放在 C:\bea\wlserver6.1\config\examples\clientclasses目录下
3.启动weblogic
www.personal.kent.edu/~hli4
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
运行发送和接受主题消息的例子
4.启动控制台http://localhost:7001/console5.配置一个新的JMSServer(采用缺省配置), 将Target指定为MyServer6.配置一个新的JMS Connection Factory, JNDI名字为
weblogic.examples.jms.TopicConnectionFactory,将Target指定为MyServer
7.在创建的JMSServer中配置一个新的Destination, 即配置一个新的Topic, JNDI名字为weblogic.examples.jms.exampleTopic
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
运行发送和接受主题消息的例子
8.在Dos下运行TopicSendjava examples.jms.topic.TopicSend "t3://localhost:7001"
9.启动两个Dos,在设置好环境后都运行TopicReceivejava examples.jms.topic.TopicReceive "t3://localhost:7001"
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
消息驱动Bean
1.消息驱动Bean没有公开接口,不能被客户访问2.消息驱动Bean实现了MessageDrivenBean接口3.只能通过消息和消息驱动Bean通信。
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
消息驱动Bean的例子
l MessageTraderBean实现了MessageDrivenBean接口
public class MessageTraderBean implements MessageDrivenBean,MessageListener
l 它实现了setMessageDrivenContext方法
public void setMessageDrivenContext(MessageDrivenContext ctx) {
log("setMessageDrivenContext called");
m_context = ctx;
}
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
消息驱动Bean的例子
l MessageTraderBean实现了onMessage方法
public void onMessage(Message msg) {
TextMessage tm = (TextMessage) msg;
try {
String text = tm.getText();
log("Received new quote : " + text);
}
catch(JMSException ex) {
ex.printStackTrace();
}
}
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
消息驱动Bean的发布描述符号
在ejb-jar.xml中指定消息驱动Bean的消息类型
<message-driven>
<ejb-name>exampleMessageDriven1</ejb-name>
<ejb-class>examples.ejb20.message.MessageTraderBean</ejb-class>
<transaction-type>Container</transaction-type>
<message-driven-destination>
<destination-type>javax.jms.Topic</destination-type>
</message-driven-destination>
</message-driven>
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
消息驱动Bean的发布描述符号
l 在weblogic-ejb-jar.xml中指定消息驱动Bean的消息队列或消息主题的JNDI, 指定消息驱动Bean的JNDI
<weblogic-enterprise-bean>
<ejb-name>exampleMessageDriven1</ejb-name>
<message-driven-descriptor>
<pool>
<max-beans-in-free-pool>200</max-beans-in-free-pool>
<initial-beans-in-free-pool>20</initial-beans-in-free-pool>
</pool>
<destination-jndi-name>quotes</destination-jndi-name>
</message-driven-descriptor>
<jndi-name>examplesMessageDriven1</jndi-name>
</weblogic-enterprise-bean>
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
编译、发布并运行消息驱动Bean
l 在weblogic-ejb-jar.xml中指定消息驱动Bean的消息队列或消息主题的JNDI, 指定消息驱动Bean的JNDI
<weblogic-enterprise-bean>
<ejb-name>exampleMessageDriven1</ejb-name>
<message-driven-descriptor>
<pool>
<max-beans-in-free-pool>200</max-beans-in-free-pool>
<initial-beans-in-free-pool>20</initial-beans-in-free-pool>
</pool>
<destination-jndi-name>quotes</destination-jndi-name>
</message-driven-descriptor>
<jndi-name>examplesMessageDriven1</jndi-name>
</weblogic-enterprise-bean>
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
编译、发布消息驱动Bean并运行Client
1. 在dos命令行,运行C:\bea\wlserver6.1\config\examples\setExamplesEnv.cmd,设置环境参数
2. 然后转到C:\bea\wlserver6.1\samples\examples\ejb20\message目录,输入如下命令:
ant all这个命令将根据build.xml中的描述信息,编译上述java文件,生成结果放在build目录下
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
编译、发布消息驱动Bean并运行Client
3. 然后转到C:\bea\wlserver6.1\samples\examples\ejb20\message \build目录,输入如下命令:
jar cvf ejb20_MessageBean.jar *这个命令将把build目录下的文件打包为ejb20_MessageBean.jar
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
编译、发布消息驱动Bean并运行Client
4.将C:\bea\wlserver6.1\samples\examples\ejb20\message \build目录下的ejb20_MessageBean.jar
拷贝到C:\bea\wlserver6.1\config\mydomain\applications目录下5.启动weblogic, 运行C:\bea\wlserver6.1\config\mydomain目录下的startWeblogic.cmd6.启动http://localhost:7001/console7. configure a new ejbname: MessageEjbpath:C:\bea\wlserver6.1\config\mydomain\applications\ejb20_MessageBean.jar 8.指定Target, TargetServer为myserver9. 在前面创建的JMSServer中配置一个新的Destination, 即配置一个新的Topic, JNDI名字为quotes
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
编译、发布消息驱动Bean并运行Client
10. 在dos命令行,运行C:\bea\wlserver6.1\config\examples\setExamplesEnv.cmd设置好环境变量, 然后运行java examples.ejb20.message.Client t3://localhost:7001
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn
编译、发布消息驱动Bean并运行Client
l Client发送了一系列主题消息,MessageDrivenBean接受到消息后,将结果打印到在Weblogic的Dos命令控制台。
PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn