JBoss EAP 6.1上的Camel CDI运行时InstanceAlreadyExistsException

JBoss EAP 6.1上的Camel CDI运行时InstanceAlreadyExistsException,jboss,apache-camel,cdi,Jboss,Apache Camel,Cdi,部署多个war时,每个war文件都包含一个扩展DefaultCamelContext的StandardContext类实例,并且使用@ContextName将context名称设置为“StandardContext”,则会引发此异常。这是因为JBoss上安装了类加载器吗? 驼色版本:2.17.4 JBoss版本:EAP 6.1您可以将Camel应用程序配置为对JMX使用命名模式(如managementNamePattern)。请参阅JMX文档中的更多详细信息: 然后可以让图案使用计数器或其他东西

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

您可以将Camel应用程序配置为对JMX使用命名模式(如managementNamePattern)。请参阅JMX文档中的更多详细信息:

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

我之前使用过

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

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

如何部署骆驼应用程序。你用的是战争还是野飞骆驼什么的?一个好主意是使用唯一的camel id名称,因此@ContextName应该在所有应用程序中使用唯一的名称camel应用程序作为war文件部署在JBoss EAP 6.1上。不幸的是,不能更改ContextName,因为它是每个war文件使用的公共基类,但解决方法是使用模块名作为名称模式: