- 浏览: 813008 次
- 性别:
- 来自: 西安
文章分类
- 全部博客 (307)
- struts (8)
- hibernate (3)
- spring (32)
- opensourceproject (12)
- javaScript (9)
- primeton EOS (2)
- journey of heart (10)
- Design pattern (6)
- ejb (17)
- point (37)
- Linux&Unix (22)
- ibatis (10)
- AJAX (6)
- DB (26)
- Protocol (6)
- chart (4)
- web server (11)
- webservice (7)
- integration (3)
- tuxedo (5)
- ext (4)
- android (1)
- c/c++ (12)
- JVM (1)
- paginationFrame (2)
- code (2)
- report (1)
- High-performance web (1)
- svn (1)
- JQuery (1)
- workDaily (2)
- cloud (16)
- Python (8)
- English (2)
- shell (5)
- googleCode (1)
- nio (1)
- hyper-v (1)
- debug (3)
- vbs (2)
- openstack (3)
- K8S (1)
- Mesos (0)
- Spark (0)
- Marathon (0)
最新评论
-
钱图大展:
chao2751021 写道lib包哪里去下载,找不到
大型网站用户行为记录的一个实现--基于clickStream(第一部分) -
钱图大展:
无法下载
大型网站用户行为记录的一个实现--基于clickStream(第一部分) -
fm395728572:
shell脚本中用到了环境变量,但是获取不到,例如脚本中有一句 ...
ganymed-ssh2 for Java -
liuhanjiang:
我qq147229234
大型网站用户行为记录的一个实现--基于clickStream(第一部分) -
liuhanjiang:
博主 我利用您提供的方法实现博文中介绍的clickstream ...
大型网站用户行为记录的一个实现--基于clickStream(第一部分)
消息驱动bean主要使用在异步的业务中,比如用户在页面上查询了话费(余额,实时话费,语音,短信。。。),我们需要把用户这个行为记录到数据库中,就可以使用消息驱动bean。
首先使用springAOP 拦截到 调用的 业务方法,发现是业务关注的方法的时候,在invoke 方法中发送一条消息到消息队列中去,(此业务场景我们使用 点对点的 消息发送模式)然后 ,消息驱动bean从监听的队列中取到消息,插入到数据库中。查询话费 和 将行为入库 是异步的,因此不会阻塞。不影响前台页面显示速度。
开发一个消息驱动bean 的步骤:
1.首先 写 消息驱动bean ,负责从消息队列中取消息,然后执行相应的业务方法
package cn.com.xinli.ejb.mdb; import javax.ejb.EJBException; import javax.ejb.MessageDrivenBean; import javax.ejb.MessageDrivenContext; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; import org.apache.log4j.Logger; public class MDBean implements MessageDrivenBean,MessageListener { Logger log=Logger.getLogger(MDBean.class); private transient MessageDrivenContext mdc = null; public void onMessage(Message message) { if(message instanceof TextMessage) { TextMessage msg=(TextMessage) message; try { log.info("接收到消息:"+msg.getText()); } catch (JMSException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { log.info("消息类型不正确!"); } } public void ejbCreate() { } public void ejbRemove() throws EJBException { // TODO Auto-generated method stub } public void setMessageDrivenContext(MessageDrivenContext mdc) throws EJBException { this.mdc = mdc; // TODO Auto-generated method stub } }
2. 配置 ejb-jar.xml
<?xml version="1.0" encoding="gb2312"?> <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"> <ejb-jar> <description>ejb</description> <display-name>myEJBTest</display-name> <enterprise-beans> <message-driven id="ejb_mdb"> <ejb-name>mdb</ejb-name> <ejb-class>cn.com.xinli.ejb.mdb.MDBean</ejb-class> <transaction-type>Bean</transaction-type> <acknowledge-mode>Auto-acknowledge</acknowledge-mode> <message-driven-destination> <destination-type>javax.jms.Queue</destination-type> </message-driven-destination> </message-driven> </enterprise-beans> </ejb-jar>
3. 配置 jboss.xml
<?xml version="1.0" encoding="gb2312"?> <jboss> <message-driven> <ejb-name>mdb</ejb-name> <configuration-name>Standard Message Driven Bean</configuration-name> <!-- 消息驱动bean 监听的消息队列的 JNDI <destination-jndi-name>queue/mdb</destination-jndi-name> --> </message-driven> </enterprise-beans> </jboss>
4. 讲bean 打成jar包 放在 D:\jboss-4.0.4.GA\server\default\deploy 下
5. 在jboss中配置消息队列 也在 D:\jboss-4.0.4.GA\server\default\deploy 下 ,配置文件必须 符合 *-service.xml 的命名规范,这里我们叫 bsn-service.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- $Id: jbossmq-destinations-service.xml,v 1.4.6.1 2004/11/16 04:32:39 ejort Exp $ --> <!-- | This file defines the default Queues and Topics that JBossMQ | ships with. The default Queues and Topics are used by the | JBoss test suite and by the sample jms programs. | | You can add other destinations to this file, or you can create other | *-service.xml files to contain your application's destinations. --> <server> <!-- Destination without a configured SecurityManager or without a a SecurityConf will default to role guest with read=true, write=true, create=false. --> <mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=queueRecordb"> <attribute name="JNDIName">queue/mdb</attribute> <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends> </mbean> </server>
6.发布
7.客户端测试,观察 JBOSS 控制台 会有
09:43:36,156 INFO [MDBean] 接收到消息:你好
package cn.com.xinli.ejb.test; import java.util.Properties; import javax.jms.Destination; import javax.jms.MessageProducer; import javax.jms.QueueConnection; import javax.jms.QueueConnectionFactory; import javax.jms.QueueSession; import javax.jms.TextMessage; import javax.naming.InitialContext; import org.apache.log4j.Logger; public class Test { static Logger log=Logger.getLogger(Test.class); /** * @param args */ public static void main(String[] args) { Properties props = new Properties(); props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory"); props.setProperty("java.naming.provider.url", "localhost:1099"); props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming"); try { InitialContext ctx = new InitialContext(props); QueueConnectionFactory factory=(QueueConnectionFactory)ctx.lookup("QueueConnectionFactory"); QueueConnection conn=factory.createQueueConnection(); QueueSession session=conn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE); Destination destination=(Destination)ctx.lookup("queue/mdb"); MessageProducer producer = session.createProducer(destination); TextMessage msg = session.createTextMessage("你好"); producer.send(msg); log.info("发送消息成功!!"); /* Object objRef = ctx.lookup("helloEJB"); HelloWorldHome home = (HelloWorldHome) PortableRemoteObject.narrow(objRef, HelloWorldHome.class); HelloWorldRemote remote = home.create(); log.info(remote.sayHello()); */ } catch (Exception ex) { ex.printStackTrace(); } } }
备注:
1. 许多教程上说 必须要到 D:\jboss-4.0.4.GA\server\default\deploy 配置一个 消息队列 类似 bsn-service.xml
其实这不是必要的
如果我们没有配置 a ,b
a. <!-- 消息驱动bean 监听的消息队列的 JNDI-->
<destination-jndi-name>queue/mdb</destination-jndi-name>
b. 也没有配置 bsn-service.xml 那么JBOSS启动的时候发现没有队列和消息驱动bean 关联,则它会自己创建一个消息队列 ,这个消息对列的命名规范 是 : queue/消息驱动bean的jndi
客户端就可以往这个队列 上发送消息。
2. 如果我们配置了 消息驱动bean 关联的队列 和 JBosS下的 bsn-service.xml ,那么我们就可以使用自定义的 队列的JNDI了 比如
a. 配置 mdb 这个消息驱动bean 监听的 对列的JNDI 为
<destination-jndi-name>myqueue</destination-jndi-name>
b.配置 bsn-service.xml的内容为
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: jbossmq-destinations-service.xml,v 1.4.6.1 2004/11/16 04:32:39 ejort Exp $ -->
<!--
| This file defines the default Queues and Topics that JBossMQ
| ships with. The default Queues and Topics are used by the
| JBoss test suite and by the sample jms programs.
|
| You can add other destinations to this file, or you can create other
| *-service.xml files to contain your application's destinations.
-->
<server>
<!-- Destination without a configured SecurityManager or without a
a SecurityConf will default to role guest with read=true, write=true,
create=false.
-->
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.mq.destination:service=Queue,name=queueRecordb">
<attribute name="JNDIName">myqueue</attribute>
<depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
</mbean>
</server>
那么客户端就可以往 我们自定义的 队列的JDNI上 myqueue 发送消息了
3. 在JBOSS中有两个默认的工厂 一个是 QueueConnectionFactory
另外一个是 TopicConnectionFactory ,这两个工厂是由JBOSS容器帮我们建立的 ,不需要我们去配置,而在websphere 上建立消息驱动bean的时候 就需要我们配置 连接工厂了
4. 以上模拟的的消息驱动bean 是队列模式 ,主题模式何其类似
附件中式 全部的工程代码
- ejb2test.rar (315.6 KB)
- 下载次数: 58
发表评论
-
本地客户端调用 websphere6.1 ejb资源 解决方案
2011-01-21 12:25 1822开发环境: 中我们都是在jboss4.0上部署ejb2. ... -
ejb2.0用本地引用提高EJB访问效率
2009-12-24 15:21 3030用本地引用提高EJB访问效率 EJB 1 ... -
ejb3.0 跨平台,跨JVM调用出现的问题及解决方案
2009-11-09 21:58 2360首先 ... -
ejb3 定时器开发
2009-10-28 08:35 3787定时服务用作在一段特定的时间后执行某段程序 ... -
ejb3 第12讲 --开发EJB容器模型的WEB服务
2009-08-05 08:04 3915JAX-WS JAX-WS规范是一组XML web ... -
ejb3 第10讲 --开发单表映射的实体bean
2009-08-02 23:29 1528目的:使用ejb3 ... -
ejb3 第9讲 --配置jboss数据源
2009-08-02 20:19 1131这个比较简单: 去$JBOSS_HOME\ ... -
ejb3 第8讲 --通过注解方式注入并使用其他EJB或者服务
2009-07-08 08:02 3283情景:有两个bean,一个是HelloWorldBean ... -
ejb3 第7讲 --开发有状态bean
2009-07-05 21:21 1428用 @Stateful 注解的方式表明 bean是有状态 ... -
ejb3 第6讲--开发具有本地接口的无状态bean
2009-07-03 07:01 2858理解: 1.当ejb的服务器端和客户端 ... -
ejb3 第5讲--通过ANT提高EJB应用的开发效率
2009-07-02 22:10 1460<?xml version="1.0" ... -
ejb3 第4讲--把jboss集成进eclipse
2009-06-29 22:45 1290这个比较简单,就不多说了 -
ejb3.0 第2,3讲-开发第一个无状态会话bean和客户端
2009-06-29 22:11 1700ejb中的3种bean: 什么是会话bea ... -
ejb3.0第11讲 --开发消息驱动bean
2009-06-24 08:23 2633概念: 1.java ... -
ejb3.0 --第1讲下载安装运行JBOSS
2009-06-24 07:08 16151.下载地址:jboss4.2.3http://www. ... -
ejb2.0 HelloWord
2008-09-27 07:38 7997中国电信网上营业厅项目是使用ejb2.0开发的,在项目中 ...
相关推荐
本篇文章将详细介绍如何下载与安装JBoss 4.0.4.GA版本,并配置必要的环境变量,以及进行基本的功能验证。 #### 二、下载 首先,我们需要从官方源或可靠的第三方资源下载JBoss 4.0.4.GA的安装包。根据提供的部分内容...
2. **EJB 3.0**:JBoss 4.0.5.GA实现了EJB 3.0规范,简化了Enterprise JavaBeans的开发,通过注解(Annotation)可以轻松地声明bean的属性,无需XML配置文件,提高了开发效率。 3. **JPA**:这一版本引入了JPA作为...
**企业级JavaBeans (EJB) 2.0 实体Bean详解** EJB(Enterprise JavaBeans)是Java EE(Enterprise Edition)平台的核心组件之一,它为构建可部署在服务器端的分布式应用程序提供了一种框架。EJB 2.0是EJB规范的一个...
1. **EJB容器**:JBoss 4.2.3.GA支持EJB 3.0规范,简化了企业级组件的开发,允许开发者通过注解来定义bean的行为,无需XML配置。 2. **JMS支持**:集成JMS服务,允许应用进行异步通信和消息队列处理,提供高可用性...
EJB2.0作为其一个重要版本,引入了许多特性,如会话bean、实体bean和消息驱动bean,以及容器管理持久性(CMP)等。本实例开发将深入探讨EJB2.0的核心概念,特别是会话bean的实例化与使用。 1. **会话Bean(Session ...
2. **EJB 3.0**:企业JavaBean(EJB)3.0是Java EE 5中的核心部分,简化了EJB的使用,引入了无状态会话bean、有状态会话bean和实体bean的概念,以及注解驱动的编程模型,使得开发更为简洁。 3. **Java Persistence ...
2. **Message-driven Beans (MDB)**:EJB2.0引入了消息驱动Bean,这是一种特殊类型的session Bean,用于处理JMS(Java Message Service)消息。MDB使得异步处理和解耦通信成为可能,提高了系统的可扩展性。 3. **...
EJB2.0是EJB技术的一个里程碑,引入了会话bean、实体bean和消息驱动bean的概念,以及容器管理的持久性(CMP)和bean管理的持久性(BMP)。 2. **env.bat和startWebLogic.bat**:这两个文件通常是与Oracle WebLogic ...
- **消息驱动Bean(Message-driven Beans,MDB)**:用于处理JMS(Java Message Service)消息,是异步处理的好选择。 - **实体Bean(Entity Beans)**:代表持久化数据,分为容器管理的持久性(CMP)和bean管理的...
EJB2.0规范主要包含三种类型的组件:会话Bean(Session Beans)、实体Bean(Entity Beans)和消息驱动Bean(Message-Driven Beans)。这些组件提供了业务逻辑的封装,使得开发者能够专注于业务处理,而不是底层的...
- **EJB 3.0**:增强了消息驱动Bean的功能,使其能够更灵活地处理异步消息传递。 - **EJB 3.0**:引入了新的注解,如`@Stateless`、`@Stateful`、`@Singleton`等,使得EJB的类型和行为更加明确。 - **EJB 3.0**:...
1. **安装**:用户可以通过下载解压`jbos-4.2.2.GA`压缩包,然后根据需要配置环境变量,如JAVA_HOME和JBOSS_HOME。 2. **启动与停止**:使用`bin/run.sh`(Linux/Unix)或`bin/run.bat`(Windows)脚本启动服务器,...
EJB 2.0的核心概念包括会话bean、实体bean和消息驱动bean,它们各自承担不同的职责,共同构建出强大的后端系统。 1. **会话Bean**: 会话Bean代表了客户端与服务器之间的交互逻辑,可以理解为业务服务。它们分为无...
2. 消息驱动Bean(Message-Driven Beans,MDB):这是EJB2.0引入的新特性,主要用于处理JMS(Java Message Service)消息。MDB充当消息消费者,自动接收和处理来自消息队列的消息,简化了异步处理和解耦设计。 3. ...
EJB 2.0 主要由三种类型的组件组成:Entity Beans(实体Bean)、Session Beans(会话Bean)和Message Driven Beans(消息驱动Bean)。实体Bean用于表示数据库中的持久化对象,会话Bean用于处理业务逻辑,而消息驱动...
EJB 2.0的核心目标是提供一种标准的、面向对象的方法来构建企业级应用,它定义了三个主要组件类型:会话bean(Session Beans)、实体bean(Entity Beans)和消息驱动bean(Message-Driven Beans)。这些组件可以在...
【描述】中提到的四个jar文件——`jboss-jaxws.jar`、`jboss-jaxws-ext.jar`、`jboss-jaxrpc.jar`和`jboss-saaj.jar`,都是针对Web服务(WebService)的关键组件,它们对于在JBoss 4.2.3.GA环境中运行Web服务至关...
### EJB2与EJB3消息驱动Bean:深入解析与应用 #### 一、EJB2消息驱动Bean ##### 1. **理解消息驱动Bean(MDB)** 消息驱动Bean是Java EE中用于处理异步消息的一种特殊类型的EJB。在EJB2中,MDB主要用于接收来自消息...