我一直在嘗試將我們的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時使用的生產設置。
問候, /皮特
你有任何更新嗎? –
不幸的是沒有。似乎是WebLogic中的類加載原理圖的問題。急切等待WebLogic的下一個版本,以查看是否可以解決問題。 –