2012-10-30 46 views
8

我一直在嘗試將我們的Activiti實現重構爲使用CDI,但遇到了一些問題。我已經花了太多時間試圖解決這個問題,但我不能放過它......我認爲我現在已經把這個問題固定下來,建立一個乾淨的結構化戰爭而不涉及Activiti,並且已經能夠重現我認爲的主要問題。WebLogic12c中的ServiceLoader問題

基本上我有jar1和jar2,都通過包含META-INF/beans.xml啓用CDI。兩個jar都在META-INF/services/test中指定了一個類。測試指向各個jar的本地實現。 jar1取決於jar2。而且,這兩個jar都指向javax.enterprise.inject.spi.Extension的實現,從而觸發該場景。在擴展的每個實現,我有這樣的方法:

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

現在,我的問題是,ServiceLoader沒有看到任何的實現在兩種情況下運行WebLogic12c時。在Jboss 7.1.1和Glassfish中,相同的代碼工作得很好,列出了test.TheTest接口的兩個實現。

這是公平的假設這確實是WebLogic 12c中的一個問題,還是我做錯了什麼?請記住,我只是試圖模擬我們在使用Activiti時使用的生產設置。

問候, /皮特

+0

你有任何更新嗎? –

+0

不幸的是沒有。似乎是WebLogic中的類加載原理圖的問題。急切等待WebLogic的下一個版本,以查看是否可以解決問題。 –

回答

0

有一個ClassLoader分析工具提供了WLS,你見過這是否會與你的問題的診斷有幫助。

您可以通過轉到ip:port/wls-cat/index.jsp來訪問此工具 其中port將作爲部署應用程序的受管服務器的端口。

相關問題