OC4J与Hibernate和XFire整合问题

来源:互联网 发布:java总是提示没有安装 编辑:程序博客网 时间:2024/06/04 19:43

一个在其他应用服务器上运行得好好的应用程序,放到OC4J上来就一大堆问题,相信许多使用OC4J的用户都有此感受。在应用服务器的转换过程中,通常都会出现很多问题,而OC4J则是出现问题的佼佼者。

如果你在应用程序中使用了Hibernate和XFire,并且在tomcat上跑得非常正常,而转到OC4J上来的时候,出现一大堆问题,那很可能就与OC4J类加载有关系。这时,你在发布项目到OC4J上的时候,选择配置类加载,如下图

 

默认情况下,OC4J会自动为我们加载许多类,如下图

这时,你可以把上面的“继承父级应用程序的共享库导入”选项去掉,减少与你当前应用程序所用到的包的冲突。并且把下面的配置Web模块类加载程序中的“首先搜索本地类”的选项选上,如下图

 

这样就可以解决大部分包冲突的问题。而Hibernate和XFire中各自都有一个叫xml-api的jar包,它们的版本不一样,在使用XFire发布WebService时该jar包会与Hibernate中的cglib包中的某个类发生冲突,导致生成wsdl的时候发生错误,所以如果发生这种错误的时候,可以把两个xml-api包从项目中删除,这时运行就正常了。注意,有时候发布时已经成功了,但访问应用程序时发生错误时,不要一看到错误

就以为是配置上的问题,因为OC4J这个东西经常性内存溢出,所以当你发布成功后,建议重启一下服务器,再跑一下程序看看是否正常再

考虑是否配置上的问题。

另外补充一句,可能许多开发者都遇到过OC4J经常内存溢出的问题,该问题也在OC4J的版本说明中有提及到。解决方案有多个,我这里介绍一种官方的解决方案:在OC4J 启动时增加 PermGen 空间。为此,您可以在 oc4j.jar 命令行中设置一个系统属性:

java -jar -XX:MaxPermSize=256M oc4j.jar

 

或者使用 oc4j.cmd 启动命令,如下所示:

SET JAVA_HOME=<java_home>SET JVM_ARGS=-XXMaxPerSize=256MSET ORACLE_HOME=<oc4j_home>oc4j.cmd -start
另外,如果使用myeclipse开发的开发者,建议不要使用myeclipse提供OC4J的部署方式,而建议使用OC4J的部署管理页面进行部署。有时候
OC4J的许多报错的信息在myeclipse的控制台中都不会显示,则可以通过管理页面中的日志进行查看。
我相信,通过上面的配置,可以解决大部分的OC4J包冲突的问题,并且能让OC4J与Hibernate和XFire很好的合并在一起。
原创粉丝点击