我有一个.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)
...
解决此问题的最佳方法是什么?
我正在使用Hibernate 3.3.1.GA和WebLogic 10.3.2.0。
答案 0 :(得分:12)
WebLogic有自己的ANTLR版本,这会导致您遇到的问题。使用Web应用程序解决此问题的一种方法是将prefer-web-inf-classes
中的weblogic.xml
元素设置为true
。
<weblogic-web-app>
....
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
....
</weblogic-web-app>
weblogic.xml
进入WEB-INF
。
答案 1 :(得分: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>
答案 2 :(得分:6)
如果您有像我这样的EAR项目,那么您需要将此元素添加到weblogic ear部署描述符[ weblogic-application.xml ]
<wls:prefer-application-packages>
<wls:package-name>antlr.*</wls:package-name>
</wls:prefer-application-packages>
答案 3 :(得分:2)
我想在weblogic 11g(Weblogic Server 10.3.5)上部署WAR文件。通常,在Web应用程序中,将有web.xml。为了使Weblogic选择web.xml中提到的类,我们需要在WEB-INF / weblogic.xml中包含一个文件。以下是代码。
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app">
<context-root>ProjectName</context-root>
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
</weblogic-web-app>
这解决了我的问题,我能够在weblogic上部署WAR。请从weblogic控制台启用Web存档选项。
答案 4 :(得分:1)
我有一个EAR,所以我不得不添加一个文件META-INF / weblogic-application.xml
文件本身非常简单,这适用于Oracle WebLogic 11g,a.k.a. WebLogic Server 10.3.x:
<? xml version="1.0" ?>
<weblogic-application>
<prefer-application-packages>
<package-name>antlr.*</package-name>
</prefer-application-packages>
</weblogic-application>
答案 5 :(得分:0)
对于那些尝试上述方法在antlr
描述符中将weblogic-application.xml
命名空间声明为“prefer-application-packages”并且仍有相同问题的人,您可能会尝试覆盖启动脚本中weblogic-domain的类路径,直接包含项目库:
为此,请执行以下步骤:
1。)在您的Weblogic域名主页中找到文件bin/startWeblogic.[sh|cmd]
2.)找到显示set SAVE_CLASSPATH=
3。)替换为此(在Windows上,相应地适应mac / * nix)
set CLASSPATH=C:\SomeProject\WebContent\WEB-INF\lib\*;%SAVE_CLASSPATH%
rem set CLASSPATH=%SAVE_CLASSPATH%
set SAVE_CLASSPATH=
4。)保存,(重新)启动你的weblogic域并交叉手指。
Nota bene:如果您的域名是多个已部署的人工制品的所在地,这可能不是一个好主意。此外,在某些情况下,可能只能从WEB-INF / lib文件夹中选择相关的jar文件。当然,如果你使用maven,你需要在其他地方托管这些库。
此解决方案也适用于从eclipse Servers视图中启动的Weblogic Server,因为Oracle Weblogic适配器使用命令行脚本来启动服务器。