java j2ee8 jms - kent state universitypersonal.kent.edu/.../java_j2ee/java_j2ee8_jms.pdf ·...

36
l 系统学习J2EE技术 l 成为一名熟练的J2EE应用设计师和开发者 l 获得SCJA证书 制作: Linda 欢迎参加Java SL425培训 PDF 文件使用 "pdfFactory" 试用版本创建 www.fineprint.com.cn

Upload: others

Post on 21-May-2020

12 views

Category:

Documents


0 download

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