?? ? 最近公司有个需求,需要接收其他部门发送的MQ请求,发送MQ的部门是基于pub/sub方式发布的。我负责我们部门的订阅MQ的开发。 ? ?? ? ? ? ? a.新建主题工厂 ?? ? ? ? ? ? ?主机、端口配置成发布消息的地址,传输类型选择client,通道,队列管理器填写。代理版本选择基本,客户机标识填写接收消息的标识 ?? ? ? ? ? b.新建主题 ?? ? ? ? ? ? ?基本主题名填写a中的客户机标识,目标客户选择jms ?? ? ? ? ? c.配置监听端口 ?? ? ?服务器---应用服务器----server1----通信----消息侦听器服务----侦听器端口---新建侦听端口侦听主题工厂、主题。 ? ? ?? ? ? ?2.两种实现订阅消息 a .jsm轮询查询: ? ? ? ? 传入参数:iiop://10.1.12.11:2810 notification/IdentificationChangedTopicFactory notification/IdentificationChangedTopic S identificationChanged ? 其中出现错误:1.远程调用ejb查找jndi失败问题。2.websphere dumpNameSpace 查找jndi要求输入服务器登录用户名密码。3.调用接收程序之后,重复调用发订阅信息被锁的问题。 ? ? ?? b.?? ? ? ?采用Message Driver Bean,由websphere自己订阅接收到的信息。需要在websphere上部署一个ejb-mdb。ejb2.1写法如下: ? 遇到问题:1.ejb部署问题。2.ejb引用其他jar包问题。3.ejb使用jndi的问题。 4.最奇怪的:transaction问题:发生试探非法用现有两阶可用资源落实一阶可用资源。 通过<transaction-type>Bean</transaction-type>来解决的。(之前是<transaction-type>Container</transaction-type>) ? ? 最后测试通过!!!!!!!!希望对他人有用,传上订阅的ear包。 ? ? ? ? ? ? ? ? ? ? ? ? ?
????环境:websphere6.1
????实现:a) 采用Message Driver Bean
在WAS上部署一个EJB应用,将业务逻辑在MDB的onMessage () 方法中实现。
?? ? ? ? ? ? b) 采用JMS程序
自己开发轮询程序,获得消息内容,并将其用于业务逻辑中。
????开发细节:?
????????1.在websphere上配置消息中间件: public static void main(String[] args) {
JMSPubSub.send(args);
}
public static String send(String[] args){
String result = null;
System.out.println(args[0]);
System.out.println(args[1]);
System.out.println(args[2]);
System.out.println(args[3]);
System.out.println(args[4]);
if (args.length < 4) {
usage();
System.out.println("out");
return result;
}
String subName = null;
String url = args[0];
boolean isPublisher = true;
if (args[3].equalsIgnoreCase("P")) {
isPublisher = true;;
} else if (args[3].equalsIgnoreCase("S")) {
isPublisher = false;
if (args.length > 4) subName = args[4];
} else {
usage();
return result;
}
javax.naming.InitialContext initContext;
initContext = initContext(url);
System.out.println("initContext:" + initContext);
if (initContext == null) return result;
if (true) {
TopicConnection topicConnection = initTopicConnection(initContext, args[1]);
if (topicConnection == null) return result;
try {
topicConnection.start();
System.out.println("topicConnection start......");
} catch (JMSException e1) {
System.out.println("topicConnection start is error......");
e1.printStackTrace();
return result;
}
TopicSession session;
try {
session = topicConnection.createTopicSession(false,
Session.AUTO_ACKNOWLEDGE);
System.out.println("topicConnectionSession start......");
} catch (JMSException e1) {
System.out.println("topicConnectionSession start is error......");
e1.printStackTrace();
return result;
}
Topic topic = getTopic(initContext, args[2]);
if (session == null) return result;
if (isPublisher) {
try {
TopicPublisher publisher = session.createPublisher(topic);
System.out.println("TopicPublisher start......");
TextMessage message = session.createTextMessage();
String text = getFromIn();
message.setText(text);
System.out.println("publisher start......");
publisher.publish(message);
System.out.println("publisher end......");
} catch (JMSException e) {
System.out.println("publisher is error ......");
e.printStackTrace();
}
} else {
try {
System.out.println("in sub ......");
TopicSubscriber subscriber;
if (subName != null && !subName.equals("")) {
subscriber = session.createDurableSubscriber(topic, subName);
} else {
subscriber = session.createSubscriber(topic);
}
System.out.println("createDurableSubscriber over ......");
// MessageListener listener = new JMSPubSub.MyMessageListener();
Message arg0 = subscriber.receive();
if (arg0 instanceof TextMessage) {
try {
result = ((TextMessage) arg0).getText();
System.out.println("message: [" +result + "]");
} catch (JMSException e) {
System.out.println("get message is error" + e);
e.printStackTrace();
}
} else {
System.out.println("Message Type is error.");
}
} catch (JMSException e) {
System.out.println("createDurableSubscriber is error ......");
e.printStackTrace();
}
}
if (session != null) {
try {
session.close();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (topicConnection != null) {
try {
topicConnection.close();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return result;
}<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar id="ejb-jar_ID" version="2.1" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">
<display-name>
identychangeEJB</display-name>
<enterprise-beans>
<message-driven id="SubscriberDMDB">
<display-name>
SubscriberMDB_IdentyChange</display-name>
<ejb-name>SubscriberMDB_IdentyChange</ejb-name>
<ejb-class>com.taikang.identychange.ejb.IdentificationChangedMDB</ejb-class>
<messaging-type>javax.jms.MessageListener</messaging-type>
<transaction-type>Bean</transaction-type>
<message-destination-type>javax.jms.Topic</message-destination-type>
<activation-config>
<activation-config-property>
<activation-config-property-name>acknowledgeMode</activation-config-property-name>
<activation-config-property-value>Auto-acknowledge</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>destinationType</activation-config-property-name>
<activation-config-property-value>javax.jms.Topic</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>subscriptionDurability</activation-config-property-name>
<activation-config-property-value>Durable</activation-config-property-value>
</activation-config-property>
</activation-config>
<env-entry>
<env-entry-name>jndi-datasource-name</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>jdbc/InsureDB</env-entry-value>
</env-entry>
<resource-ref id="ResourceRef_1254203818020">
<description>Database reference for insure application</description>
<res-ref-name>jdbc/InsureDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</message-driven>
</enterprise-beans>
</ejb-jar>
详细解决方案
websphere6.1配备消息驱动bean2.0(基于发布/订阅)手记
热度:575 发布时间:2012-11-01 11:11:32.0
相关解决方案
- websphere6.1 调度 war包中含有中文文件 报错 AppDeploymentException: []
- websphere6.1装配提示 操作系统必备软件检查失败
- websphere6 SECJ4062W: 找不到证据信息
- websphere6.1默认首页有关问题
- WebSphere6.1 下部署war包时,报错连不下jndi
- aix+WebSphere6.0出现国际化有关问题
- websphere6.1安装提示 操作系统必备软件检查失败解决方法
- websphere6.1 mysql5如何建jdbc和数据源
- webSphere6.0 的JAVA HOME,该怎么解决
- websphere6.1中jar冲突有关问题,
- 被逼无奈,只有发帖了,WebSphere6.1部署的有关问题
- websphere6.1 部署 war包中含有中文文件 报错 AppDeploymentException: [],该怎么解决
- websphere6.1 不用创建sessionfactory,请高手帮忙,该如何处理
- websphere6 SECJ4062W: 找不到凭证信息解决思路
- websphere6.1 启动报错,
- WebSphere6.1怎么更新一个class和jsp文件
- struts+spring+websphere6.1部署异常
- Websphere6.1试用版无限试工[转]
- Win7 停安装 Websphere6.1
- websphere6.1 struts2 action response 404 有关问题解决
- websphere6.1应用log4j 无效
- websphere6.1补丁上载地址
- 用OutputStream上载大文件时,上载过程中取消上载后,websphere6.0会死掉,而tomcat不会
- websphere6 ejb当地调用没有成功-mark
- Websphere6.1上spring mvc工程中jsp显示有关问题
- Websphere6.1彻底剔除Profile
- websphere6.1配备消息驱动bean2.0(基于发布/订阅)手记
- websphere6.1调度ejb2.0
- Websphere6.1部署项目时报错,连接不下jndi Name not found in context "java:"
- websphere6.1部署struts2.1.8找不到action报404异常