使用Weblogic 11G时,我面临以下错误。
weblogic.application.ModuleException:
at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1514)
at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:486)
at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:41)
at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
Truncated. see log file for complete stacktrace
Caused By: java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1912)
at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:79
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:707)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:4035)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3989)
让我告诉你更多细节。 我的Web应用程序包含 ejb3-persistence-1.0.2.GA.jar 和 hibernate-jpa-2.0-api-1.0.1.Final.jar jar文件,其中包括 hibernate-jpa-2.0-api-1.0.1.Final.jar 包含 orphanRemoval()方法,而 ejb3-persistence-1.0.2.GA.jar < / strong>没有。
我已经将weblogic配置为通过以下规范加载应用程序库而不是weblogic库。
WebLogic的application.xml中
<prefer-application-packages>
<package-name>antlr.*</package-name>
<package-name>org.mozilla.javascript.*</package-name>
<package-name>org.mozilla.classfile.*</package-name>
<package-name>javax.persistence.*</package-name>
</prefer-application-packages>
所以我似乎需要告诉服务器从 hibernate-jpa-2.0-api-1.0.1.Final.jar 而不是 ejb3-persistence-1.0加载所需的类。 2.GA.jar 文件,但我不知道如何做到这一点?
我们将不胜感激。
答案 0 :(得分:1)
public static void main(String[] args) {
URLClassLoader classLoader = (URLClassLoader)Main.class.getClassLoader();
System.out.println(Arrays.toString(classLoader.getURLs()));
}
将此方法放在Main类中,并在发出此错误的系统中执行它。它将显示从中解析依赖项的所有路径。找出是否有任何路径有旧版本的jar。
希望这有助于你的事业。
答案 1 :(得分:1)
似乎在类路径上有不同版本的类,它在类加载器层次结构中更高。 Weblogic本身有很多嵌入weblogic安装的库。验证是否使用-verbose JVM选项来查看类加载的位置。如果是这种情况,那么使用weblogic部署描述符类加载过滤应该像你实际那样解决你的问题。 (因为库中的shiped位于系统类路径上,它们优先于存档中的任何其他lib)。使用此类加载过滤,您可以打破此并加载正确的版本。我猜不同的容器有不同的标签。查看weblogic文档。
希望这有帮助。