2012-10-30 14 views
8

Ho cercato di ridefinire la nostra implementazione di Activiti nell'uso del CDI, ma ho incontrato una serie di problemi. Ho passato troppo tempo a cercare di risolvere questo problema, ma non riesco a lasciarlo andare ... Penso di aver bloccato il problema ora, creando una guerra strutturata senza coinvolgere Activiti e ho potuto riprodurre ciò che penso sia il problema principale.Problema ServiceLoader in WebLogic12c

Fondamentalmente ho jar1 e jar2, entrambi CDI abilitati includendo META-INF/beans.xml. Entrambi i jar specificano una classe in META-INF/services/test. Il test punta alle implementazioni locali per il rispettivo jar. jar1 dipende da jar2. Inoltre, entrambi i jar puntano a un'implementazione di javax.enterprise.inject.spi.Extension, attivando lo scenario. In ogni implementazione di estensione, ho un metodo come:

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

Ora, il mio problema è che il ServiceLoader non vede alcun implementazioni in entrambi i casi durante l'esecuzione WebLogic12c. Lo stesso codice funziona perfettamente sia in Jboss 7.1.1 che in Glassfish, elencando entrambe le implementazioni del test. Interfaccia test.

È giusto presumere che questo sia effettivamente un problema in WebLogic 12c o sto facendo qualcosa di sbagliato? Per favore, tieni a mente che sto semplicemente cercando di emulare il setup di produzione che usiamo quando incorpori Activiti.

saluti, /Petter

+0

avete aggiornato su questo? –

+0

Purtroppo no. Sembra essere un problema con gli schemi di caricamento della classe in WebLogic. Attendiamo con impazienza la prossima versione di WebLogic per vedere se questo risolve il problema. –

risposta

0

C'è uno strumento di analisi Classloader dotato di WLS, hai visto se questo aiuterà con la diagnosi del problema.

È possibile accedere a questo strumento andando a IP: port/WLS-cat/index.jsp Dove porta sarà la porta del server gestito in cui viene distribuito l'applicazione.