有人设法在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处理,它按指定的方式工作。
感谢您的任何建议。
答案 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>