选择显示字体大小

一个message-driven bean的示例

译者前言
有关本章中相应源代码的下载,请参看一个session bean的示例。

正文
因为message-driven bean是基于java消息服务(jms)技术的,要理解以下示例,你必须已经熟悉基本的jms概念,例如队列和消息。学习有关这些概念的最好的地方是java消息服务指南:
http://java.sun.com/products/jms/tutorial/index.html
这一章讲述了一个message-driven bean示例的源代码。在开始学习前,你必须首先阅读message-driven bean是什么中的基本概念。

示例应用程序概览
这个应用程序包括下列组件:
1、simplemessageclient:一个发送几个消息到一个队列中的j2ee应用程序客户端。
2、simplemessageejb:一个异步接收和处理发送到队列中的消息的message-driven bean。
图7-1说明了这个应用程序的结构。应用程序客户端发送消息到队列中,这个队列是用j2eeadmin命令创建的。jms供应者(在这里也就是j2ee服务器)将消息递交给一个message-driven bean的实例,这个实例将处理这个消息。
图7-1 simplemessageapp应用程序

j2eetutorial/examples/src/ejb/simplemessage目录下有这个应用程序的源代码。要编译这个代码,到j2eetutorial/examples目录下。输入ant simplemessage。在j2eetutorial/examples/ears目录下有simplemessageapp.ear文件的示例。

j2ee应用程序客户端
simplemessageclient发送消息到队列中,simplemessagebean将对这个队列进行监听。客户端首先将定位连接factory和队列:
queueconnectionfactory = (queueconnectionfactory)
jndicontext.lookup
("java:comp/env/jms/myqueueconnectionfactory");
queue = (queue)
jndicontext.lookup("java:comp/env/jms/queuename");
然后,客户端创建队列连接、会话和发送端:
queueconnection =
queueconnectionfactory.createqueueconnection();
queuesession =
queueconnection.createqueuesession(false,
session.auto_acknowledge);
queuesender = queuesession.createsender(queue);
最后,客户端向队列中发送几条消息:
message = queuesession.createtextmessage();

for (int i = 0; i < num_msgs; i++) {
message.settext("this is message " + (i + 1));
system.out.println("sending message: " +
message.gettext());
queuesender.send(message);
}

message-driven bean类
simplemessageejb类的代码阐明了一个message-driven bean类所需满足的基本条件:
1、它实现了messagedrivenbean接口和messagelistener接口。
2、类被定义为public。
3、类不能定义为abstract或final。
4、它实现了一个onmessage方法。
5、它实现了一个ejbcreate方法和一个ejbremove方法。
6、它包含了一个公用的无参数的构造函数。
7、它不能定义finalize方法。
与session bean或entity bean不同,message-driven bean不具有定义客户端访问的remote接口或local接口。客户端组件不能定位message-driven bean并调用其中的方法。尽管message-driven bean不包含商业方法,但是它可能包含由onmessage方法调用的辅助方法。

onmessage方法
当队列接受到一个消息时,ejb容器调用message-driven bean中的onmessage方法。在simplemessagebean类中,onmessage方法将消息引入textmessage并显示其内容:
public void onmessage(message inmessage) {
textmessage msg = null;

try {
if (inmessage instanceof textmessage) {
msg = (textmessage) inmessage;
system.out.println
("message bean: message received: "
+ msg.gettext());
} else {
system.out.println
("message of wrong type: "
+ inmessage.getclass().getname());
}
} catch (jmsexception e) {
e.printstacktrace();
mdc.setrollbackonly();
} catch (throwable te) {
te.printstacktrace();
}
}

ejbcreate方法和ejbremove方法
这些方法必须满足以下条件:
1、访问控制修饰必须是public。
2、返回类型必须是void。
3、修饰不能是static或final。
4、throws子句不能定义任何应用程序例外。
5、这个方法没有参数。
在simplemessagebean类中,ejbcreate方法和ejbremove方法为空。

运行simplemessageejb示例

启动j2ee服务
要显示message-driven bean的输出,你必须使用verbose模式启动服务:
j2ee -verbose

创建队列
1、使用j2eeadmin命令创建队列:
j2eeadmin -addjmsdestination jms/myqueue queue
2、检查队列是否已被建立:
j2eeadmin -listjmsdestination

部署应用程序
1、在deploytool中打开j2eetutorial/examples/ears/simplemessageapp.ear文件(fileopen)。
2、部署simplemessageapp应用程序(toolsdeploy)。在introduction对话框中,检查是否选中return client jar检验栏。详细信息请参看部署j2ee应用程序.

运行客户端
1、在一个终端窗口时,到j2eetutorial/examples/ears目录下。
2、设置appcpath环境变量为simplemessageappclient.jar。
3、在一行中输入以下命令:
runclient -client simplemessageapp.ear -name
simplemessageclient -textauth
4、在提示登录时,输入j2ee作为用户名和口令。
5、客户端会显示以下内容:
sending message: this is message 1
sending message: this is message 2
sending message: this is message 3
6、在你启动j2ee服务(用verbose模式)的终端窗口下,会显示以下内容:
message bean: message received: this is message 1
message bean: message received: this is message 2
message bean: message received: this is message 3

message-driven bean的deploytool提示
第二章概括了创建和封装enterprise bean的基本步骤。这一章我们将介绍对于message-driven bean在deploytool中必须执行的任务。要在deploytool中显示这个示例,打开j2eetutorial/examples/ears/simplemessageapp.ear文件并选中simplemessageejb

指定bean的类型和事务管理
你可经在使用new enterprise bean向导创建bean时指定其类型。
1、要启动这个向导,选择filenewenterprise bean。
2、在向导的general对话框中,选择message-driven按钮。
3、在transaction management对话框中,你可以选择bean-managed,也可以选择container-managed。如果你选择的是bean-managed,那么在下面一段的第4步中,你必须选择确认类型。

设定message-driven bean的特征
你可以在两个地方作这个设定:
1、在new enterprise bean向导中的message-driven bean settings对话框
2、bean的message标签(参见图7-2)
这些设定包括以下内容:
1、对于destination类型,可以选择queue也可以选择topic。一个队列使用点对点的消息域,至多只能有一个使用者。而一个主题使用发布-订阅的消息域,它可以有零个、一个或多个使用者。
2、在destination组合框中,选择你创建的目的地的jndi命名。作为一个示例,你可以参看创建队列。目的地可以是一个queue对象,也可以是一个topic对象;它是引入消息的发起者和发出消息的目标。
3、在connection factory组合框中,选择适当的对象,这可以是一个queueconnectionfactory,也可以是一个topicconnectionfactory。这个对象出示了j2ee组件访问消息服务的连接。
4、如果你选择了bean管理事务,那么你可能需要在acknowledgement组合框中选择确认类型--这可能是auto-acknowledge(自动确认)或duplicates-ok(ok重复)。auto-acknowledge类型要求会话自动确认bean在使用这个消息。而duplicates-ok类型对消息提交的确认会迟钝一些;这个类型可能会导致一个消息的复制,但是它会减少会话的开销。
5、在jms message selector区域,你可以输入一个过滤bean接收到的消息的语句。
图7-2 simplemessageejb的message标签


jms客户端的deploytool提示
有关jms客户端的更多的信息,请参看java消息服务指南:
http://java.sun.com/products/jms/tutorial/index.html

设定资源索引
1、选中客户端的节点。
2、选中resource refs标签。
3、单击add。
4、在coded name中,输入与客户端的代码中的lookup方法的参数相匹配的命名。例如,如果lookup方法的参数是java:comp/env/jms/myqueueconnectionfactory,coded name就应该是jms/queueconnectionfactory。
5、在type中,选择与目的类型相匹配的连接factory类。
6、在authentication中,绝大多数情况下你的选择应该是container。如果你的代码明确地登录到消息服务器,这里你可以选择application。
7、在sharable中,确保检验栏被选中。这个选择使得容器可以优化连接。
8、在user name和password中输入字符串。j2ee sdk的身份论证服务会在你运行客户端时提示你输入相关信息。

设定资源环境索引
1、选择resource env. refs标签。
2、单击add。
3、在coded name中,输入与定位队列和主题的lookup调用的参数相匹配的命名。例如,如果lookup的参数是java:comp/env/jms/queuename,那么coded name应该是jms/queuename。
4、在type中,选择与目的类型相匹配的类。

指定jndi命名
1、选中应用程序的节点。
2、选择jndi names标签并输入适当的命名。例如,在这一章中所讨论的simplemessageapp将采用表7-1中所示的jndi命名。
表7-1 simplemessageapp应用程序中所使用的jndi命名
组件名或索引名:jndi命名
simplemessageejbjms/myqueue
jms/myqueueconnectionfactory:jms/queueconnectionfactory
jms/queuename:jms/myqueue   


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons