MDB Sample搭建和运行手册
蒋彪@南京 2010-8-23
1. MDB的运行环境
运行环境 | Oc4j |
JDK | JDK 1.3以上 |
编译环境 | ANT 1.4 |
示例程序地址 | www.oracle.com/technetwork/middleware/ias/how-to-ejb-mdb-128132.zip |
2. MDB Sample的目录结构
src | ejb | mdb | MessageLogger.java | MDB代码 |
web | logmessageform.htm | 提交数据 | ||
logmessage.jsp | 将数据封装成Message由JMS发送 | |||
etc | application.xml | 标准的J2EE 描述文件 | ||
ejb-jar.xml | 标准的Ejb描述文件 | |||
Web.xml | 标准的Web描述文件 | |||
orion-ejb-jar.xml | OC4J特有的EJB描述文件 | |||
Bulid.xml | 编译打包的Ant 脚本 | |||
Common.xml | 编译打包时所需要的一些资源 |
3. MDB Sample的打包
首先在系统PATH中设置,OC4J_HOME.
其次,打开bulid.xml,如下将用户名和密码修改成自己本地的配置
<!-- Make sure these are correct for your instance --> <property name="deploy.ormi" value="ormi://localhost" /> <property name="deploy.username" value="oc4jadmin" /> <property name="deploy.password" value="admin" /> |
然后在Sample的目录下,如下执行Ant
打包成功之后,能在lib文件夹下面找到如下文件
< messagelogger.ear>
4. MDB Sample的部署
4.1 修改OC4J 的JMS配置
如下,在{OC4J_HOME}\ jms.xml 中添加本MDB所属的配置文件
<topic name="Demo Topic" location="jms/theTopic"> <description>A dummy topic</description> </topic>
<topic-connection-factory name="Demo Topic Connection Factory" location="jms/theTopicConnectionFactory"> <description>A dummy topic connection factory</description> </topic-connection-factory> |
4.2 在MDB Sample的目录下执行如下CMD
<前提是OC4J启动成功>
ant deploy-usingadmin.jar |
4.3 修改{OC4J}\j2ee\home\config\default-web-site.xml(看版本而定)
在该文件中,添加如下一行
<web-app application="messagelogger" name="messagelogger-web" root="/messagelogger" /> |
4.5 如下所示,访问部署成功的页面
http://localhost:8888/messagelogger/ |
5. MDB Sample的EAR包的加载顺序
在ear包中读取application.xml文件,了解module组件的定义 |
|
在ejb.jar包中首先读取 ejb-jar.xml,了解MDB的声明和JMS的类型定义 |
|
在ejb.jar包中读取orion-ejb-jar.xml,连接jms.xml中的具体的jms-connection-factory的定义 |
|
编译EJB代码,初始化EJB代码 |
#以上#
补充一:如何把JMS由Topic换成Quene
我实验了一把,先改OC4J下面的JMS.xml里的Topic换成Quene,然后把ejb-jar.xml和orion-ejb-jar.xml里面的Topic换成Quene就可以了。代码层次什么都不需要改
补充二:如何实现JMS的回滚
如果MDB接受失败,就可以回滚对JMS的接受,让发送者再次发送,代码改写如下:
public void onMessage(Message msg) { Try{
} catch(Exception e) { context.setRollbackOnly(); } } |
上面的context就是MessageDrivenContext