【发布时间】:2021-02-19 17:50:13
【问题描述】:
我正在使用 ActiveMQ Artemis 2.13.0.redhat-00006 进行消息传递。我已经在 Weblogic 中部署了 ActiveMQ Artemis JCA RA。
我面临的要求是优先考虑从 Weblogic 执行的消息。我想利用 Weblogic 提供的工作管理器概念。我在 Weblogic 中创建了 2 个域范围的工作管理器:
WorkManagerHighPriorityWorkManagerLowPriority
我正在尝试修补 ActiveMQ,以便它使用我的自定义工作管理器(例如WorkManagerLowPriority),而不是默认的工作管理器。我在ActiveMQResourceAdapter找到了这个方法:
public WorkManager getWorkManager() {
if (logger.isTraceEnabled()) {
logger.trace("getWorkManager()");
}
if (ctx == null) {
return null;
}
return ctx.getWorkManager();
}
在我幼稚的想法中,我将此方法修改为:
public WorkManager getWorkManager() {
if (logger.isTraceEnabled()) {
logger.trace("getWorkManager()");
}
InitialContext ic = null;
WorkManager wm = null;
try {
Hashtable env = new Hashtable();
// WebLogic Server 10.x/12.x connection details
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL, "t3://localhost:28010");
ic = new InitialContext(env);
wm = (WorkManager) ic.lookup("java:comp/env/wm/WorkManagerLowPriority");
if (wm == null) {
throw new RuntimeException();
}
} catch (NamingException e) {
e.printStackTrace();
}
return wm;
}
一切正常。但是,在部署此补丁后,我收到以下错误:
"message": "Not an ActiveMQ Artemis Destination:ActiveMQQueue[online.eingabe.MyQueue]",
"name": "javax.jms.InvalidDestinationException",
"extendedStackTrace": "javax.jms.InvalidDestinationException: Not an ActiveMQ Artemis Destination:ActiveMQQueue
此外,我不断收到此警告:
"extendedStackTrace":"java.lang.NoClassDefFoundError: io/netty/util/collection/IntObjectHashMap$2
at io.netty.util.collection.IntObjectHashMap.values(IntObjectHashMap.java:221)
问题:
- ActiveMQ 使用自定义工作管理器而不是默认工作管理器通常可以实现我的目标吗?
- 通过修改
ActiveMQResourceAdapter.getWorkManager()来实现我的目标,我是否走在正确的轨道上?
【问题讨论】:
-
你好 Justin,是的,我在 Weblogic 中有一个成功集成的 ActiveMQ,作为 rar depoymnt,它工作正常。我还配置了所有队列。它是 2.13.0.redhat-00006。我不知何故不知道应该从哪里开始修补 ActiveMQ 资源适配器。我确实从 Java EE 规范中获得了以下一般信息:部署资源适配器时,将调用 start() 方法。取消部署时,将调用 stop() 方法。资源适配器启动的任何工作都可以在 start() 方法中执行,就像使用 WebLogic Server 启动类一样。
-
在ActiveMQResourceAdapter中可以找到启动方法,但是不知道资源适配器什么时候开始获取weblogic工作管理器。
-
有趣的是,您已将其与 ActiveMQ Artemis 2.13.0 中的 JCA RA 一起使用,因为最近才添加了对管理对象的支持。有关详细信息,请参阅ARTEMIS-2903。
-
ActiveMQ Artemis JCA RA 通过使用
javax.resource.spi.BootstrapContext.getWorkManager()从容器中获取工作管理器。BootstrapContext实例由 Weblogic 通过start()方法提供给 RA。
标签: java weblogic weblogic12c activemq-artemis