8

我一直在尝试将我们的 Activiti 实现重构为使用 CDI,但遇到了许多问题。我已经花了太多时间试图解决这个问题,但我就是不能放手......我想我现在已经解决了这个问题,在不涉及 Activiti 的情况下建立了一场干净的结构化战争,并且已经能够重现我认为的主要问题。

基本上我有 jar1 和 jar2,这两个 CDI 都通过包含 META-INF/beans.xml 启用。两个 jar 都在 META-INF/services/test.TheTest 中指定了一个类,指向各自 jar 的本地实现。jar1 依赖于 jar2。此外,两个 jar 都指向 javax.enterprise.inject.spi.Extension 的实现,从而触发场景。在 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 时使用的生产设置。

问候,/彼得

4

1 回答 1

0

WLS 提供了一个类加载器分析工具,您是否看到这是否有助于诊断您的问题。

您可以通过访问 ip:port/wls-cat/index.jsp 访问此工具,其中 port 将是部署应用程序的托管服务器的端口。

于 2012-12-20T11:24:54.017 回答