- 浏览: 1590469 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
//-----------------------JMS 消息服务 java message service
一个message由三个部分组成
消息的传递模型
开始开发 --> 配置目标队列地址 -->开发消息发送类--->消息接受类
jboss 5.0 是需要个*-service.xml这个一个xml文件来配置目标队列地址.
编写好后,拷贝到E:\jboss-6.0.0.Final\server\default\deploy 这就发布了
--> 经过上面发布好后 就可以在jmx-console就可以看到了
http://localhost:8989/jmx-console/jboss.mq.destination 中可以看到刚配置JNDI名称
jboss 6.0 就不需要了,在
E:\jboss-6.0.0.Final\server\default\deploy\hornetq\hornetq-jms.xml 只需要配置一个 queue topic 这个两个标签实体
--> 经过上面发布好后 就可以在jmx-console就可以看到了
http://localhost:8989/jmx-console/org.hornetq
开发 PTP 消息发送对象类
开发PUB/SUB 消息发送对象
//注意 实现 MessageListener 这个监听接口
开发 queue消息驱动bean 去读取消息 (一当被部署到jboss服务器中就会去读取是否有queue类型的消息)
开发 Topic消息驱动bean 去读取消息 (需要监听先存在,然后发送的消息才会被监听到.)
---jndi.properties
--Ant 文件 build
java消息服务 java messae service 简称 JMS ,用于访问企业消息系统的中立的API,说白了就是一组API. 企业消息系统可以协助应用软件通过网络进行消息交互. JMS(编程)简单概括为应用程序A发送一条消息到消息的服务器的某个目的Destination,然后消息服务把消息发送给应用程序B,因为应用程序A和应用程序B,没有直接的代码关联.所以两者实现了解耦.
一个message由三个部分组成
头部 heand , 属性 (property) , 主体 body 消息类型 都派生自Message接口 StreamMessage:一种主体中包含Java元值流的信息,其填充和读取均按顺序进行, MapMessage:主体包含 组名----值对.没有定义条目顺序 TextMessage: 包含java字符串的信息 例如 XML信息 ObjectMessage:主体包含序列化Java对象的信息 BytesMessage:连续字节流的消息
消息的传递模型
传递模型: 点对点 :point-to-point PTP 发布/订阅: publish/subscribe 简称 PUB/SUB 两种区别如下: PTP: 规定了一条消息只能传递给一个接受方,目标类型采用javax.jms.Queue 表示 PUB/SUB: 允许 一条消息传递给多个接受方,目标类型采用java.jms.Topic表示 这两种模型都通过扩展公用基类来实现,例如 java.jms.Queue 和java.jmx.Topic 都扩展自java.jms.Destination 类
开始开发 --> 配置目标队列地址 -->开发消息发送类--->消息接受类
jboss 5.0 是需要个*-service.xml这个一个xml文件来配置目标队列地址.
编写好后,拷贝到E:\jboss-6.0.0.Final\server\default\deploy 这就发布了
<!-- <attribute name="JNDIName">属性制定了目标地址的全局JNDI名称, 默认全局JNDI名称(如果不制定JNDIName属性) jboss会为你生成一个默认全局JNDI名称有 "queue/" +目标地址的名称组成 使用之前都必须<depends> 部署应用该服务器DestinationManager --> <?xml version="1.0" encoding="UTF-8"?> <server> <mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=jmsQueue"> <attribute name="JNDIName">queue/jmsQueue</attribute> <depends optional-attribute-name="DestinationManager"> jboss.mq:service=DestinationManager </depends> </mbean> <mbean code="org.jboss.mq.server.jmx.Topic" name="jboss.mq.destination:service=Topic,name=jmsTopic"> <attribute name="JNDIName">topic/jmsTopic</attribute> <depends optional-attribute-name="DestinationManager"> jboss.mq:service=DestinationManager </depends> </mbean> </server>
--> 经过上面发布好后 就可以在jmx-console就可以看到了
http://localhost:8989/jmx-console/jboss.mq.destination 中可以看到刚配置JNDI名称
jboss 6.0 就不需要了,在
E:\jboss-6.0.0.Final\server\default\deploy\hornetq\hornetq-jms.xml 只需要配置一个 queue topic 这个两个标签实体
<queue name="DLQ"> <entry name="/queue/DLQ"/> </queue> <queue name="ExpiryQueue"> <entry name="/queue/ExpiryQueue"/> </queue> <topic name="testTopic"> <entry name="/topic/topicA"/> </topic>
--> 经过上面发布好后 就可以在jmx-console就可以看到了
http://localhost:8989/jmx-console/org.hornetq
开发 PTP 消息发送对象类
package com.sh.app; import javax.jms.Destination; import javax.jms.MessageProducer; import javax.jms.QueueConnection; import javax.jms.QueueConnectionFactory; import javax.jms.QueueSession; import javax.naming.InitialContext; public class QueueSender { public static void main(String [] args){ try { //初始化JNDI上下文 InitialContext ctx=new InitialContext(); //根据上下文查找连接工厂该工厂有JMS提供,不需要我们自己创建,每个厂商都为他绑定了一个全局的JDNI,通过他就可以获取 QueueConnectionFactory factory=(QueueConnectionFactory)ctx.lookup("ConnectionFactory"); //注意 jboss5.0 为 ctx.lookup("QueueConnectionFactory"); //ConnectionFactory cf = (ConnectionFactory) ctx.lookup("ConnectionFactory"); QueueConnection conn=factory.createQueueConnection(); //根据连接得到会话 QueueSession session=conn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE); //获取目标地址 Destination destination=(Destination)ctx.lookup("/queue/DLQ"); //获取消息的发送者 MessageProducer producer=session.createProducer(destination); producer.send(session.createTextMessage("你好,JMS我来了,Queue!")); session.close(); conn.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
开发PUB/SUB 消息发送对象
package com.sh.app; import javax.jms.Destination; import javax.jms.MessageProducer; import javax.jms.QueueSession; import javax.jms.TopicConnection; import javax.jms.TopicConnectionFactory; import javax.jms.TopicSession; import javax.naming.InitialContext; public class TopicSender { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub try { //初始化JNDI上下文 InitialContext ctx=new InitialContext(); //根据上下文查找连接工厂该工厂有JMS提供,不需要我们自己创建,每个厂商都为他绑定了一个全局的JDNI,通过他就可以获取 TopicConnectionFactory factory=(TopicConnectionFactory)ctx.lookup("ConnectionFactory"); //注意 jboss5.0 为 ctx.lookup("TopicConnectionFactory"); //ConnectionFactory cf = (ConnectionFactory) ctx.lookup("ConnectionFactory"); // jboss6.0 TopicConnection conn=factory.createTopicConnection(); //根据连接得到会话 TopicSession session=conn.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE); //获取目标地址 Destination destination=(Destination)ctx.lookup("/topic/topicA"); //获取消息的发送者 MessageProducer producer=session.createProducer(destination); producer.send(session.createTextMessage("你好,JMS我来了,Topic")); session.close(); conn.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
//注意 实现 MessageListener 这个监听接口
开发 queue消息驱动bean 去读取消息 (一当被部署到jboss服务器中就会去读取是否有queue类型的消息)
package com.sh.message; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; @MessageDriven(activationConfig={ @ActivationConfigProperty( propertyName="destinationType", propertyValue="javax.jms.Queue" ), @ActivationConfigProperty( propertyName="destination", propertyValue="/queue/DLQ" ) }) //jboss 6.0 目标地址类型有"/" 开头 //jboss 5.0 没有 "/" 默认为 "queue/地址名称" 地址名称==*-sercie.xml中配置的 public class MessageDrivenBean implements MessageListener { @Override public void onMessage(Message message) { // TODO Auto-generated method stub try { //消息发送者是什么类型就转换成什么类型 TextMessage msg=(TextMessage)message; System.out.println(msg.getText()); } catch (JMSException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
开发 Topic消息驱动bean 去读取消息 (需要监听先存在,然后发送的消息才会被监听到.)
//第一个 topic 消息 package com.sh.message; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; @MessageDriven(activationConfig={ @ActivationConfigProperty( propertyName="destinationType", propertyValue="javax.jms.Topic" ), @ActivationConfigProperty( propertyName="destination", propertyValue="/topic/topicA" ) }) public class ReceiveBean implements MessageListener { @Override public void onMessage(Message message) { // TODO Auto-generated method stub try { TextMessage msg=(TextMessage)message; System.out.println(this.getClass()+msg.getText()); } catch (JMSException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } //第二个类 package com.sh.message; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; @MessageDriven(activationConfig={ @ActivationConfigProperty( propertyName="destinationType", propertyValue="javax.jms.Topic" ), @ActivationConfigProperty( propertyName="destination", propertyValue="/topic/topicA" ) }) public class ReceiveOtherBean implements MessageListener { @Override public void onMessage(Message message) { try { TextMessage msg=(TextMessage)message; System.out.println(this.getClass()+msg.getText()); } catch (JMSException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
---jndi.properties
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.provider.url=localhost:1099
--Ant 文件 build
<?xml version="1.0" encoding="UTF-8"?> <!-- ====================================================================== 2013-2-25 下午1:53:33 project description Bin ====================================================================== --> <project name="MessageDrivenBean" basedir="."> <description> description </description> <!-- 设置项目原目录 --> <property name="src.dir" value="${basedir}\src" /> <!-- 获取环境变量 --> <property environment="env"/> <property name="jboss.home" value="${env.JBOSS_HOME}"/> <property name="jboss.server.config" value="default"/> <property name="build.dir" value="${basedir}\build"/> <!-- 引入 jboss client 下的 所有jar --> <path id="build.classpath"> <fileset dir="${jboss.home}\client"> <include name="*.jar"/> </fileset> <!-- 讲编译过后的路径加入到 path中去 方便 接口和实现的引用 --> <pathelement location="${build.dir}"/> </path> <target name="prepare" description="创建build目录"> <delete dir="${build.dir}"/> <mkdir dir="${build.dir}"/> </target> <!-- - - - - - - - - - - - - - - - - - target: compile - - - - - - - - - - - - - - - - - --> <target name="compile" depends="prepare" description="编译"> <javac srcdir="${src.dir}" destdir="${build.dir}" includeantruntime="false" includes="com/**"> <classpath refid="build.classpath"/> </javac> </target> <!-- ================================= target: ejbjar ================================= --> <target name="ejbjar" depends="compile" description="创建EJB发布包"> <jar jarfile="${basedir}\${ant.project.name}.jar"> <fileset dir="${build.dir}"> <include name="**/*.class"/> </fileset> </jar> </target> <!-- ================================= target: deploy ================================= --> <target name="deploy" depends="ejbjar" description="发布EJB"> <copy file="${basedir}\${ant.project.name}.jar" todir="${jboss.home}\server\${jboss.server.config}\deploy"/> </target> <!-- - - - - - - - - - - - - - - - - - target: undeploy - - - - - - - - - - - - - - - - - --> <target name="undeploy" description="卸载EJB"> <delete file="${jboss.home}\server\${jboss.server.config}\deploy\${ant.project.name}.jar"/> </target> </project>
发表评论
-
EJB容器模型的WebService服务
2013-02-28 22:52 1656---WEB服务 WEB服务市一种分布式技术,它与EJB最 ... -
WebService 之 EJB容器模型
2013-02-27 23:24 6---WEB服务 WEB服务市一种分布式技术,它与EJB最 ... -
Entity Bean的开发 和 Jboss 数据源的配置
2013-02-27 21:23 2883//-------------- 实体bean 的 ... -
EJB 会话bean and Jboss JNDI
2013-02-25 23:53 2362下面案例使用的环境 myeclipse.10.1 j ...
相关推荐
在EJB中,消息驱动bean(Message-Driven Bean,MDB)是一种特殊类型的bean,它用于处理来自消息中间件(如JMS,Java Message Service)的消息。在这个“EJB消息驱动bean Demo”中,我们将深入探讨EJB MDB和JMS如何...
【标题】:“ejb2.0消息驱动bean的开发(JBOSS4.0.4.GA 环境)” 在Java企业版(Java EE)的早期版本中,EJB(Enterprise JavaBeans)2.0是核心组件之一,用于构建分布式、事务处理和面向服务的业务应用程序。消息...
### EJB2与EJB3消息驱动Bean:深入解析与应用 #### 一、EJB2消息驱动Bean ##### 1. **理解消息驱动Bean(MDB)** 消息驱动Bean是Java EE中用于处理异步消息的一种特殊类型的EJB。在EJB2中,MDB主要用于接收来自消息...
**消息驱动Bean (Message Driven Bean, MDB) 是企业级JavaBeans (Enterprise JavaBeans, EJB) 3.0 规范中引入的一种组件模型,主要用于处理异步消息通信。在分布式应用程序中,MDB 提供了一种高效且解耦的方式来处理...
2. **实体Bean**:实体Bean是EJB的三大类型之一(另外两种是会话Bean和消息驱动Bean)。实体Bean通常用于表示数据库中的实体,它们有持久化状态,并且可以通过其唯一的键(主键)进行识别。在购物车应用中,可能包含...
### Java EE 5 学习笔记06:EJB之消息驱动Bean总结 #### EJB 消息驱动 Bean (Message Driven Bean, MDB) 在Java EE 5中,消息驱动Bean(MDB)是一种特殊的EJB组件,它主要用于处理异步消息。MDB能够接收并处理由...
本篇主要关注Jboss服务器下的EJB开发,特别是消息驱动Bean(Message Driven Bean, MDB)的应用。消息驱动Bean是EJB的一种类型,它专门用于处理异步消息,通常是通过Java Message Service (JMS) API来实现的。 首先...
在JBoss这样的应用服务器中,EJB提供了三种主要的bean类型:实体Bean(Entity Bean)、会话Bean(Session Bean)和消息驱动Bean(Message-Driven Bean)。下面将详细探讨这三种bean的开发模式。 1. 实体Bean...
消息驱动Bean(Message Driven Bean,MDB)是Java EE(Enterprise Edition)平台中的一种特殊类型的Enterprise JavaBean(EJB),主要用于处理消息队列中的消息。MDBs是异步的,这意味着它们不会直接与客户端交互,...
本讲将深入探讨EJB 3.0中的消息驱动Bean(Message Driven Bean,MDB),这是一种特殊类型的EJB,专门设计用于处理JMS(Java Message Service)消息。 消息驱动Bean的主要功能是异步接收和处理消息。这使得应用程序...
本篇文章将深入探讨EJB实体Bean的概念、其在Eclipse集成开发环境中的使用,以及与MySQL数据库的集成。 ### 一、EJB实体Bean概述 EJB实体Bean是Java EE应用服务器管理的对象,它们负责处理数据存储和检索。实体Bean...
在实践中,EJB2 SessionBean通常与EntityBean(持久化实体)和Message Driven Bean(消息驱动bean)配合使用,构建完整的Java EE应用程序。EntityBean处理数据库操作,SessionBean执行业务逻辑,而Message Driven ...
消息驱动Bean(Message Driven Bean,MDB)是Java EE(Enterprise Edition)平台中的一种特殊类型的Enterprise JavaBean(EJB),主要用于处理异步消息通信。在WebLogic服务器中配置MDB,可以使得应用程序能够接收并...
在Java 2企业版(J2EE)框架中,EJB(Enterprise JavaBeans)是服务器端的组件模型,主要分为三种类型:实体Bean(Entity Beans)、会话Bean(Session Beans)和消息驱动Bean(Message-Driven Beans)。实体Bean代表...
4. 注解驱动的实体Bean开发 5. 数据库关系映射 6. EJB本地接口与业务方法 7. JPA和数据源配置 8. 部署与管理 以上就是在JBoss下开发EJB应用,特别是实体Bean应用的基本流程和关键知识点。通过这个过程,开发者可以...
**企业级JavaBeans (EJB) 3.0:核心概念与Session Bean详解** 企业级JavaBeans(Enterprise JavaBeans,...在深入学习EJB 3.0之前,建议阅读"**EJB3.0开发Session Bean.pdf**"这个文档,它将提供更详细的指导和实例。
本文将围绕EJB3.0的三大核心组件——实体Bean(Entity Bean)、会话Bean(Session Bean)和消息驱动Bean(Message Driven Bean)进行详细介绍。 ### 1. 实体Bean(Entity Bean) 实体Bean是EJB3.0中的持久化组件,...
- **注解驱动**:EJB3.0引入了注解,使得开发者无需编写XML配置文件,可以直接在类和方法上添加注解来定义Bean的行为。例如,`@Stateless` 注解用于声明一个类为无状态SessionBean。 - **依赖注入**:通过`@EJB`...