【问题标题】:Camel CDI runtime InstanceAlreadyExistsException on JBoss EAP 6.1JBoss EAP 6.1 上的 Camel CDI 运行时 InstanceAlreadyExistsException
【发布时间】:2017-03-02 14:29:15
【问题描述】:

当部署了多个war,并且每个war文件都包含一个扩展DefaultCamelContext的类StandardContext的实例并且使用@ContextName将上下文名称设置为“StandardContext”时,会引发此异常。这是由于 JBoss 上的类加载器设置造成的吗? 骆驼版:2.17.4 JBoss 版本:EAP 6.1

【问题讨论】:

  • 如何部署 Camel 应用程序。您使用 WAR 还是使用 wildfly-camel 之类的?一个好主意是使用唯一的骆驼 id 名称,例如 @ContextName 应该在所有应用程序中使用唯一名称
  • camel 应用程序被部署为 JBoss EAP 6.1 上的 war 文件。不幸的是 ContextName 无法更改,因为它是每个 war 文件使用的通用基类,但解决方法是使用模块名称作为名称模式:

标签: jboss apache-camel cdi


【解决方案1】:

您可以将 Camel 应用程序配置为使用 JMX 的命名模式(例如 managementNamePattern)。在 JMX 文档中查看更多详细信息:http://camel.apache.org/camel-jmx.html

然后您可以让模式使用计数器或其他东西来避免冲突。或者您可以覆盖名称并将其设置为您知道的唯一名称,例如模块名称。

【讨论】:

    【解决方案2】:

    我之前用过

        getManagementNameStrategy().setNamePattern("#name#");
    

    但这不起作用,所以我将代码修改为以下内容:

        @ApplicationScoped
        @ContextName("StandardContext")
        public class StandardContext extends DefaultCamelContext {
    
        @Resource(lookup = "java:module/ModuleName")
        private String moduleName;
    
        @PostConstruct
        public void init() {
    
        getManagementNameStrategy().setNamePattern(moduleName);
    

    发布此代码以向其他读者阐明我的解决方案

    【讨论】:

      猜你喜欢
      • 2013-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-20
      • 2015-09-24
      • 2021-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多