问题标签 [message-driven-bean]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3647 浏览

java - 带有数据源的消息驱动 Bean

我的问题是如何配置 EJB 3.0 样式的消息驱动 bean 以在 jboss 中使用已配置的 JMS 数据源。

例如,我的 MDB 看起来像:

但我希望 bean 附加到给定的 JMS 数据源(对于 jboss 4.2.2,这是在 deploy/jms/jms-ds.xml 中)。也许这甚至是不可能的,但值得一问。

0 投票
3 回答
1647 浏览

java - 用于消息驱动 Bean 的 Log4j

所以,这是我的问题:
我有一个消息驱动的 bean X,并且想在 X 的 onMessage() 方法中使用 Logger。假设我在我的应用服务器中运行了一个 bean 实例,因此,我将在 ejbCreate() 中初始化 log4j。这意味着我将不得不做这样的事情:

但是,这无济于事。无论我做什么,我总是将我的流设为空,我尝试了其他版本:this.getClass().getStream() 和 ResourceBundle。

我将我的属性文件打包到 test.jar 中,并将其添加到 EAR 库下(我使用的是 RAD7),它反映在我的 manifest.mf 中。

以前有人遇到过这个问题吗?如果是,您是如何解决的?感谢你的帮助...

0 投票
4 回答
3521 浏览

java - 消息驱动 Bean - 单总线,多激活规范

我有 2 个消息驱动的 bean。这些 bean 的 2 个激活规范。我有一个消息总线,两个激活规范都配置为这一个总线。我为该消息总线配置了 2 个不同的队列和一个队列连接工厂。

现在,我将编写代码,在确定队列后在运行时向其中一个队列发送消息。但是,我的两个 MDB 都会收到相同的消息。这种配置一般是如何完成的?我是否总是配置 1 个队列 -> 1 个队列连接工厂 -> 1 个消息总线 -> 1 个 MDB?都是一对一的关系吗?

哦,我忘了提这个:我使用的是 Websphere Application Server v6.1

0 投票
2 回答
395 浏览

java - 处理 MDB 中的连接错误

是否可以在 MessageDrivenBean 中管理连接超时或错误?

您可以让工厂重试连接一定次数,但是......是否可以在每次需要重新连接重试时进行一些操作?是否可以以某种方式将 ExceptionListener 注册到 MessageDrivenBean 的连接中?

非常感谢。

0 投票
1 回答
176 浏览

java - 是否有任何服务器配置文件来调用 MDB?

我在使用 MDB 的 JMS 应用程序中拥有ejb-jar.xmljboss.xml文件。

我已经在destination-service.xml. 但是我的 MDB 没有调用。

是否有任何服务器文件要配置为调用 MDB?

0 投票
2 回答
1069 浏览

java - 带有 Java 消息队列的消息驱动 Bean

我在部署我的应用程序时遇到以下问题。

它使用 JMS 和远程 openMQ 在服务器之间进行通信。问题是连接不是完全可靠的,所以它可以向上或向下。为了重新连接,我设置了 jms reconnect glassfish 属性,以便在连接丢失时重新连接。当我尝试部署应用程序并且没有连接时出现问题。看起来它一直在重试连接,但应用程序在连接可用之前没有完成部署。

是否可以以任何方式对其进行配置,即使没有连接也可以继续部署并继续重试直到有可用的连接?

非常感谢。

编辑:我正在尝试在不同的线程中运行 MDB 初始化。我都试过了

我正在尝试通过更改 sun-ejb.jar.xml 的两种方式为 MDB 分配不同的线程

并且还与

但我没有运气。看起来它正在等待该线程结束,因为它看起来正在获取新线程,但它等待该线程结束以完成启动应用程序,所以在我的情况下,应用程序没有正确部署..

编辑 2我也尝试在不同的线程中运行 jms 服务......

也没有运气。

0 投票
1 回答
2132 浏览

architecture - 基于 EJB3 的应用程序的最佳通信模式是什么?

我正在启动一个需要高度可扩展的 Java EE 项目。到目前为止,这个概念是:

  • 几个 Message Driven Bean,负责架构的不同部分
  • 每个 MDB 都注入一个 Session Bean,处理业务逻辑
  • 几个实体 Bean,提供对持久层的访问
  • 通过 JMS 消息通过请求/回复概念在架构的不同部分之间进行通信:
    • MDB 接收到包含活动请求的 msg
    • 使用其会话 bean 执行必要的业务逻辑
    • 将 msg 中的响应对象返回给原始请求者

这个想法是,通过消息总线将架构的各个部分相互分离,对可扩展性没有限制。只需启动更多组件——只要它们连接到同一条总线,我们就可以不断增长。

不幸的是,我们在请求-回复概念上遇到了很多问题。Transaction Mgmt 似乎阻碍了我们的工作。似乎会话 bean 不应该使用消息?!

阅读http://blogs.oracle.com/fkieviet/entry/request_reply_from_an_ejbhttp://forums.sun.com/message.jspa?messageID=10338789,我觉得人们实际上反对请求/回复概念EJB。

如果是这种情况,您如何EJB 之间进行通信?(请记住,可扩展性是我所追求的)

我当前设置的详细信息:

  • MDB 1 'TestController',使用(本地)SLSB 1 'TestService' 进行业务逻辑
  • TestController.onMessage() 使 TestService 向队列 XYZ 发送消息并请求回复
    • TestService 使用 Bean 托管事务
    • TestService 在初始化时通过联合连接工厂建立到 JMS 代理的连接和会话(@PostConstruct)
    • TestService 在发送后提交事务,然后开始另一个事务并等待 10 秒的响应
  • 消息到达 MDB 2 'LocationController',它使用(本地)SLSB 2 'LocationService' 进行业务逻辑
  • LocationController.onMessage() 使 LocationService 将消息发送请求的 JMSReplyTo 队列
    • 相同的 BMT 概念,相同的 @PostConstruct 概念
  • 都使用相同的连接工厂来访问代理

问题:第一条消息被发送(通过 SLSB 1)和接收(通过 MDB 2)正常。返回消息的发送(通过 SLSB 2)也很好。然而,SLSB 1 从不接收任何东西——它只是超时。

我试过没有messageSelector,没有变化,仍然没有收到消息。

通过会话 bean 消费消息不好吗?

SLSB 1 - TestService.java

SLSB 2 - LocationService.Java(只有回复方式,其余同上)

太阳资源.xml

0 投票
1 回答
3384 浏览

glassfish - 在 Glassfish 上创建 JMS 队列时出现问题

使用 JMS 生产者和消费者部署我的应用程序时出现以下错误

我使用了以下注释:

Producer

然后我创建连接并在发送消息之前启动它

Consumer

0 投票
1 回答
826 浏览

glassfish - 如何在 Glassfish 运行时更改特定的 MDB 最大池大小

我希望能够在运行时更改 max-pool-size 值。目前我必须修改 xml 并重新启动 Glassfish。

有任何想法吗?

0 投票
1 回答
6123 浏览

servlets - 在 servlet 中注入 jms 资源和 MDB 的最佳实践

使用 ejb 3.1、servlet 3.0(glassfish 服务器 v3)

场景:我有侦听 jms 消息并将处理交给其他会话 bean(无状态)的 MDB。Servelet 注入 jms 资源。

问题一:为什么servlet在使用静态声明时不能注入jms资源?

我得到的错误是:

[#|2010-05-03T15:18:17.118+0300|警告|glassfish3.0|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=35;_ThreadName=Thread-1;| StandardWrapperValve [WorkerServlet]:PWC1382:为 servlet WorkerServlet com.sun.enterprise.container.common.spi.util.InjectionException 分配异常:在 com.sun 为类 ua.co.rufous.server.services.WorkerServiceImpl 创建托管对象时出错。 Enterprise.container.common.impl.util.InjectionManagerImpl.createManagedObject(InjectionManagerImpl.java:312) 在 com.sun.enterprise.web.WebContainer.createServletInstance(WebContainer.java:709) 在 com.sun.enterprise.web.WebModule。 createServletInstance(WebModule.java:1937) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1252) 原因:com.sun.enterprise.container.common.spi.util。InjectionException:尝试将 Unresolved Message-Destination-Ref ua.co.rufous.server.services.WorkerServiceImpl/queue@java.lang.String@null 注入 com.sun 的类 ua.co.rufous.server.services.WorkerServiceImpl 的异常.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:614) 在 com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:384) 在 com.sun .enterprise.container.common.impl.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:141) 在 com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:127) 在 com.sun .enterprise.container.common.impl.util.InjectionManagerImpl.createManagedObject(InjectionManagerImpl.java:306) ... 27 更多原因:com.sun.enterprise.container.common.spi.util.InjectionException:在仅支持基于实例的注入的类上非法使用静态字段 private static javax.jms.Queue ua.co.rufous.server.services.WorkerServiceImpl.queue在 com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:532) ... 31 更多 |#]

我的 MDB:

没有静态声明一切正常:

问题 2:使用 MDB 的最佳实践是什么:在 onMessage() 中处理完整请求或在 onMessage() 方法中调用另一个 bean(在我的情况下为无状态 bean)来处理它。处理包括对肥皂服务的少量调用,因此完整处理时间可能为 3 秒。

谢谢你。