入站 JCA 适配器的 MDB 侦听器不会在 WildFly 中启动
MDB Listener for inbound JCA adapter doesn't start in WildFly
是否有人设法在 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 class(顺便说一句,缺少 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>
它解决了 class 加载的问题,我的 WAR classes 可以看到 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)。没有任何帮助。
我的适配器也实现了出站处理,并且按规定工作。
感谢任何建议。
是的!有一个特殊的描述符可以让它在 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 压缩包并定义一些默认的托管连接!
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 规范发挥作用需要那么多痛苦和晦涩难懂的知识,为什么我们需要所有这些规范?!
就我而言 none 这些解决方案有所帮助。
但是我在 Red Hat 站点上发现他们提到我们需要查找对 .rar 或其 jar 部署的重复引用。
低看,我的一个 pom 文件同时引用了我的 .rar 文件及其 .jar 文件。 Jboss 6.4 没有问题,但是是的,Wildfly 看起来更严格。无论如何,我只是将他们的范围更改为 provided 并且世界上一切都是正确的。
<scope>provided</scope>
是否有人设法在 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 class(顺便说一句,缺少 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>
它解决了 class 加载的问题,我的 WAR classes 可以看到 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)。没有任何帮助。
我的适配器也实现了出站处理,并且按规定工作。
感谢任何建议。
是的!有一个特殊的描述符可以让它在 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 压缩包并定义一些默认的托管连接!
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 规范发挥作用需要那么多痛苦和晦涩难懂的知识,为什么我们需要所有这些规范?!
就我而言 none 这些解决方案有所帮助。
但是我在 Red Hat 站点上发现他们提到我们需要查找对 .rar 或其 jar 部署的重复引用。
低看,我的一个 pom 文件同时引用了我的 .rar 文件及其 .jar 文件。 Jboss 6.4 没有问题,但是是的,Wildfly 看起来更严格。无论如何,我只是将他们的范围更改为 provided 并且世界上一切都是正确的。
<scope>provided</scope>