如何在Wildfly中禁用ResourceAdapter注释

问题描述 投票:0回答:1

我有一个 java 代码,其中包含我在 Wildfly 中部署的 EAR 中的 @ResourceAdapter 注释:

@MessageDriven(activationConfig = {
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
    @ActivationConfigProperty(propertyName = "useJndi", propertyValue = "true"),
    @ActivationConfigProperty(propertyName = "destination",
        propertyValue = "java:/jms/queue/myqueue"),
})
@ResourceAdapter("my-resource-adapter")
public class MyMessageListener implements MessageListener {

  @Override
  public void onMessage (Message message) {
  }
}

我通过 CLI 添加资源适配器:

/subsystem=resource-adapters/resource-adapter=my-resource-adapter:add(archive=activemq-rar-5.18.2.rar,transaction-support=XATransaction)
/subsystem=resource-adapters/resource-adapter=my-resource-adapter/config-properties=ServerUrl:add(value=<url>)
/subsystem=resource-adapters/resource-adapter=my-resource-adapter/connection-definitions=my-resource-adapter.connection:add(<connection definitions here>)
/subsystem=resource-adapters/resource-adapter=my-resource-adapter/admin-objects=<admin objects here>
/subsystem=resource-adapters/resource-adapter=my-resource-adapter:activate

一切正常。现在,我想引入一个布尔属性,是否使用和部署ActiveMQ资源适配器。最初,我通过

if
声明来做到这一点:

set use_resource_adapter=${use_resource_adapter}

if (outcome == "success" && result == "true") of :resolve-expression(expression=$use_resource_adapter)
  /subsystem=resource-adapters/resource-adapter=my-resource-adapter:add(archive=activemq-rar-5.18.2.rar,transaction-support=XATransaction)
  /subsystem=resource-adapters/resource-adapter=my-resource-adapter/config-properties=ServerUrl:add(value=<url>)
  /subsystem=resource-adapters/resource-adapter=my-resource-adapter/connection-definitions=my-resource-adapter.connection:add(<connection definitions here>)
  /subsystem=resource-adapters/resource-adapter=my-resource-adapter/admin-objects=<admin objects here>
  /subsystem=resource-adapters/resource-adapter=my-resource-adapter:activate
end-if

但是如果参数为 false,我在部署 EAR 文件时会收到此错误:

{"WFLYCTL0062: Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-2" => {"WFLYCTL0412: Required services that are not installed:" => ["jboss.ra.my-resource-adapter"],"WFLYCTL0180: Services with missing/unavailable dependencies" => ["jboss.deployment.subunit.\"myear.ear\".\"myear.jar\".component.MyMessageListener.CREATE is missing [jboss.ra.my-resource-adapter]"]}}}

有没有办法让 @ResourceAdapter 注解在未配置/激活资源适配器时不会失败?

谢谢!

预期结果:如果 java 代码保持原样,并且没有通过 CLI 添加资源适配器,那么 EAR 仍应部署并且不会导致 WFLYCTL0062 错误

java wildfly activemq resource-adapter
1个回答
0
投票

要在未配置或激活资源适配器时禁用 Wildfly 中的

@ResourceAdapter
注解,您可以改用
@Resource
注解。

以下是修改代码的方法:

@MessageDriven(activationConfig = {
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
    @ActivationConfigProperty(propertyName = "useJndi", propertyValue = "true"),
    @ActivationConfigProperty(propertyName = "destination",
        propertyValue = "java:/jms/queue/myqueue"),
})
public class MyMessageListener implements MessageListener {

    @Resource(lookup = "java:/jms/queue/myqueue")
    private Queue queue;

    @Override
    public void onMessage(Message message) {
        // Use the queue here
    }
}

通过使用带有

@Resource
属性的
lookup
注解,您可以直接注入所需的资源(在本例中为 JMS 队列),而无需显式指定资源适配器。

这样,如果资源适配器没有配置或激活,EAR文件的部署就不会失败。在这种情况下,

@Resource
注释只会将注入的资源保留为
null

请注意,您需要从代码中删除

@ResourceAdapter("my-resource-adapter")
注释。

通过使用这种方法,您可以根据布尔属性控制资源适配器的使用(

use_resource_adapter
)。如果该属性设置为
true
,您可以像以前一样通过 CLI 配置和激活资源适配器。如果该属性设置为
false
,您可以省略资源适配器配置,部署仍然会成功,不会出现任何错误。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.