【问题标题】:MDB Listener for inbound JCA adapter doesn't start in WildFly入站 JCA 适配器的 MDB 侦听器未在 WildFly 中启动
【发布时间】:2023-03-17 07:40:02
【问题描述】:

是否有人设法在 WildFly(9.0.2 或 10.0)中部署了一个侦听独立 JCA 适配器的 MDB bean?

我刚刚创建了一个入站 JCA 适配器(使用 ironjacamar-1.2.6)并将其部署在 WildFly 上。像这样:

@Activation(messageListeners = { foo.TestMessageListener.class })
public class TestActivationSpec implements ActivationSpec
...

接下来,我添加了一个简单的连接(使用 jboss-cli):

/profile=full-ha/subsystem=resource-adapters/resource-adapter=testRA:add(archive=test.rar,transaction-support=NoTransaction)
/profile=full-ha/subsystem=resource-adapters/resource-adapter=testRA/connection-definitions=TestManagedConnectionFactory:add(class-name=foo.TestManagedConnectionFactory,jndi-name=java:/eis/TestConnectionFactory_ha)

到目前为止还很简单。之后,我为适配器创建了带有目标消费者的 WAR 应用程序:

@MessageDriven(
    activationConfig = {
            @ActivationConfigProperty(propertyName = "someProperty",
                    propertyValue = "Hi there")}
)
@Vetoed
public class TestServiceConsumer implements TestMessageListener{
...

我遇到了第一个麻烦。此 WAR 在部署期间看不到 TestMessageListener 类(顺便说一句,WildFly 缺乏规范支持)。我通过在我的 WAR 存档中添加一个特殊的专有描述符找到了一个解决方案:

META-INF/jboss-deployment-structure.xml

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <module name="deployment.test.rar" />
        </dependencies>
    </deployment>
</jboss-deployment-structure>

它解决了类加载问题,我的 WAR 类被允许查看 RAR 接口。但现在我看到了其他部署问题:

java.lang.IllegalStateException: WFLYEJB0383: No message listener of type foo.TestMessageListener found in resource adapter activemq-ra

那么,问题是为什么 WildFly 只查看它自己的 RA 作为监听器接口而不查看我的?有没有其他具体的描述符来解决这个问题?

需要说,我已经尝试将 ra.xml 描述添加到 RAR 存档中,添加 @ActivationConfigProperty 以指定确切的 RA 连接工厂(destinationLookup 和 connectionFactoryLookup)。没有任何帮助。

我的适配器也实现了出站处理,它按规定工作。

感谢您的建议。

【问题讨论】:

    标签: java wildfly message-driven-bean jca


    【解决方案1】:

    是的!有一个特殊的描述符可以让它在 WildFly 上工作:

    jboss-ejb3.xml

    <?xml version="1.1" encoding="UTF-8"?>
    <jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
               xmlns="http://java.sun.com/xml/ns/javaee"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:r="urn:resource-adapter-binding"
               xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee    http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
               version="3.1"
               impl-version="2.0">
        <assembly-descriptor>
            <r:resource-adapter-binding>
                <ejb-name>TestServiceConsumer</ejb-name>
                <r:resource-adapter-name>test.rar</r:resource-adapter-name>
            </r:resource-adapter-binding>
        </assembly-descriptor>
    </jboss:ejb-jar>
    

    但是如果没有另一个它就不行,它应该被放入 RAR 存档并定义一些 DEFAULT 托管连接!

    META-INF/ironjacamar.xml

    <ironjacamar xmlns="http://www.ironjacamar.org/doc/schema"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.ironjacamar.org/doc/schema 
             http://www.ironjacamar.org/doc/schema/ironjacamar_1_1.xsd">
    
        <transaction-support>NoTransaction</transaction-support>
    
        <connection-definitions>
            <connection-definition class-name="foo.TestManagedConnectionFactory" jndi-name="java:/eis/TestConnectionFactory" pool-name="TestConnectionFactory">
            </connection-definition>
        </connection-definitions>
    
    </ironjacamar>
    

    如果有这么多痛苦和晦涩难懂的知识让它们发挥作用,我们为什么还需要所有这些 J2EE 规范?!

    【讨论】:

    • 谢谢你!很大的帮助。入站 jca 适配器是否需要连接?可以分享一下源码吗?
    • 谢谢@vasquez!源代码完全由 Ironjacamar 生成。我只是玩它。入站连接!!!你说的对!我没有考虑。当然,如果存档中只有入站适配器,那么我们在部署时没有任何东西可以启动,WildFly 将无法找到我们的监听器!拉屎!我会在星期一检查它。
    【解决方案2】:

    就我而言,这些解决方案都没有帮助。

    但是,我在 Red Hat 网站上发现他们提到我们需要查找对 .rar 或其 jar 部署的重复引用。

    看我的一个 pom 文件同时引用了我的 .rar 文件及其 .jar 文件。 Jboss 6.4 对此没有任何问题,但是 Wildfly 看起来更严格。无论如何,我只是将它们的范围更改为提供,并且一切正常。

    <scope>provided</scope>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-30
      • 1970-01-01
      • 1970-01-01
      • 2019-11-01
      • 2021-04-27
      • 2021-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多