Java EE 中带有 MDB 的管道和过滤器模式

月菊

我正在尝试使用 Java EE 中的消息驱动 Bean 来实现管道和过滤器模式,但我希望以一种队列可配置且 bean 是在运行时创建的方式来实现。这样可以很容易地更改过滤器执行的顺序。

我对 Java EE 真的很陌生,当我过去使用 MDB 时,我总是这样做:

@MessageDriven(mappedName = "jms/myQueue", activationConfig = {
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
})
public class ReceiveMessageBean implements MessageListener {

这对我想要的不起作用。

我正在考虑做一个每个过滤器都可以继承的 bean,这样我就可以将读取和写入队列方法只放在一个地方,就像这样:

public class StepBean {
    public void createBean(String queueRead, String queueWrite) {
        //make the bean listen from queueRead
        //make the bean write to queueWrite
    }
    public void onMessage(Message message){
        //get the message  from queueRead and transform it to my own class
        processMessage(myMessage);
    }

    public void processMessage(MyMessage message){
        //each filter should implement this method 
        sendMessage(myMessage);
    }

    public void sendMessage(MyMessage message){
        //send message to queueWrite
    }
}

然后在我的 ejb 中有某种工厂,它为队列创建具有所需值的步骤 bean。

但我几乎不知道如何做到这一点。我一直在看这个,但是因为我的 bean 都从队列中读取和写入,所以它们并不是严格的 MDB。

我使用的是 GlassFish 4.1.2 和 Netbeans 8.2。

欢迎任何有关如何做到这一点或是否可行的指导。

知识分子的

您不能以编程方式创建 MDB,因为它们必须由服务器管理。如果要创建动态侦听器,请使用MessageConsumersetMessageListener根据您的设置,您需要Connection从某个连接工厂获得访问权限,然后创建会话、消费者和最后的消息侦听器。可以使用消息选择器 = 您的过滤器创建消费者。一个简短的例子:

ConnectionFactory conFactory = (ConnectionFactory) ic.lookup("java:/ConnectionFactory");//customize the jndi to match your server
Connection connection = conFactory.createConnection();
Queue myqueue = ic.lookup("java:/jms/queue/MyQueue");
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
String messageSelector = "MY_MSG_PROPERTY = 'MY_FILTER_VALUE'";
Consumer consumer = session.createConsumer(myqueue, messageSelector);

consumer.setMessageListener(new MessageListener() {
    @Override
    public void onMessage(Message message) {
        //handle you message here
    }
});

使用这种方法,您可以创建多个具有不同过滤器和不同消息侦听器的使用者。但请记住,这些侦听器不是容器管理的,如果您不再需要这些侦听器(关闭会话等),则需要处理资源清理/关闭。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有setRollbackOnly的JMS和MDB

来自分类Dev

使用Java,如何列出和打印MS-Access 2003 mdb文件中的所有查询?

来自分类Dev

管道和过滤器之间有差别吗?

来自分类Dev

非Java EE 5 servlet和Java EE 5 servlet容器之间有什么区别?

来自分类Dev

非Java EE 5 servlet和Java EE 5 servlet容器之间有什么区别?

来自分类Dev

带有IntelliJ和Tomcat的Java-ee REST服务器

来自分类Dev

带有方法调用的Java 8过滤器

来自分类Dev

如何在带有Java EE 7和Glassfish 4的IntelliJ IDEA社区版中创建Java Servlet应用程序?

来自分类Dev

Java中的并行和事务处理(Java EE)

来自分类Dev

Java EE和J2EE有什么区别?

来自分类Dev

在Elixir中使用带有过滤器和映射的管道

来自分类Dev

Java EE和Grails有什么关系

来自分类Dev

Java EE和Grails之间有什么关系

来自分类Dev

Java EE中的依赖注入

来自分类Dev

Java EE中的@Producer批注

来自分类Dev

Java EE中的访问控制

来自分类Dev

Java EE中的@Producer批注

来自分类Dev

Java ee EJB中的服务层和dao层

来自分类Dev

Java ee EJB中的服务层和dao层

来自分类Dev

Java EE,JSP和JSF

来自分类Dev

Eclipse和JAVA EE 7

来自分类Dev

带有Java EE 7 WebSocket的嵌入式tomcat

来自分类Dev

带有接口的Java EE bean未创建用于注入

来自分类Dev

带有JDK Ubuntu Server 12.04的Java EE 7 SDK

来自分类Dev

带有Java EE 7 Websocket的嵌入式tomcat

来自分类Dev

在MDB中控制并发和使用

来自分类Dev

Java中的RGB图像过滤器

来自分类Dev

有什么办法可以像在J2EE应用程序中那样定义http过滤器?

来自分类Dev

带有Maven的Java EE7在org.wildfly.bom和org.jboss.spec之间的区别