jboss5+EJB3+MDB Queue

在使用jboss5进行MDB的试验时首先要在jboss5中配置jms 队列。

1)在jboss安装目录下:server\default\deploy\messaging

打开destinations-service.xml文件,加入:

<mbean code="org.jboss.jms.server.destination.QueueService"
      name="jboss.messaging.destination:service=Queue,name=ExpiryQueue"
      xmbean-dd="xmdesc/Queue-xmbean.xml">
      <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
      <depends>jboss.messaging:service=PostOffice</depends>
</mbean>  

启动jboss5,进入http://localhost:8080/jmx-console/(需要事先设置用户名、密码)

在右侧界面点击 service=JNDIViews  ---->  点击List对应的invoke按钮,若出现下图对应的Queue JNDI配置则表示jms Queue队列配置成功

2)编写MDB

java代码如下:

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/ExpiryQueue")
        }
)
public class MyQueueMDBBean implements MessageListener {

    public void onMessage(Message arg0) {
        try {
            TextMessage tm = (TextMessage) arg0;
            System.out.println("MDB接收到一个消息=" + tm.getText());
        } catch (JMSException e) {

            e.printStackTrace();
        }

    }
}

3)客户端编写

java代码如下:(需要引入jboss安装包下client文件夹中的jar文件)

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;

public class Point2PClient {

    public static void main(String[] args) throws Exception {
        Context context = new InitialContext();
        ConnectionFactory factory = (ConnectionFactory) context
                .lookup("ConnectionFactory");
        Queue queue = (Queue) context.lookup("queue/ExpiryQueue");
        Connection connection = factory.createConnection();

        Session session = connection.createSession(false,
                QueueSession.AUTO_ACKNOWLEDGE);

        TextMessage msg = session.createTextMessage("这是一个文本:####pppppp");

        MessageProducer sender = session.createProducer(queue);

        sender.send(msg);

        session.close();
        connection.close();

        System.out.println("+++++Success");
    }

}

配置文件如下:(需放置在工程的src下)

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost

4)运行结果如下:

注意事项:

1.javax.naming.NameNotFoundException: mytopic not bound 

  出现该异常表示你的jms队列配置错误,或EJB和客户端中的jms队列写错

2.Toipc队列的配置和使用方式与Queue方式类似,可以试着尝试将上述代码中的Queue改为Topic进行尝试

时间: 2024-12-15 22:48:31

jboss5+EJB3+MDB Queue的相关文章

jboss8+EJB3+MDB Queue

1)在使用jboss8即WildFly进行MDB的试验时首先要在jboss8中配置jms 队列. 我使用的是修改配置文件的方式配置Jms Queue队列. 进入jboss8 安装目录的standalone\configuration文件夹下: 因为使用的是standalone-full.xml文件,所以将该文件的文件名修改为standalone.xml 搜索该文件下<hornetq-server>节点,在该节点内的末尾处加入: <jms-destinations> <jms-

记录在Sungard工作时对ejb3.1的研究(2)--ejb3 集群(ejb timer/MDB)

以前和人家谈论sungard的工作时,总是被质疑:"你们还在使用ejb啊?太老了吧". "早就是spring的年代了". 我总是反击,你们真的了解ejb吗?了解ejb在分布式应用里集群部署和spring比较有多方便吗?不要总是把什么IOC, AOP肤浅的挂在嘴上, 现在早已不是ejb2的时代了. ejb3 dependency injection也很容易,除了在非javaee容器管理的资源里受限(需要借助javaee6 CDI). AOP?ejb也有intercep

EJB3.0中的session bean以及MDB解析

大型业务系统面临的主要问题就是高并发性和事务访问,客户端的数量与服务器端的分布式对象数量存在一定程度的正比关系,客户端数量越多,服务器端分布式对象也就越多,如何解决这种高并发的问题也就成了企业级架构首先要解决的问题.EJB作为一种服务器端分布式组件,为我们提供了应对策略. EJB提供了两种管理大量分布式对象的策略:实例池化和激活.下面分别对EJB组件模型中的三种模型进行一些分析. 第一种:无状态的会话Bean(Stateless session bean) Stateless session b

一个基于JBoss5.1+EJB3.0 登陆应用

花了几天的时间研究了一下EJB的使用,一直以来都主要是在写终端中的程序,对Java框架的相关的开发很不熟悉,中间遇到了不少麻烦,还好总算都解决了.写篇日志记录一下. 经验总结 为什么选择JBoss5.1: 从8开始最新的jboss已经改名为WildFly了,jboss5还是09年的东西.刚开始的时候我准备用WildFly部署EJB的,因为没有经验而且相关的资料很少.只能换用更老一点的Jboss5 如何打包发布: ejb的发布非常简单,只要将打包好的代码(jar,ear,war -.)复制到 ==

EJB3 阶段总结+一个EJB3案例 (1)

经过一段时时间的学习,对EJB3的相关知识和jboss8的配置有了大概的了解. 网上对EJB的评论很多,基本都是负面的,都表示EJB太过于沉重,不容易维护.但通过这段时间的学习,私下认为,EJB3在某些应用场景下还是有许多的可取之处的. 1)EJB3摒弃了EJB2中许多不合理的设计,引入了注解,通过注解的方式来注入对象(@EJB),越来越向无侵入式的架构发展. 2)EJB3使用了JPA的方式替代原有的持久化框架.JPA是一种通过注解的方式和数据库建立连接的框架,与hibernate4相似 3)在

EJB3.0

由于EJB2.0的复杂性,在Spring和Hibernate[1]  等轻量级框架出现后,大量的用户转向应用轻量级框架.在大家的呼声中, EJB 期待已久的EJB3.0规范终于发布了.在本文中将对新的规范进行一个概要性的介绍,包括新增的元数据支持,EJBQL的修改,实体Bean模型访问bean上下文的新方法和运行时环境等等.作者还讨论了EJB在未来要作出的调整以及EJB3.0与其他开发规范之间的关系. 开始 无论如何由于EJB的复杂性使之在J2EE架构中的表现一直不是很好.EJB大概是J2EE架

EJB3

Ejb概念 Ejb3.0定义了很多Annotation,覆盖了众多与持久化相关的概念,比如Bean的类型,依赖注入,事务管理,安全,回调,O-R映射,关系等等 Ejb的几个特性 依赖注入(DI) 通过定义@Inject,@EJB,@Resource等annotation,这些依赖关系现在可以由容器来注入到EJB 可选的回调机制 开发者们现在可以仅仅实现他们感兴趣的那些回调方法了,通过定义@PostConstruct.@PreDestroy,@PrePersist或者PostPersist.开发者

EJB3.0 EJB开发消息驱动bean

(7)EJB3.0 EJB开发消息驱动bean JMS 一: Java消息服务(Java Message Service) 二:jms中的消息 消息传递系统的中心就是消息.一条 Message 由三个部分组成:             头(header),属性(property)和主体(body). 消息有下面几种类型,他们都是派生自 Message 接口.           StreamMessage:一种主体中包含 Java 基元值流的消息.其填充和读取均按顺序进行.          

消息驱动bean(MDB)实例

到目前为止前面介绍的有关JavaEE的东西都是同步的,也就是说调用者调用某个方法,那么这个方法必须立即执行并返回执行结果.用官方一些的语言来说就是"客户端通过业务接口调用一个方法,在将控制权返回给客户端之前,服务器完成该方法调用".对于我们接触到的大多数操作而言这是最自然也是最容易实现的方法.然而,有些情况下客户端并不需要等待服务器响应,而只需要告诉服务器应该做什么就可以了,在完成"告知"任务之后客户端能够继续工作,而服务器则默默的在一旁处理客户端的请求(通常会是很