在WebLogic中运行时ClassNotFoundException(HqlToken)

lee*_*777 8 java orm hibernate weblogic

我有一个.war文件,用于通常在Jetty中正常运行的应用程序.

我正在尝试将应用程序移植到WebLogic中运行,但在启动时我遇到了以下异常:

ERROR:Foo - Error in named query: findBar
org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken [from Bar]
    at org.hibernate.hql.ast.HqlLexer.panic(HqlLexer.java:80)
    at antlr.CharScanner.setTokenObjectClass(CharScanner.java:340)
    at org.hibernate.hql.ast.HqlLexer.setTokenObjectClass(HqlLexer.java:54)
    at antlr.CharScanner.<init>(CharScanner.java:51)
    at antlr.CharScanner.<init>(CharScanner.java:60)
    at org.hibernate.hql.antlr.HqlBaseLexer.<init>(HqlBaseLexer.java:56)
    at org.hibernate.hql.antlr.HqlBaseLexer.<init>(HqlBaseLexer.java:53)
    at org.hibernate.hql.antlr.HqlBaseLexer.<init>(HqlBaseLexer.java:50)
    ...
Run Code Online (Sandbox Code Playgroud)

解决这个问题的最佳方法是什么?

我正在使用Hibernate 3.3.1.GA和WebLogic 10.3.2.0.

Pas*_*ent 12

WebLogic有自己的ANTLR版本,这会导致您遇到的问题.使用Web应用程序解决此问题的一种方法是将prefer-web-inf-classes元素设置weblogic.xmltrue.

<weblogic-web-app>
  ....
  <container-descriptor>
    <prefer-web-inf-classes>true</prefer-web-inf-classes>
  </container-descriptor>
  ....
</weblogic-web-app>
Run Code Online (Sandbox Code Playgroud)

weblogic.xml中去WEB-INF.


Ale*_*mov 11

在我看来,最好的解决方案war:创建文件webapp\WEB-INF\weblogic.xml并放置文本

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app>
    <container-descriptor>
        <prefer-web-inf-classes>false</prefer-web-inf-classes>
        <prefer-application-packages>
            <package-name>antlr.*</package-name>
        </prefer-application-packages>
    </container-descriptor>
</weblogic-web-app>
Run Code Online (Sandbox Code Playgroud)

  • 我也认为这是最好的解决方案.将`<prefer-web-inf-classes>`设置为true,可以使用weblogic获得大量重复库的错误.例如"java.lang.LinkageError ... XPath有不同的Class对象" (3认同)

sha*_*lee 6

如果您有像我这样的EAR项目,那么您需要将此元素添加到weblogic ear部署描述符[ weblogic-application.xml ]

<wls:prefer-application-packages>
        <wls:package-name>antlr.*</wls:package-name>
    </wls:prefer-application-packages>
Run Code Online (Sandbox Code Playgroud)