[转帖]WebLogic常见问题_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3721 | 回复: 0   主题: [转帖]WebLogic常见问题        下一篇 
liulin_2
注册用户
等级:少校
经验:1143
发帖:85
精华:5
注册:2012-12-10
状态:离线
发送短消息息给liulin_2 加好友    发送短消息息给liulin_2 发消息
发表于: IP:您无权察看 2012-12-13 15:09:39 | [全部帖] [楼主帖] 楼主

1ClassNotFoundExceptionorg.hibernate.hql.ast.HqlToken异常

使用Hibernate的工程部署到WebLogic下时,经常会出现ClassNotFoundException:org.hibernate.hql.ast.HqlToken的问题,出现该问题的主要原因在于WebLogic已经集成了antlr.jar包,在使用Hibernate时,会先加载其自身所带的antlr.jar包,会和Hibernate捆绑的antlr-2.7.6.jar冲突,导致上述错误。

解决方法:

(1)在myeclipse7.0中:

依次点击windows→preferences→myeclipse workbench→servers→weblogic→weblogic10.x→path,在prepend to classpath选项中,把hibernate要用到的包antlr-2.7.6.jar添加到weblogic的classpath中。

这样在weblogic便可以通过myeclipse正常启动,以上提到的问题解决。

(2)如果想要通过weblogic自带的脚本来运行:

将工程里的antlr-2.7.6.jar拷贝到weblogic的wlserver_10.3\server\

lib文件夹下面,在user_projects\domains\base_domain\bin里找到startWebLogic.cmd文件,找到:

set CLASSPATH=%SAVE_CLASSPATH%, 在下面增加以下3行代码:

@REM hibernate3.0
set PRE_CLASSPATH=%WL_HOME%\server\lib\antlr-2.7.6.jar?
set CLASSPATH=%PRE_CLASSPATH%;%CLASSPATH%


保存后双击该脚本启动weblogic,即可由非myeclipse的方式启动工程了。

2、工程打包成.war部署到WebLogic后,出现如下问题:

Error: weblogic.management.DeploymentException: Cannot set web app root system property when WAR file is not expanded - with nested exception: [java.lang.IllegalStateException: Cannot set web app root system property when WAR file is not expanded]


原因为org.springframework.web.util.Log4jConfigListener 调用了getRealPath()方法,返回null,

String root = servletContext.getRealPath("/");
if (root == null) {
      throw new IllegalStateException("Cannot set web app root system property when WAR file is not expanded");
}


3、关于request.getRealPath()的出错

而在servlet中使用getServletContext.getRealPath()这个方法收到war 和non-war的影响,以及不同app server实现的影响,运气好的话,你常常会得到null,嘿嘿,比如你在weblogic上部署war文件,又调用这个方法..

推荐ServletContext.getResourceAsStream

参考资料:http://bbs.chinaunix.net/viewthread.php?tid=383861

关于serveletContext.getRealPath返回NULL和不同的app server返回不同的结果

resoure url:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=121&threadID=12968&start=0&tstart=0


问题:

我的应用有几个配置文本配置文件(是一些报表的模板),我放在WEB-INF下面的config目录下,我有程序中是这样得到这个config的实际路径的,先用 serveletContext.getRealPath得到根路径,tomcat中比如是c:\tomcat\webapp\test,然后我加上 "/WEB-INF/config/aa.config",这样得到文件的path然后进行读入,  应用在tomcat上跑是ok的,后来将war放到weblogic上,出错,原因是:在weblogic上用getRealPath得到的是像myserver\stage\_appsdir_test_war\test.war!\WEB-INF\config....这样的路径,于是一直报FileNotFoundException。

解决:

serveletContext.getRealPath

这个方法在不同的服务器上所获得的实现是不一样的,这种情况我也同样遇到过,建议是通过classloader来获得你配置的资源文件,context.getRealPath("/")可能返回了null,你可以输入来看看,对一个打包的应用来说,是没有RealPath的概念的,调用getRealPath只会简单地返回null。其实,也很好理解,一个文件被打包入了.war文件,就不存在目录结构了(虽然包中仍然存在目录结构,但这不等同于文件系统中的目录结构)。所以,对war包中的资源是无法得到RealPath的。这样也就无从通过文件IO进行读取了。那么,如何读取war包中的资源呢?答案是使用ServletContext.getResourceAsStream

("/WEB-INF/config/aa.config")方法。

原则:基本上就是尽量使用j2ee规范中的各层次classloader来获取资源,而不是试图去找文件的绝对路径方法:调用this.getClass().getClassLoader().getResource("/").getPath(); 获取到classes目录的全路径

使用:在得到classes目录的全路径后再根据字符串的截取与拼装达到你的要求即可。

4getServletContext()方法报错

在java文件中执行getServletContext()方法时,报weblogic.servlet.jsp.getServletContext()不存在的错误,解决办法:把this.getServletContext()改为this.getServletConfig().getServletContext()。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论