2016-02-25 31 views
1

有人是否設法在WildFly(9.0.2或10.0)中部署偵聽獨立JCA適配器的MDB bean?入站JCA適配器的MDB偵聽器無法在WildFly中啓動

我剛剛創建了一個入站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的規範支持,順便說一下)。我發現了一個解決方案加入了特殊的專有描述成我的抗戰檔案:

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> 

它解決問題與類加載和我的抗戰類成爲允許看到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)。沒什麼幫助。

我的適配器也實現了一個出站處理,它按照指定的方式工作。

感謝您的任何建議。

回答

3

是的!有一個特殊的描述符,使其在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規範,如果有這麼多的痛苦和神祕的知識,以使他們的工作?

+0

謝謝!很好的幫助。入站jca適配器需要連接嗎?你能分享它的來源嗎? – vasquez

+0

謝謝@vasquez!源代碼完全由Ironjacamar生成。我只是玩了它。入站連接!你是對的!我沒有想過。當然,如果存檔中只有入站適配器,那麼在部署時我們沒有任何東西可以啓動,WildFly將無法找到我們的監聽器!拉屎!我會在星期一檢查它。 –

1

在我的情況下,這些解決方案都沒有幫助。

但是我在紅帽網站上發現,他們提到我們需要查找.rar或其jar部署的重複引用。

低和看到我的一個POM文件同時引用我的.rar文件和它的.jar文件。 Jboss 6.4沒有問題,但是Wild is是更嚴格的樣子。無論如何,我只是將他們的範圍改爲提供,並且與世界一切都是正確的。

<scope>provided</scope>