搞掂 EJB3 JPA Hibernate 在Weblogic11g的部署

今天,终于解决了 EJB3+CMP+JPA1.0+Hibernate3 在 Weblogic10.3.3下的部署。核心方案是利用 Weblogic针对一个企业应用包可以单独加载类的机制,从而不受weblogic系统本身的 antlr2.7.3版本与Hibernate3使用的Antlr2.7.6冲突的限制了。
1.打成一个 EAR 包。
EAR
--META-INF
--application.xml
--weblogic-application.xml
--lib
--hibernateXXXX.jar(多个文件)
--antlr2.7.6.jar
--xxx(ejb).jar
--xxx(ejb).jar
2.application.xml描述有哪些ejb和web包。
如:
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:application="http://java.sun.com/xml/ns/javaee/application_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd" id="Application_ID" version="5">
<display-name>eb_b2b_sqs_ear</display-name>
<module>
<ejb>eb_platform_ejb.jar</ejb>
</module>
<module>
<ejb>eb_cache_ejb.jar</ejb>
</module>
<module>
<ejb>eb_b2b_ejb.jar</ejb>
</module>
<module>
<ejb>eb_b2c_ejb.jar</ejb>
</module>
</application>

3.weblogic-application.xml描述内容为:
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-application xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-application" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/javaee_5.xsd http://xmlns.oracle.com/weblogic/weblogic-application http://xmlns.oracle.com/weblogic/weblogic-application/1.2/weblogic-application.xsd">
<!--weblogic-version:10.3.4-->
<wls:application-param>
<wls:param-name>webapp.encoding.default</wls:param-name>
<wls:param-value>UTF-8</wls:param-value>
</wls:application-param>
<wls:prefer-application-packages>
<wls:package-name>antlr.*</wls:package-name>
</wls:prefer-application-packages>
</wls:weblogic-application>

---------------OK。

网上提到的其他解决方案:
1.把 antlr2.7.6.jar放到 weblogic启动脚本的classpath最前面 --- 这个方案会破坏weblogic原有的功能,部署会经常提示 java.lang.NoClassDefFoundError: antlr/TokenStreamException 。虽然不影响业务应用本身,但是终究不是好办法。
2.在 WEB-INF/weblogic.xml里添加:
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.1/weblogic-web-app.xsd">
<wls:weblogic-version>10.3.4</wls:weblogic-version>
<wls:context-root>eb_web</wls:context-root>
<wls:container-descriptor>
<wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
</wls:container-descriptor>
</wls:weblogic-web-app>
---这个方案是针对web应用的,如果hibernate是在web端使用的,可以采用。如果hibernate在ejb端使用,就采用本文开头的做法。

在此,感谢无数网友的文章,这个方法不是我发明的。
在此,鄙视oracle技术服务人员,我一个月前咨询过(我有客户支持识别号),他们说:hibernate没有经过他们的验证,要改,只能改hibernate,推荐使用 eclipseLink。
我尝试改过EclipseLink,但是EclipseLink和Hibernate对HQL写法,还是有区别的(如:select count(*)和select count(1) , left join 别名等),程序已经做完了,改动太多,就放弃了。

庆祝一下
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值