`
aibozeng
  • 浏览: 11850 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

搞掂 EJB3 JPA Hibernate 在Weblogic11g的部署

    博客分类:
  • EJB3
阅读更多
今天,终于解决了 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 别名等),程序已经做完了,改动太多,就放弃了。

   庆祝一下

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics