问题标签 [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 投票
1 回答
2030 浏览

java - WebSphere MQ 中的订阅者授权与 MDB

我有一个看起来像这样的 MDB:

我在 WebSphere MQ 7 中设置了一个主题。使用 MQ Explorer 的 pub 和 sub 操作似乎都可以。

我在 WebSphere 中设置了一个侦听器端口。监听端口可以成功启动。

当我部署并启动我的应用程序时,MDB 无法读取任何消息。给出的例外是:

我怀疑虽然侦听器端口能够启动,但它不会主动连接,直到附加的应用程序尝试使用它。此时它已通过身份验证,但未授权。

问:WebSphere 中配置的身份验证凭证在哪里?我不知道我在验证谁。@ActivationConfigProperty是在 MDB 中设置的客户端 ID吗?

问:MQ Explorer 中的授权设置在哪里?我看不到任何方法可以向团体或个人授予 pub 或 sub 权利。目前它设置为允许/允许,大概适用于所有人。

0 投票
1 回答
488 浏览

events - 使用 weblogic MDB 进行事件驱动编程

我正在构建一个充当事件侦听器的应用程序,并根据收到的事件执行某些步骤或工作流程。将事件发布到单个队列并 MDB 根据事件类型调用不同的业务逻辑组件,或者每个事件类型有一个队列并且相应的 MDB 调用不同的业务逻辑是更好吗?我们的假设是,对应于特定事件的繁重工作流不会影响其他事件的性能,因为它们是在单独的队列中处理的。

0 投票
1 回答
3183 浏览

jboss - JBoss MDB - JMSBytesMessage 类转换异常

我正在研究一个 EJB3 MDB,它侦听远程服务器中的 MQ 队列。除了由 MDB 完成的处理外,一切工作正常(当将消息放入侦听队列时触发 MDB)。有关信息,我使用 WMQ 资源适配器来映射队列。

在 MDB 的方法“onMessage”中,我尝试将给定消息转换为“com.ibm.jms.JMSBytesMessage”类,但我收到一条奇怪的错误消息。

代码如下(示例简单):

和异常消息:

读取输入请求时出现异常:com.ibm.jms.JMSBytesMessage 与 com.ibm.jms.JMSBytesMessage 不兼容

好的,收到的消息应该(并且是)类型“com.ibm.jms.JMSBytesMessage”,那么为什么应用程序不起作用?我的 JBoss 服务器是否可能已经使用了另一个版本的库“com.ibm.mqjms.jar”(包括 JMSBytesMessage 类)并导致这种错误?

ps:我已经在linux系统下的JBoss服务器4.2.3版本上部署了应用程序。我已经使用相同版本的 JBoss 服务器但在窗口系统下(相同的配置、相同的库等)使应用程序在我的本地机器上运行

有人知道这种错误的原因吗?

提前感谢您的帮助。

问候,

编辑:解决方案:使用 javax.jms.BytesMessage 而不是 com.ibm.jms.JMSBytesMessage 进行强制转换

0 投票
2 回答
2070 浏览

java - Java 连接器体系结构和 TCP/IP

所以我最基本的问题是:如何将 TCP 接口构建到 Java EE 应用程序中?我需要与 TCP/IP 端口块进行交互,而不是与旧的 EIS 交互。理想情况下,我希望消息驱动的 bean 具有由传入 TCP 请求调用的 onMessage 方法,并且还能够通过相同的连接进行响应。

JCA 似乎足够通用,可以在 Java EE 环境中执行类似的操作。开发自定义连接器是否适合在 Java 企业生态系统中集成入站/出站 TCP 接口?


就我到目前为止所尝试的而言:我们目前正在使用一个生命周期模块,它首先启动一些 TCP 侦听器;这将调用一个消息驱动的 bean,该 bean 调用一个业务方法,并且它都通过同一个 TCP 流返回。这实际上工作正常,但我的应用程序服务器(Glassfish)中的生命周期支持感觉就像是事后才添加的。因此,JCA 似乎是此类问题的一流解决方案,它似乎使我们能够通过 TCP 进行通信。

然而,从我们进行的初步研究来看,连接器架构似乎是“针对”遗留信息系统的,而不是通用的 TCP 通信。所以,我的问题可以提出:人们是否使用自定义 JCA 将 TCP/IP 集成到他们的 Java EE 应用程序中——或者是否有更好的技术来接受来自我的 EJB 的 TCP 连接?

0 投票
1 回答
2211 浏览

java - 在 java MDB 中处理异常的最佳方法是什么?

我得到了这个用例:

此图表示企业模型。Weblogic 10.3 上的 Java EE 技术利用用于 IoC 和 AOP 的 spring 框架、用于持久性的 JPA 与 spring jpatemplate、用于交互框架的 spring 集成。如您所见,Service 和 Gateway 之间没有耦合,因为 Spring 集成添加了所有需要的魔法糖。

现在我必须处理异常处理。所有链都没有检查异常:数据访问也没有检查异常,因为 jpatemplate 将所有 sql 异常包装在运行时异常中。

所以我处理的唯一检查异常是在 MDB

我注意到,如果我在链的某个组件上获得 NPE,则消息会在 JMS 队列上回滚,并且进程会循环回来。

在这种情况下处理异常的最佳方法是什么?捕获 MDB 中的所有 runtimeExceptions?

亲切的问候马西莫

0 投票
1 回答
2276 浏览

java - 在部署时更改主题读取 MDB 的激活配置

我觉得这应该很容易。只需 RTM 即可。但我找不到我需要的信息。

问:我可以@ActivationConfigProperty在不编写任何 XML 的情况下更改部署时的值吗?


更多详情

我有一个使用@MessageDriven注释的 MDB。其中有许多@ActivationConfigProperty配置它的注释。

我需要多次部署这个 MDB,每次都引用不同的主题。

在部署时(WebSphere 7 ND),我能够TopicListenerPort为每个 EAR 配置不同的(WebSphere 映射到不同主题的方式)。但是,当我尝试启动第二个实例时,它会因错误而失败:

WMSG0019E: 无法启动 MDB 侦听器 TopicReaderBean、JMSDestination jms/MMiSInLonTopic:com.ibm.msg.client.jms.DetailedIllegalStateException:JMSWMQ0026:无法使用 MQSUB 订阅主题“MMIS_LON_IN”。由于另一个消息使用者正在使用它,因此创建订阅可能存在问题。在尝试以相同名称创建新订阅之前,请确保关闭使用此订阅的所有消息使用者。请参阅链接的异常以获取更多信息。原因:com.ibm.mq.MQException:JMSCMQ0001:WebSphere MQ 调用失败,compcode '2' ('MQCC_FAILED') 原因 '2429' ('MQRC_SUBSCRIPTION_IN_USE')。

当我查看 MQ Explorer 时,我可以看到订阅名称是JMS:GGWKNNG5:gmm_poc_06:TopicReaderBeanSubscriptionName“JMS”、QueueManager 名称、主题连接工厂 ID 和 ActivationConfigProperty“subscriptionName”的组合。由于此订阅名称发生冲突,第二个连接失败。我需要区分不同 MDB 实例使用的订阅名称。

虽然我可以为每个 bean 创建一个新的主题连接工厂,但这将是很多工作并且没有多大意义。

有意义的是每个 bean 有不同的订阅名称然而,这个属性被嵌入到注释中,我在 WebSphere 中看不到任何允许我覆盖它的地方。

那么,我是否可以在不必编写 XML 部署描述符的情况下覆盖此属性?如果我确实需要编写一些 XML,我如何覆盖其中的属性?

0 投票
2 回答
2462 浏览

java - 告诉 OpenEJB 忽略 MDB

我为最终将消息放入队列的活动编写了单元测试。只要将消息放入该队列,消息驱动的 bean 就会开始处理。但我不想在单元测试中测试 MDB。我如何告诉 OpenEJB 忽略它们?

我设置了具有几个属性的 OpenEJB:

我知道我必须设置openejb.deployments.classpath.exclude,但我无法确定正确的值:

例如,我的班级名为org.example.mdb.MyMDB.

0 投票
2 回答
5676 浏览

jakarta-ee - 从安全队列@RunAs 读取的 Weblogic 消息驱动 Bean 不起作用

我有一个非常简单的 MDB,只要它读取消息的队列不受保护,它就可以正常工作

在我使用用户名保护队列后,它不能再阅读消息了

我尝试了所有类型的 @RunAs 注释 @weblogic.jws.security.RunAs(role="Joan",mapToPrincipal="ccc_user"),其中 ccc_user 可以从队列中读取消息

导入 javax.annotation.security.RunAs; @RunAs("SomeRole")在部署时出现错误无法部署 EJB:来自 mdbReceiver.jar 的 MdbReceiver:映射中的预期角色

知道如何使用注释来做到这一点吗?即使没有注释,我也尝试过......同样的 weblogic 控制台中的例外是

weblogic.jms.common.JMSSecurityException: Access denied to resource: type=<jms>, application=UNIV_REC_Module, destinationType=queue, resource=DistributedQueueTest, action=receive

谢谢

0 投票
2 回答
12309 浏览

jboss - 如何限制监听 Jboss JMS 队列的 MDB 实例的数量

我在以下设置中遇到问题:

Java 应用程序将电子邮件消息发送到 JMS 队列,然后侦听队列的 MDB 使用 onMessage 方法获取电子邮件消息,它打开 Gmail SMTP 上的连接,将电子邮件发送到 SMTP 并关闭连接。对 JMS 队列中的所有消息执行此操作。

当我在队列中同时有多达 5 条消息时,它工作得很好。所有邮件都由 5 个不同的 MDB 实例同时接收,因此我有 5 个并发连接到 Gmail SMTP 服务器。但是当 JMS 队列中有更多邮件时,我从 Gmail SMTP 服务器收到连接错误。前 5 条消息正确发送,但其余消息未正确发送,因此其他消息丢失,因为它们不再在队列中。

所以我的问题是,是否可以限制将侦听 JMS 队列的 MDB 实例的数量?如果我最多有 5 个 MDB,那么即使队列中有 1000 条消息,清空队列也需要更长的时间,但至少我不会丢失任何消息。

任何其他解决此问题的建议将不胜感激。

这是Jboss版本:

[Server] Release ID: JBoss [Trinity] 4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date=200807181417)

MDB的配置如下:

你需要更多吗?

谢谢

编辑 2011-02-14
也许我想限制 MDB 实例的数量是错误的。我看到了一个关于 JMS 线程数的配置。如果我限制将发布到 MDB 的线程数,也许它会解决我的问题?JMS 会等到 MDB 可用后再发布 msg 吗?这样做有什么副作用吗?你虽然请。谢谢
结束编辑

0 投票
1 回答
745 浏览

jboss - 在哪里配置 org.jboss.ejb3.mdb.MdbDelegateWrapper

我需要将 MDB 的池大小减少到 5,因为它连接到在连接方面受到限制的外部资源。如果我的 JMS 队列中有 15 条消息,那么由于 MDB 代码中发生连接错误,因此只有 5 条消息被成功处理,而其他 10 条则为腰部。

我在 Jboss JMX 控制台中展示了这个设置: JMX-控制台

我正在使用 Jboss 4.2.3。我需要知道在哪里可以编辑这个 MaxPoolSize 配置。我到处搜索,但没有找到。

谢谢