0

我正在运行 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 列表中。

我不知道为什么会这样,我希望有人能帮助我。

4

1 回答 1

0

你能试试tomee 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 吗?它可能会导致某些版本的类加载问题

于 2013-03-31T20:30:35.547 回答