服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

基础--websphere下jms的配置和和应用

1.    mdb(message driven bean)介绍
1.1.     相关概念
要真正理解mdb的话,需要理解java分布式编程的基础知识。下面我把它涉及到的知识点简单介绍下:
1.1.1. rmi(remote method invocation):
rmi其实就是提供客户远程调用方法的技术,对一个具体提供服务的类它生成一个存根和一个骨架,rmi客户通过保存在本地的存根调用rmi服务器上的对象,而rmi服务器则通过本地的rmi骨架与客户机上的存根沟通,传递对象。
 

1.1.2. ejb(enterprise javabean):
ejb的概念与rmi差不多。它存在于ejb容器中。ejb也是对象,因此它也有自身的一些方法,两种:回调方法,业务方法。业务方法是ejb面向客户提供服务的接口,它由客户调用。回调方法由容器调用,容器通过对这些方法的调用实现对ejb进行如创建,删除时的一些逻辑。要编写一个ejb要实现三个部分: ejb需要创建,所以要有一个创建它的工厂;ejb可以被远程调用所以还要有一个远程接口;一个具体实现的bean,它由回调方法和业务方法组成。
 

1.1.3. jms(java message service):
消息的传递分为点对点(ptop)和发布/预定(即点对群)。它跟电子邮件一样都是异步通讯的,一个消息发送到队列里面,消息消费者则从队列中获取信息。
 
1.1.4. jndi(java naming and directory interface):
java命名和目录接口,可以用来查找远程对象。
1.2.     mdb的环境以及所使用的工具
windows xp,websphere5.1,eclipse3.0,ant1.6.2,ibmjdk1.4.2。
安装websphere时一定要确认安装了messaging组件:
 

2.    websphere jms的相关配置
登陆websphere管理平台,选中:资源---àwebsphere jms 提供者,并选择相应节点的server
 
选择好server后,在属性追加栏里点:
“websphere 队列连接工厂”配置queueconnectionfactory。
“websphere 队列目的地”配置queue。
2.1.     新建队列工厂
进入“websphere 队列连接工厂”页面后,新建一个队列工厂:
 
输入工厂名及对应的jndi名:
 
点击确定按钮并保存。
2.2.     新建队列
进入“websphere队列”页面后,新建一个队列:
 

输入队列名及对应的jndi名:
 
点击确定按钮并保存。
2.3.     新建监听器
下面配置队列监听器:
选择“应用程序服务器”,再选择相应server1
 
进入server1的页面后,在追加属性里面选择“消息侦听器服务”
 
然后还是在追加属性里面选择“侦听器端口”
 
然后新建一个监听端口:
 
输入端口名及监听的队列和工厂的jndi名,初期状态就用默认的已启动,表示server刚启动时监听端口也同时启动:
 
点击确定并保存。
2.4.     jms server设置
回到应用程序服务器的server1页面,在追加属性中选择“服务器组件”:
 
然后选择jms 服务器:
 
在队列名中输入前面新建的队列名:
 
点击确定并保存。
至此,websphere上的jms配置全部完成。下面就是应用程序的例子。
3.    ear包的作成
下面用一个j2ee应用程序示例来演示一下怎么创建和使用mdb的。

这个j2ee应用包含了一个普通ejb和一个mdb,以及一个部署文件application.xml。
ejb实现了向queue里面发送信息的功能,而信息的接受则由mdb来自动实现,并通过onmessage()方法来实现在接受消息时需要执行的动作。

3.1.     ejb-jar-rcv.jar(mdb)的作成:
mdb是被打成一个jar包的,这个jar包由实现了javax.ejb.messagedrivenbean和javax.jms.messagelistener的一个类simplemessagebean.java和一个ejb规范要求的xml文件ejb-jar.xml组成。

simplemessagebean.java
 
ejbcreate(),ejbremove()分别实现了mdb在容器里被创建和删除时要执行的动作。
getmessagedrivencontext()和setmessagedrivencontext(javax.ejb.messagedrivencontext ctx)两个方法在这里没有使用到,就不说了。
最重要的就是onmessage(javax.jms.message msg)方法,当这个jar包作为一个消息驱动bean被部署到websphere上后,它与一个指定的端口关联起来,这个端口上的监听器对我们前面在websphere上配置的queue进行监听,每当有消息被送到这个queue里就触发了onmessage方法,完成我们想要执行的动作,消息驱动由此而来。在这里onmessage方法是把收到的消息作成邮件然后发送到指定地址。

ejb-jar.xml
 
mdb也是一个ejb,所以这个文件也少不了:
test.receive.simplemessagebean,对应类文件的包和类名。

3.2.     ejb-jar-snd.jar(ejb)的作成:
就像前面介绍一样,ejb里面包含了一个工厂messagesenderhome.java,一个实现messagesenderbean.java,一个远程接口messagesender.java,还有一个xml说明文件ejb-jar.xml

messagesender.java
 
这个类只有一个方法,它提供了一个远程接口。

messagesenderbean.java这个类实现了sessionbean接口

这个类是ejb的具体实现类,要做的事就是把一条信息发送到指定队列里去。sendmessage()就是发送消息的这个方法,它通过ejb里的远程接口被调用。
connectionfactoryname和queuename分别对应前面定义的queueconnectionfactory和queue的jndi名。
message是要发送的信息。
nummessages是发送的次数。

messagesenderhome.java工厂类只有create()一个方法,要使用ejb发送信息则必须先调用这个工厂的这个方法创建一个messagesender的实例,然后通过实例调用实现bean的sendmessage()方法,完成发送信息到queue的功能。
 
ejb-jar.xml
 
这里的三个标签分别对应前面的工厂类,远程接口和实现类。
stateless表示它是一个无状态会话bean。

3.3.     testjms.ear(ear)的作成
把上述两个jar包打成一个ear文件则可以作为一个j2ee应用程序发布到websphere上去了,不过还需要下面这个j2ee应用的部署文件,application.xml:
 
这个文件说明了在这个j2ee应用中有两个ejb模块。

可以使用ant将上面的所有相关文件按照下面的目录结构打成一个ear包。
 
至此我们可以得出一个可以发布到websphere上去的ear包。

4.    ear包的发布
下面是把这个ear包发布到websphere上去的过程说明:

进入“应用程序”的“企业应用程序”页面,点击“浏览”按钮,选择要发布的ear包。
点击下一步。

下一步:
 
下一步:

下一步:
 
输入前面配置好的监听器的jndi名,然后下一步:

这里的配置通过监听器端口将mdb与前面配置的queue关联了起来。

输入用于查找ejb的jndi名,下一步:
 
下一步:

下一步:
 
点击“完成”,完成配置并保存。
 

这个ear包发布完成后再到“企业应用程序”页面,选中发布上去的ear包的应用,点击启动。
启动成功,这个j2ee应用程序就可以使用了。
5.    测试程序
最后可以用下面的测试代码来调用ejb发送信息,并验证mdb发送邮件是否成功。
 

如果测试程序与我们发布的j2ee应用程序在一台机上,那就上面未注释部分的代码测试。
如果不在同一台机上,使用的上下文就应该用注释部分代码来初始化,其中"corbaloc::hostname:port"的hostname和port对应j2ee应用程序所在机器名或ip和端口,如果是默认得server1,可以不用指定端口,"corbaloc::hostname”就行了。

程序运行时缺少的jar包大多在websphere的lib目录下都可以找到。