2012-10-30 6 views
8

Ich habe versucht, unsere Activiti-Implementierung in die Verwendung von CDI umzuwandeln, aber es gab eine Reihe von Problemen. Ich habe viel zu viel Zeit damit verbracht, dies zu lösen, aber ich kann es einfach nicht loslassen ... Ich denke, ich habe das Problem jetzt fest im Griff und richte einen klar strukturierten Krieg ein, ohne Activiti zu involvieren zu reproduzieren, was ich denke, ist das Hauptproblem.Problem mit dem ServiceLoader in WebLogic12c

Grundsätzlich habe ich jar1 und jar2, beide CDI aktiviert durch die Aufnahme von META-INF/beans.xml. Beide Gläser geben eine Klasse in META-INF/services/test an. Der Test zeigt auf Implementierungen, die für das jeweilige jar lokal sind. jar1 hängt von jar2 ab. Beide Dateien verweisen auf eine Implementierung von javax.enterprise.inject.spi.Extension, die das Szenario auslöst. In jeder Implementierung von Erweiterungs, ich habe eine Methode wie:

public void afterDeploymentValidation(
     @Observes AfterDeploymentValidation event, BeanManager beanManager) { 


    System.out.println("In jar1 extension"); 
    ServiceLoader<TheTest> loader = ServiceLoader.load(TheTest.class); 
    Iterator<TheTest> serviceIterator = loader.iterator(); 
    List<TheTest> discoveredLookups = new ArrayList<TheTest>(); 
    while (serviceIterator.hasNext()) { 
     TheTest serviceInstance = (TheTest) serviceIterator.next(); 
     discoveredLookups.add(serviceInstance); 
     System.out.println(serviceInstance.getClass().getName()); 
    } 
} 

Nun, mein Problem ist, dass die ServiceLoader keine Implementierungen in beiden Fällen nicht sehen, wenn WebLogic12c läuft. Derselbe Code funktioniert sowohl in Jboss 7.1.1 als auch in Glassfish einwandfrei und listet beide Implementierungen des Tests auf.

Kann man davon ausgehen, dass dies tatsächlich ein Problem in WebLogic 12c ist oder mache ich etwas falsch? Bitte beachten Sie, dass ich einfach versuche, die Produktionsumgebung nachzuahmen, die wir bei der Integration von Activiti verwenden.

Grüße, /Petter

+0

Haben Sie Informationen dazu? –

+0

Leider nicht. Scheint ein Problem mit den Klassenlade-Schemas in WebLogic zu sein. Warten gespannt auf die nächste Version von WebLogic, um zu sehen, ob das das Problem behebt. –

Antwort

0

Es gibt eine mit WLS versehen Classloader-Analyse-Tool ist, haben Sie, wenn diese mit der Diagnose Ihres Problems helfen wird, zu sehen.

Sie können auf dieses Tool zugreifen, indem Sie zu ip gehen: port/wls-cat/index.jsp Dabei ist Port der Port des verwalteten Servers, auf dem Ihre Anwendung bereitgestellt wird.