入站JCA适配器的MDB侦听器无法在WildFly

时间:2016-02-25 11:14:51

标签: java wildfly message-driven-bean jca

有人设法在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的部署-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)。什么都没有帮助。

我的适配器也实现了Outbound处理,它按指定的方式工作。

感谢您的任何建议。

2 个答案:

答案 0 :(得分:4)

是的!有一个特殊的描述符使它在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规范,如果有太多的痛苦和晦涩的知识让它们工作?!

答案 1 :(得分:2)

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

但是我发现在红帽网站上他们提到我们需要查找重复引用.rar或它的jar部署。

低,看到我的一个pom文件同时引用了我的.rar文件及其.jar文件。 Jboss 6.4对此没有任何问题,但是Wildfly看起来更严格。无论如何,我只是将他们的范围改为提供,并且所有人都适合这个世界。

<scope>provided</scope>