我为Wildfly中部署的EAR设计了这个模式:
LibInterfaceA.jar是ejb模块(A adn B)和WAR中用于注入ejb并在LibInterfaceB.jar中扩展的接口的库。
当我在LibInterfaceA中搜索自定义注释时,问题出在java反射:
public Annotation getAnnotazione(Method method, Class annotationType){
Annotation annotazioni[] = method.getAnnotations();
URL locationsearch = annotationType.getResource('/' + annotationType.getName().replace('.', '/') + ".class");
for(Annotation a : annotazioni){
Class klass = a.annotationType();
URL location = klass.getResource('/' + klass.getName().replace('.', '/') + ".class");
if(a.annotationType().getName().equals(annotationType.getName())){
return a;
}
}
return null;
}
我在WAR内的一个类中调用此方法来查找注释 annotationType = @ Custom 。 @Custom属于WAR / lib / LibInterfaceA.jar
如果我调用此方法来查找实现LibInterfaceB接口的类,该接口扩展了LibInterfeceA中的接口,则该方法上的注释@Custom属于jar EAR / lib / LibInterfaceA.jar,因此类加载的类不同问题
我该如何解决这个问题?
答案 0 :(得分:1)
您可以从战争中删除LibInterfaceA.jar。默认情况下,ear的子部署可以使用其lib目录(除非你在ear的jboss-depoyment-structure.xml中设置ear-subdeployments-isolated = true)