WebLogic 12c中的ServiceLoader问题

时间:2012-10-30 15:43:29

标签: weblogic cdi serviceloader

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

基本上我有jar1和jar2,通过包含META-INF / beans.xml来启用CDI。两个jar都在META-INF / services / test中指定一个类.Test指向各个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时使用的生产设置。

此致 /皮特

1 个答案:

答案 0 :(得分:0)

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

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