当前位置: 代码迷 >> Web前端 >> linux上weblogic部署SSH项目出现有关问题 org.hibernate.hql.ast.HqlToken
  详细解决方案

linux上weblogic部署SSH项目出现有关问题 org.hibernate.hql.ast.HqlToken

热度:770   发布时间:2012-10-06 17:34:01.0
linux下weblogic部署SSH项目出现问题 org.hibernate.hql.ast.HqlToken
Windows下 Tomcat下的SSH项目要部署到linux weblogic下,首先对项目涉及目录(D:\ linux 没有盘符)相关的地方进行修改(通过System.getProperty("os.name"))。

1、将项目部署后,能访问到jsp页面,但是一提交就会出现取不到数据现象,于是乎在windows下再进行测试,是能取到数据,在同事的帮助下通过打Log,查看哪行代码有问题(Linux下自己没有相关的IDE,只能在Windows下修改代码,再将代码部署到linux下),通过主动抛异常的方式找到错误所在:
nested exception is org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken

通过网上查资料(这里不给链接了 公司的网络不敢恭维啊,又断了),大致原因就是包冲突(antlr.jar Hibernate和weblogic都要要这个包,不知道该加载谁的),有好几个解决方案,有的方案很麻烦的要修改jar包之类的,我选择了一个最简单的,修改配置文件,也就是让weblogic强制先加载项目的jar包。

weblogic.xml

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app
xmlns="http://www.bea.com/ns/weblogic/weblogic-web-app"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-web-app http://www.bea.com/ns/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd">
<container-descriptor>
<index-directory-enabled>true</index-directory-enabled>
<!-- 关键!!!先加载web-inf下的jar包 -->
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
</weblogic-web-app>

weblogic-application.xml

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-application>
<!-- 用于解决anltr jar包冲突问题 -->
<prefer-application-packages>
<package-name>antlr.*</package-name>
</prefer-application-packages>
</weblogic-application>

2、将上述配置文件加到项目上,从新部署项目,然而又出现下面的问题:
java.lang.NoSuchMethodError: javax.xml.transform.dom.DOMResult.getNextSibling()Lorg/w3c/dom/Node;
        at org.apache.xalan.transformer.TransformerIdentityImpl.createResultContentHandler(TransformerIdentityImpl.java:201)
        at org.apache.xalan.transformer.TransformerIdentityImpl.setDocumentLocator(TransformerIdentityImpl.java:881)
        at com.opensymphony.xwork2.util.DomHelper$DOMBuilder.setDocumentLocator(DomHelper.java:233)
        at com.opensymphony.xwork2.util.location.LocationAttributes$Pipe.setDocumentLocator(LocationAttributes.java:302)
        at com.opensymphony.xwork2.util.DomHelper$StartHandler.setDocumentLocator(DomHelper.java:292)
        Truncated. see log file for complete stacktrace

我感觉是xml无法解析,是不是配置文件和weblogic版本不一致的原因,由于我的网又被断了,不能百度,Google现在在中国基本废了。在指导人的帮助下,说是jar包冲突。于是将xml-apis-1.0.b2.jar和xercesImpl.jar删了,问题终于解决了。

PS:对于有经验的人来说这些问题都可以自己独立解决,然而对于我这个刚从大学毕业大学生来说,自己解决方案还是很少,就像第一个错误,我一直在找我部署的问题,我直接部署的是文件夹而不是war包的形式,还有就是需要打断点来找错我所在(然而Linux下没有IDE),可以通过打log来找问题所在的地方,还有就是项目做的比较完善,有的异常没有抛出来,需要自己抛。最后一点就是公司的网啊...真是不敢恭维,我大周末的来重现问题,又断网了...
  相关解决方案