MDB的配置与开发

这里我的环境是MyEclipse8.0 + WebLogic10.3 + Ubuntu9.10,EJB的开发其实与这三个环境没有关系,我最早也是在WindowsVista + MyEclipse6.0 + WebLogic10.3上开发成功的,关于Weblogic配置JMS服务大家可以去搜一下,有好多,这里主要是在环境都OK的基础上配置开发MDB,首先是我的MDB代码:

/**

 * 测试的MDB

 * 

 * @author 王硕

 * 

 */

 

@MessageDriven (activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") }, mappedName = "jms/FileQueue")

public class DemoMDB implements MessageListener {

 

public void onMessage(Message message) {

System.out.println("消息驱动Bean测试成功");

}

 

}

 

业务逻辑比较简单,相信大家都知道关键在于能请求到就可以了,这里需要注意的是@MessageDriven的配置,注意,上面的是Weblogic服务器的配置方式,JBoss的还不一样,一会再告诉大家,这里起码WebLogic10.3是必须至少要这么配置才可以,也就是说至少需要那3个属性,很多书上与其它文章上转载的配置方式都不对,我也是按书上说的文章上说的配了半天都不对,尤其是那个mappedName,N多的书上说那是个可选的建议不要使用的服务器专有属性,但是,这里必须要这样配置,才可以生效,JBoss的配置是这样:

@MessageDriven(activationConfig = {

@ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/JBossQueue"),

@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") })

这里不需要mappedName来指定消息的目的地,而是用destination指定的,区别于WebLogic的配置方式,配置完MDB后就是要访问它了,我是在SessionBean里面访问它的,这里的配置也需要注意:

/**

 * 测试的无状态会话Bean

 * 

 * @author 王硕

 * 

 */

@Stateless(name = "DemoSessionBean")

public class DemoSessionBean implements Demo {

 

@Resource(mappedName = "jms/QueueConnectionFactory")

private QueueConnectionFactory mdbQCF;

 

@Resource(mappedName = "jms/FileQueue")

private Queue mdbQueue;

 

private QueueConnection qcon = null;

 

public QueueConnectionFactory getMdbQCF() {

return mdbQCF;

}

 

public void setMdbQCF(QueueConnectionFactory mdbQCF) {

this.mdbQCF = mdbQCF;

}

 

public Queue getMdbQueue() {

return mdbQueue;

}

 

public void setMdbQueue(Queue mdbQueue) {

this.mdbQueue = mdbQueue;

}

 

public QueueConnection getQcon() {

return qcon;

}

 

public void setQcon(QueueConnection qcon) {

this.qcon = qcon;

}

 

public QueueSession getQsession() {

return qsession;

}

 

public void setQsession(QueueSession qsession) {

this.qsession = qsession;

}

 

public QueueSender getQsender() {

return qsender;

}

 

public void setQsender(QueueSender qsender) {

this.qsender = qsender;

}

 

private QueueSession qsession = null;

private QueueSender qsender = null;

 

public void print() {

System.out.println("Demo测试成功");

}

 

public void sendMessage() {

 

try {

 

qcon = mdbQCF.createQueueConnection();

qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

qsender = qsession.createSender(mdbQueue);

ObjectMessage msg = qsession.createObjectMessage();

qcon.start();

qsender.send(msg);

 

qsender.close();

 

qsession.close();

 

qcon.close();

 

System.out.println("Message send success");

 

} catch (Exception e) {

e.printStackTrace();

}

 

}

 

}

同样这个配置WebLogic与JBoss都是可以的,里面需要注意的地方有两个,一个是注解的配置,是用mappedName与之对应的,另一个就是发送消息的类,注意,不能说一定,但是起码建议使用上面四个类,很多书上说用ConnectionFactory与Destination这两个类,但是使用这两个类连服务器部署都会出问题,更不就说运行了,也是这里,困扰了我一天之久,如果是Topic则换成相应的Topic的类就可以了,起码用这四个类是没有问题的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值