2017-03-02 62 views
0

当部署多个战争,并且每个战争文件包含扩展DefaultCamelContext的一个类StandardContext的实例并且使用@ContextName将上下文名称设置为“StandardContext”时,将抛出此异常。这是由于JBoss上的类加载器设置吗? 骆驼版本:2.17.4 JBoss版本:EAP 6.1骆驼CDI运行时JBoss EAP 6.1上的InstanceAlreadyExistsException

+0

你如何部署你的骆驼应用程序。你使用战争还是使用野驴?一个好主意是使用独特的骆驼id名称,所以例如@ContextName应该在您的所有应用程序中使用唯一的名称 –

+0

骆驼应用程序在JBoss EAP 6.1上作为war文件部署。不幸的是,ContextName无法更改,因为它是每个war文件使用的公共基类,但解决方法是使用模块名称作为名称模式: –

回答

0

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

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

0

早些时候,我曾使用过

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); 

发布这个代码来澄清我的解决方案的其他读者