TomEE:CDI扩展 - 找不到提供程序错误

时间:2013-03-18 15:52:13

标签: java java-ee cdi apache-tomee

我已经运行TomEE + 1.5.1并尝试创建CDI扩展。我创建了一个实现 javax.enterprise.inject.spi.Extension 的类,并将该类名放入文件 META-INF / services / javax.enterprise.inject.spi.Extension

课程本身很简单:

import java.util.HashSet;
import java.util.Set;

import javax.enterprise.event.Observes;
import javax.enterprise.inject.spi.Extension;
import javax.enterprise.inject.spi.ProcessAnnotatedType;

public class ScanAllClassesExtension implements Extension {

    private Set<Class<?>> allClasses;

    public void handleProcessAnnotatedTypeEvent(@Observes ProcessAnnotatedType<?> processAnnotatedTypeEvent) throws Exception {
        Class<?> type = processAnnotatedTypeEvent.getAnnotatedType().getJavaClass();
        getAllClasses().add(type);
    }

    public Set<Class<?>> getAllClasses() {
        if (allClasses == null) {
            allClasses = new HashSet<Class<?>>();
        }
        return allClasses;
    }

}

在TomEE上部署时出现此错误:

java.util.ServiceConfigurationError: javax.enterprise.inject.spi.Extension: Provider test.extensions.ScanAllClassesExtension not found

在OpenEJB中调试时,此错误是由ClassNotFoundException引起的,但正确的路径位于类加载器的url列表中。

我不知道为什么会发生这种情况,我希望有人能帮助我。

1 个答案:

答案 0 :(得分:0)

你可以试试1.6快照(https://repository.apache.org/content/groups/snapshots/org/apache/openejb/apache-tomee/1.6.0-SNAPSHOT/apache-tomee-1.6.0-20130330.041018-36-webprofile.zip

顺便说一句,你在你的应用程序中提供了api吗?它可能导致某些版本的类加载问题