`
gigi_112
  • 浏览: 114462 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

websphere6.1配置消息驱动bean2.0(基于发布/订阅)手记

阅读更多

     最近公司有个需求,需要接收其他部门发送的MQ请求,发送MQ的部门是基于pub/sub方式发布的。我负责我们部门的订阅MQ的开发。
    环境:websphere6.1


    实现:a) 采用Message Driver Bean
在WAS上部署一个EJB应用,将业务逻辑在MDB的onMessage () 方法中实现。

             b) 采用JMS程序
自己开发轮询程序,获得消息内容,并将其用于业务逻辑中。

 


    开发细节: 


        1.在websphere上配置消息中间件:

           a.新建主题工厂

              主机、端口配置成发布消息的地址,传输类型选择client,通道,队列管理器填写。代理版本选择基本,客户机标识填写接收消息的标识

           b.新建主题

              基本主题名填写a中的客户机标识,目标客户选择jms

           c.配置监听端口

      服务器---应用服务器----server1----通信----消息侦听器服务----侦听器端口---新建侦听端口侦听主题工厂、主题。

 

 

        2.两种实现订阅消息

a .jsm轮询查询:

 

 

	  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; }

 

 

传入参数: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写法如下:

<?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>

  遇到问题:1.ejb部署问题。2.ejb引用其他jar包问题。3.ejb使用jndi的问题。

4.最奇怪的:transaction问题:发生试探非法用现有两阶可用资源落实一阶可用资源。

通过<transaction-type>Bean</transaction-type>来解决的。(之前是<transaction-type>Container</transaction-type>)

 

 

最后测试通过!!!!!!!!希望对他人有用,传上订阅的ear包。


 

 

 

 

 

 

 

 

 

 

 

 

 

1
0
分享到:
评论

相关推荐

    MyEclipse 配置 Websphere6.1

    【MyEclipse 配置 Websphere6.1】配置过程详解 MyEclipse是一款集成开发环境,常用于Java EE应用的开发。而Websphere6.1是IBM的一款企业级应用服务器,常用于部署和运行Java EE应用程序。在MyEclipse中配置...

    websphere 6.1 资料集

    7. **配置文档**:`WebSphere+v6.1配置文档.rar`和`websphere安装后配置说明.rar`提供了详细的配置指导,可能包括自定义服务器配置、扩展功能如JMS、EJB、SSL/TLS、JDBC驱动、WS-Security等的配置。 通过这些资料,...

    websphere 6.1安装配置指南

    websphere 6.1安装配置指南websphere 6.1安装配置指南websphere 6.1安装配置指南websphere 6.1安装配置指南websphere 6.1安装配置指南websphere 6.1安装配置指南

    WebSphere 6.1 SSL配置

    WebSphere 6.1 SSL 配置 WebSphere 6.1 SSL 配置是 IBM WebSphere Application Server 6.1 中的一项安全功能,旨在提供安全的数据传输和身份验证。该配置文件详细介绍了如何在 WebSphere 6.1 中配置 SSL 加密连接,...

    Websphere6.1安装配置说明

    【Websphere6.1 安装配置说明】 在IT领域,WebSphere是IBM提供的一款企业级应用服务器,常用于构建、部署和管理Java应用程序。本文将详细介绍如何安装和配置WebSphere 6.1,包括设置DataSource、JDBC连接、JNDI命名...

    WebSphere6.1 for oracle数据源配置

    总之,“WebSphere6.1 for Oracle数据源配置”涉及了WebSphere与Oracle数据库的集成,包括JDBC驱动的管理、数据源的创建和配置、以及应用与数据源的绑定。正确配置数据源能够保证应用程序高效、可靠地访问数据库,...

    IBM WebSphere Application Server 6.1 for Linux安装步骤

    本文将详细介绍在 Linux 平台上安装 WebSphere 6.1 的步骤,以及相关的配置和设置。 安装准备 在安装 WebSphere 6.1 之前,需要准备好操作系统和环境。首先,需要检查操作系统的版本和配置,确保其满足 WebSphere ...

    MYEclipse6.0下Websphere6.1的配置

    ### MyEclipse 6.0 下 Websphere 6.1 的配置详解 #### 一、概述 在软件开发过程中,集成开发环境的选择至关重要。MyEclipse 作为一款功能强大的 Java 开发工具,深受广大开发者的喜爱。而 WebSphere Application ...

    WebSphere6.1安装配置手册

    ### WebSphere 6.1 安装与配置详解 #### 一、WebSphere Application Server 的安装与配置 ##### (一)安装 WebSphere Application Server **1. Windows 下安装 WebSphere** WebSphere Application Server (WAS)...

    websphere 6.1 jms配置

    发布过程中,对于消息驱动的bean,需要在WebSphere管理控制台中指定“消息驱动的bean监听器绑定”,即指定之前创建的激活规范,而不是像WebSphere 6.0之前的版本那样设置“监听器端口”。 这些配置步骤确保了...

    WebSphere6.1

    - 安装:执行安装程序,按照向导完成安装,选择安装目录,例如Unix/Linux的`/usr/IBM/WebSphere/AppServer`。 3. **安装过程中选择与配置** - 可选择是否安装示例应用程序。 - 选择安装类型,如Network ...

    Websphere6.1程序部署

    【Websphere6.1程序部署】是关于IBM Websphere Application Server 6.1版本的详细操作指南,包括了安装、配置以及程序包的发布等多个环节。在部署过程中,理解并掌握这些步骤至关重要,因为它们是确保应用程序在...

    Myeclipse上的WebSphere6.1配置和部署以及数据库池的配置

    相比于tomcat的项目部署,websphere中项目的部署还是还是很不一样的,本文档中图文并茂地讲述了,在Myeclipse中如何配置websphere以及如何部署web程序 另外,还详细讲解了如何在websphere中配置数据库连接池

    WebSphere 6.1应用服务器安装部署手册

    通常建议使用默认路径`/opt/IBM/WebSphere/AppServer`。 ###### 2.3.7 选择安装环境 - **环境**:选择是开发环境还是生产环境。 - **影响**:不同环境的选择会影响安装的组件和配置。 ###### 2.3.8 设置管理...

    IBM WebSphere 6.1 ND 集群安装配置

    WebSphere管理控制台是一个基于Web的工具,用于配置、管理和监控WebSphere Application Server。通过管理控制台,管理员可以进行各种操作,如创建、编辑服务器配置,部署应用程序,以及监控性能指标。 **第二个节点...

    WebSphere6.1配置

    ### WebSphere 6.1 配置指南:发布 Web 应用及数据库连接池设置 #### 一、概述 在本篇文章中,我们将详细介绍如何在 IBM WebSphere Application Server 6.1 版本中配置并发布一个 Web 应用程序,并特别关注于...

    手把手教你安装配置websphere6.1

    【安装配置Websphere 6.1】是一个关键任务,对于任何希望管理和部署基于IBM Websphere的应用程序的IT专业人员来说,都是必备技能。Websphere是IBM提供的一款强大的企业级应用程序服务器,用于托管Java EE(Java ...

Global site tag (gtag.js) - Google Analytics