WildFly使用JCA资源适配器与ActiveMQ集成



我正在尝试将ActiveMQ 5.15.13与WildFly 21.0.1集成。最后使用ActiveMQ JCA资源适配器。然而,我得到错误,而这样做。我能够将WildFly 9与ActiveMQ 5.10集成在一起。我得到以下错误:

2021-01-22 19:20:18,577 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 93) MSC000001: Failed to start service jboss.ra.deployer."activemq-rar-5.15.13.rar": org.jboss.msc.service.StartException in service jboss.ra.deployer."activemq-rar-5.15.13.rar": WFLYJCA0046: Failed to start RA deployment [activemq-rar-5.15.13.rar]
at org.jboss.as.connector.services.resourceadapters.deployment.ResourceAdapterDeploymentService$1.run(ResourceAdapterDeploymentService.java:176)
at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1348)
at java.lang.Thread.run(Thread.java:745)
at org.jboss.threads.JBossThread.run(JBossThread.java:513)
Caused by: org.jboss.jca.deployers.common.DeployException: IJ020056: Deployment failed: file:/opt/apps/MerckContivoPilot/wildfly-21.0.1.Final/standalone/deployments/activemq-rar-5.15.13.rar/
at org.jboss.jca.deployers.common.AbstractResourceAdapterDeployer.createObjectsAndInjectValue(AbstractResourceAdapterDeployer.java:2058)
at org.jboss.as.connector.services.resourceadapters.deployment.ResourceAdapterDeploymentService$WildFLyRaDeployer.doDeploy(ResourceAdapterDeploymentService.java:233)
at org.jboss.as.connector.services.resourceadapters.deployment.ResourceAdapterDeploymentService.start(ResourceAdapterDeploymentService.java:126)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1739)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1701)
at org.jboss.msc.service.ServiceControllerImpl$ControllerTask.run(ServiceControllerImpl.java:1559)
at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1363)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.jboss.jca.validator.ValidatorException: Severity: WARNING
Section: 20.7
Description: Invalid config-property-type for AdminObject.
Code: Class: org.apache.activemq.pool.XaPooledConnectionFactory Property: tmFromJndi Type: boolean
Severity: ERROR
Section: 13.4.2.2
Description: An ActivationSpec class must implement the ActivationSpec interface
Code: org.apache.activemq.ra.ActiveMQActivationSpec
Severity: ERROR
Section: 5.3.1
Description: A ResourceAdapter must implement the javax.resource.spi.ResourceAdapter interface.
Code: org.apache.activemq.ra.ActiveMQResourceAdapter
Severity: ERROR
Section: 6.5.3.2
Description: The class must implement the javax.resource.spi.ManagedConnectionFactory interface.
Code: org.apache.activemq.ra.ActiveMQManagedConnectionFactory

资源适配器配置

<subsystem xmlns="urn:jboss:domain:resource-adapters:6.0">
<resource-adapters>
<resource-adapter id="activemq-ra">
<archive>activemq-rar-5.15.13.rar</archive>
<transaction-support>XATransaction</transaction-support>
<config-property name="ServerUrl">tcp://localhost:61616?soTimeout=20000&amp;connectionTimeout=10000</config-property>
<config-property name="UserName">defaultUser</config-property>
<config-property name="UseInboundSession">false</config-property>
<config-property name="Password">defaultPassword</config-property>
<connection-definitions>
<connection-definition class-name="org.apache.activemq.ra.ActiveMQManagedConnectionFactory" jndi-name="java:/ActiveMQ/QueueConnectionFactory" enabled="true" use-java-context="true" pool-name="ActiveMQ/QueueConnectionFactory" use-ccm="true">
<xa-pool>
<min-pool-size>1</min-pool-size>
<max-pool-size>200</max-pool-size>
</xa-pool>
<timeout>
<blocking-timeout-millis>30000</blocking-timeout-millis>
<idle-timeout-minutes>5</idle-timeout-minutes>
</timeout>
</connection-definition>
</connection-definitions>
<admin-objects>
<admin-object class-name="org.apache.activemq.command.ActiveMQQueue" jndi-name="java:/queue/XMLPublishQueue" enabled="true" use-java-context="true" pool-name="XMLPublishQueue">
<config-property name="PhysicalName">XMLPublishQueue</config-property>
</admin-object>
<admin-object class-name="org.apache.activemq.command.ActiveMQQueue" jndi-name="java:/queue/SupportTasksQueue" enabled="true" use-java-context="true" pool-name="SupportTasksQueue">
<config-property name="PhysicalName">SupportTasksQueue</config-property>
</admin-object>
</admin-objects>
</resource-adapter>
</resource-adapters>
</subsystem>

download rar fromhttps://mvnrepository.com/artifact/org.apache.activemq/activemq-rar/5.15.13

按照以下指南尝试了两种方法(更新rar和不更新rar)

https://access.redhat.com/solutions/1124023

http://www.mastertheboss.com/jboss-server/jboss-jms/integrate-activemq-with-wildfly

更新:当我通过ee子系统下的全局模块部分添加第三方jar时,问题开始了。我正在添加java ee api jar

任何帮助/建议都将是感激的。

我将ActiveMQ 5.13.13 JCA资源适配器部署到Wildfly 21.0.1。Final和我没有看到和你看到的相同的日志。一切似乎都很正常。我是这样做的:

  1. 下载,unzip WildFly 21.0.1.Final.
  2. 下载ActiveMQ 5.15.13 JCA RA并拷贝到standalone/deployments.
  3. 将此添加到standalone/configuration/standalone-full.xml:
    <subsystem xmlns="urn:jboss:domain:resource-adapters:6.0">
    <resource-adapters>
    <resource-adapter id="activemq-ra-5">
    <archive>activemq-rar-5.15.13.rar</archive>
    <transaction-support>XATransaction</transaction-support>
    <config-property name="ServerUrl">tcp://localhost:61616?soTimeout=20000&amp;connectionTimeout=10000</config-property>
    <config-property name="UserName">defaultUser</config-property>
    <config-property name="UseInboundSession">false</config-property>
    <config-property name="Password">defaultPassword</config-property>
    <connection-definitions>
    <connection-definition class-name="org.apache.activemq.ra.ActiveMQManagedConnectionFactory" jndi-name="java:/ActiveMQ/QueueConnectionFactory" enabled="true" use-java-context="true" pool-name="ActiveMQ/QueueConnectionFactory" use-ccm="true">
    <xa-pool>
    <min-pool-size>1</min-pool-size>
    <max-pool-size>200</max-pool-size>
    </xa-pool>
    <timeout>
    <blocking-timeout-millis>30000</blocking-timeout-millis>
    <idle-timeout-minutes>5</idle-timeout-minutes>
    </timeout>
    </connection-definition>
    </connection-definitions>
    <admin-objects>
    <admin-object class-name="org.apache.activemq.command.ActiveMQQueue" jndi-name="java:/queue/XMLPublishQueue" enabled="true" use-java-context="true" pool-name="XMLPublishQueue">
    <config-property name="PhysicalName">XMLPublishQueue</config-property>
    </admin-object>
    <admin-object class-name="org.apache.activemq.command.ActiveMQQueue" jndi-name="java:/queue/SupportTasksQueue" enabled="true" use-java-context="true" pool-name="SupportTasksQueue">
    <config-property name="PhysicalName">SupportTasksQueue</config-property>
    </admin-object>
    </admin-objects>
    </resource-adapter>
    </resource-adapters>
    </subsystem>
    
  4. 更新ee子系统default-bindings元素中的jms-connection-factory属性,使用java:/ActiveMQ/QueueConnectionFactory;
    <default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:jboss/datasources/ExampleDS" jms-connection-factory="java:/ActiveMQ/QueueConnectionFactory" managed-executor-service="java:jboss/ee/concurrency/executor/default" managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>
    
  5. ejb3子系统mdb/resource-adapter-ref元素的resource-adapter-name属性更新为${ejb.resource-adapter-name:activemq-rar-5};
    <resource-adapter-ref resource-adapter-name="${ejb.resource-adapter-name:activemq-rar-5}"/>
    
  6. 使用./standalone.sh -c standalone-full.xml启动WildFly

考虑到所有这些正常工作,我会说你的问题是你的全局模块,特别是因为它包含Java EE API类。应用程序jar和库jar应该包含Java/Jakarta EE API类。EE服务器(例如WildFly)提供了所有这些。如果您(或其他人)提供了他们自己的,那么这将导致类加载问题,而这反过来又会导致许多其他奇怪的问题。重申一下,您绝对没有理由将Java/Jakarta EE API类与部署在服务器上的应用程序或库一起打包。

最新更新