2017-03-02 4 views
0

Wenn mehrere Kriege bereitgestellt werden und jede WAR-Datei eine Instanz einer Klasse StandardContext enthält, die DefaultCamelContext erweitert und der Kontextname mit @ContextName auf "StandardContext" gesetzt ist, wird diese Ausnahme ausgelöst. Liegt dies an der Einrichtung des Klassenladeprogramms auf JBoss? Camel-Version: 2.17.4 JBoss-Version: EAP 6.1Kamel CDI-Laufzeit InstanceAlreadyExistsException auf JBoss EAP 6.1

+0

Wie stellen Sie Ihre Camel-Anwendung bereit? Benutzt du einen WAR oder benutzt du Wildfly-Camel oder sowas? Und eine gute Idee ist die Verwendung von eindeutigen Kamel-ID-Namen, zB sollte @ContextName in allen Ihren Anwendungen einen eindeutigen Namen haben. –

+0

Die Kamel-Anwendung wird als War-Datei auf JBoss EAP 6.1 bereitgestellt. Leider kann der ContextName nicht geändert werden, da es sich um eine allgemeine Basisklasse handelt, die von jeder WAR-Datei verwendet wird. Die Problemumgehung besteht jedoch darin, den Modulnamen als Namensmuster zu verwenden: –

Antwort

0

Sie können Ihre Camel-Anwendung so konfigurieren, dass für JMX ein Benennungsmuster (z. B. managementNamePattern) verwendet wird. Weitere Informationen finden Sie in der JMX-Dokumentation: http://camel.apache.org/camel-jmx.html

Sie können dann das Muster einen Zähler oder etwas verwenden, um den Konflikt zu vermeiden. Oder Sie können den Namen überschreiben und ihn auf etwas festlegen, von dem Sie wissen, dass er eindeutig ist, wie zum Beispiel der Modulname.

0

Früher hatte ich verwendet

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

Aber das hat nicht funktioniert, so dass ich geändert mein Code wie folgt:

@ApplicationScoped 
    @ContextName("StandardContext") 
    public class StandardContext extends DefaultCamelContext { 

    @Resource(lookup = "java:module/ModuleName") 
    private String moduleName; 

    @PostConstruct 
    public void init() { 

    getManagementNameStrategy().setNamePattern(moduleName); 

diesen Code Posting meine Lösung für andere Leser zu klären