在开发Hibernate的Web项目应用时使用tomcat时运行很好,但实际生产环境中要部署到WebLogic就会出现一些ClassNotFoundException异常。

org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken异常
这是使用Hibernate 3.0以后版本均会出现的异常;

exception is java.lang.NoSuchMethodError: javax.persistence.UniqueConstraint.name()Ljava/lang/String,如果使用Hibernate 3.5,在实体中使用了唯一约束会出现这个异常,因为在Hibernate 3.5使用了最新的Jpa 2.0,WebLogic中还是Jpa 1.0, UniqueConstraint.name在Jpa 2.0才有。

exception is java.lang.NoSuchMethodError: org.apache.commons.lang.ArrayUtils.isNotEmpty,我在项目使用了比较新版本的commons-lang-2.5.jar在webLogic 10.3会报这个异常;

在网search一下,解决ClassNotFoundException异常最常用的办法就是将出现异常类所在的jar包入到weblogic环境中的classpath最前面加载,将相应的antlr-2.7.6.jar、hibernate-jpa-2.0-api-1.0.0.Final.jar、commons-lang-2.5.jar copy到${WL_HOME/}server/lib/或其他目录,可以修改${DOMAIN_HOME}/bin/startWebLogic.sh,在CLASSPATH之前加上下面一句:

Java代码  
  1. PRE_CLASSPATH=”${WL_HOME/}server/lib/antlr-2.7.6.jar:${WL_HOME/}server/lib/hibernate-jpa-2.0-api-1.0.0.Final.jar:${WL_HOME/}server/lib/commons-lang-2.5.jar”

并将修改为CLASSPATH="${SAVE_CLASSPATH}"

Java代码  
  1. CLASSPATH="${PRE_CLASSPATH}:${SAVE_CLASSPATH}"

或者修改${DOMAIN_HOME}/bin/setDomainEnv.sh,在setDomainEnv.sh前面加入一句:

Java代码  
  1. EXT_PRE_CLASSPATH=”${WL_HOME/}server/lib/antlr-2.7.6.jar:${WL_HOME/}server/lib/hibernate-jpa-2.0-api-1.0.0.Final.jar:${WL_HOME/}server/lib/commons-lang-2.5.jar”
  2. export EXT_PRE_CLASSPATH

在我项目实践中发现加入antlr-2.7.6.jar、hibernate-jpa-2.0-api-1.0.0.Final.jar、commons-lang-2.5.jar后,前两个起作用,异常消除,commons-lang-2.5.jar没有作用,exception is java.lang.NoSuchMethodError: org.apache.commons.lang.ArrayUtils.isNotEmpty异常依旧,当时没有解决方法,只好在项目中去掉ArrayUtils.isNotEmpty,杯具!!!

后来在网上找到一种更有效解决ClassNotFoundException的,可以解决所有WebLogic中的ClassNotFoundException。改解决办法是将web项目包含进ear包中。将web项目打包成war文件,在war文件相同目录下建立META-INF目录,目录建立application.xml、weblogic-application.xml两个文件,文件内容很简单,开发过weblogic EJB应用的应该很清楚。
application.xml

Java代码  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE application PUBLIC '-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN' 'http://java.sun.com/dtd/application_1_3.dtd'>
  3. <application>
  4. <display-name>cckzzx</display-name>
  5. <description>cckzzx</description>
  6. <module>
  7. <web>
  8. <web-uri>cckzzx.war</web-uri>
  9. <context-root>cckzzx</context-root>
  10. </web>
  11. </module>
  12. </application>

weblogic-application.xml

Java代码  
  1. <?xml version="1.0"?>
  2. <weblogic-application xmlns="http://www.bea.com/ns/weblogic/90"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  4. <application-param>
  5. <param-name>webapp.encoding.default</param-name>
  6. <param-value>UTF-8</param-value>
  7. </application-param>
  8. <prefer-application-packages>
  9. <package-name>org.apache.commons.*</package-name>
  10. <package-name>antlr.*</package-name>
  11. <package-name>javax.persistence.*</package-name>
  12. </prefer-application-packages>
  13. </weblogic-application>

<prefer-application-packages>
表示在weblogic中优先使用当前应用中的jar包
最后将war文件和META-INF目录打包成ear包、部署。在这里我参考网上资料写了一个ant脚本build.xml对项目进行ear打包
build.xml

Java代码  
  1. <?xml version="1.0"?>
  2. <project name="cckzzx" default="ear" basedir=".">
  3. <property name="project.name" value="cckzzx" />
  4. <property name="app.dir" value="${basedir}" />
  5. <property name="src.java.dir" value="${app.dir}/src/main/java" />
  6. <property name="src.resources.dir" value="${app.dir}/src/main/resources" />
  7. <property name="weblogic.home" value="/opt/Oracle/Middleware/wlserver_10.3" />
  8. <property name="wls.username" value="weblogic" />
  9. <property name="wls.password" value="weblogic123" />
  10. <property name="wls.hostname" value="localhost" />
  11. <property name="wls.port" value="7001" />
  12. <property name="wls.server.name" value="AdminServer" />
  13. <property name="build.dir" value="${app.dir}/build" />
  14. <property name="build.classes.dir" value="${build.dir}/classes" />
  15. <property name="build.tmp.dir" value="${build.dir}/tmp" />
  16. <path id="build.classpath" description="编译时的classpath路径">
  17. <fileset dir="${basedir}/WebRoot/WEB-INF/lib">
  18. <include name="*.jar" />
  19. </fileset>
  20. <fileset dir="${weblogic.home}/server/lib">
  21. <include name="weblogic.jar" />
  22. </fileset>
  23. <pathelement location="${build.classes.dir}" />
  24. </path>
  25. <taskdef name="wldeploy" classname="weblogic.ant.taskdefs.management.WLDeploy" classpathref="build.classpath" />
  26. <target name="clean" description="删除编译目录">
  27. <delete dir="${build.dir}" />
  28. </target>
  29. <target name="prepare" depends="clean" description="创建编译目录">
  30. <mkdir dir="${build.dir}" />
  31. <mkdir dir="${build.classes.dir}" />
  32. <mkdir dir="${build.tmp.dir}" />
  33. </target>
  34. <target name="compile" depends="prepare" description="编译">
  35. <javac srcdir="${src.java.dir}" destdir="${build.classes.dir}" compiler="org.eclipse.jdt.core.JDTCompilerAdapter" encoding="UTF-8" source="1.6" target="1.6" debug="on" deprecation="on" optimize="off" includes="**">
  36. <classpath refid="build.classpath" />
  37. </javac>
  38. </target>
  39. <target name="ear" depends="compile" description="打包EAR包">
  40. <jar jarfile="${build.dir}/${project.name}.jar">
  41. <fileset dir="${build.classes.dir}">
  42. <include name="com/**/*.class" />
  43. <include name="**/*.xml" />
  44. </fileset>
  45. </jar>
  46. <mkdir dir="${build.tmp.dir}/WebRoot" />
  47. <copy todir="${build.tmp.dir}/WebRoot">
  48. <fileset dir="${app.dir}/WebRoot">
  49. <exclude name="WEB-INF/classes/**" />
  50. </fileset>
  51. </copy>
  52. <copy todir="${build.tmp.dir}/WebRoot/WEB-INF/lib">
  53. <fileset file="${build.dir}/${project.name}.jar" />
  54. </copy>
  55. <mkdir dir="${build.tmp.dir}/WebRoot/WEB-INF/classes" />
  56. <copy todir="${build.tmp.dir}/WebRoot/WEB-INF/classes">
  57. <fileset dir="${src.resources.dir}" />
  58. </copy>
  59. <war warfile="${build.dir}/${project.name}.war" webxml="${build.tmp.dir}/WebRoot/WEB-INF/web.xml">
  60. <fileset dir="${build.tmp.dir}/WebRoot">
  61. <exclude name="WEB-INF/web.xml" />
  62. </fileset>
  63. </war>
  64. <ear earfile="${build.dir}/${project.name}.ear" appxml="${app.dir}/src/weblogic/META-INF/application.xml">
  65. <fileset dir="${app.dir}/src/weblogic">
  66. <include name="META-INF/weblogic-application.xml" />
  67. </fileset>
  68. <fileset dir="${build.dir}">
  69. <include name="${project.name}.war" />
  70. </fileset>
  71. </ear>
  72. <delete file="${build.dir}/${project.name}.jar" />
  73. <delete file="${build.dir}/${project.name}.war" />
  74. <delete dir="${build.classes.dir}" />
  75. <delete dir="${build.tmp.dir}" />
  76. </target>
  77. <target name="deploy" depends="ear,undeploy" description="布署EAR服务">
  78. <wldeploy action="deploy" name="${project.name}" source="${build.dir}/${project.name}.ear" targets="${wls.server.name}" user="${wls.username}" password="${wls.password}" adminurl="t3://${wls.hostname}:${wls.port}" debug="true" verbose="true" failοnerrοr="true" />
  79. <echo message="come here......" />    <echo message="deploy success......." />
  80. </target>
  81. <target name="undeploy" description="删除EAR服务">
  82. <wldeploy action="undeploy" name="${project.name}" targets="${wls.server.name}" user="${wls.username}" password="${wls.password}" adminurl="t3://${wls.hostname}:${wls.port}" debug="false" verbose="false" failοnerrοr="false" />
  83. </target>
  84. </project>

如果项目中使用了泛型,使用该脚本如果抛出无法确定 T 的类型参数;对于上限为 T ,java.lang.Object 的类型变量 T,不存在唯一最大实例异常,在eclipse中可以编译运行,为什么用ant就不行了呢?
解决方法是在classpath加入${eclipse_home}/plugins/org.eclipse.jdt.core_3.6.1.v_A68_R36x.jar和从org.eclipse.jdt.core_3.6.1.v_A68_R36x.jar解决出来的jdtCompilerAdapter.jar两个包。

在webLogic 10.3中部署Hibernate 3.5出现 ClassNotFoundException解决办法相关推荐

  1. 虚拟机中火狐连不上服务器,VMware虚拟机中Ubuntu18.04无法连接网络的解决办法

    VMware虚拟机中Ubuntu18.04无法连接网络的解决办法 虚拟机中Ubuntu18.04无法连接网络的解决办法,具体内容如下 对VMware虚拟机进行恢复默认网络设置 恢复虚拟网络默认设置(在 ...

  2. C语言在读取txt类型文件中的汉字字符串出现乱码的解决办法

    题目 C语言在读取txt类型文件中的汉字字符串出现乱码的解决办法 以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步.--来自考研路上的lwj 一.前言 当我们在练习文件这一章节时,因为需 ...

  3. 微服务架构中的雪崩问题产生原因及解决办法

    微服务架构中的雪崩问题产生原因及解决办法 参考文章: (1)微服务架构中的雪崩问题产生原因及解决办法 (2)https://www.cnblogs.com/panchanggui/p/10330924 ...

  4. Xamarin中VS无法连接Mac系统的解决办法

    Xamarin中VS无法连接Mac系统的解决办法 按照以下步骤排查: (1)确认Mac系统中安装Xamarin.iOS开发必备的组件,如Mono.Xamarin.iOS. (2)将Windows和Ma ...

  5. Spring MVC普通类或工具类中调用service报空空指针的解决办法(调用service报java.lang.NullPointerException)...

    当我们在非Controller类中应用service的方法是会报空指针,如图: 这是因为Spring MVC普通类或工具类中调用service报空null的解决办法(调用service报java.la ...

  6. html子布局不超出父布局,详解flex布局中保持内容不超出容器的解决办法

    在移动端,flex 布局很好用,它能够根据设备宽度来自动调整容器的宽度,用起来很方便,已经越来越离不开它,但是最近在做项目的时候发现一个问题. 就是在一个设置了 flex:1 的容器中,如果文字很长, ...

  7. mouseup 左键_javascript中mouseup事件丢失的原因与解决办法

    这篇文章主要跟大家介绍了关于Javascript中mouseup事件丢失的原因与解决办法的相关资料,文中给出详细的示例代码供大家参考学习,需要的朋友们下面跟着小编一起来学习学习吧. 前言 当实现类似E ...

  8. HTTP中ip地址伪造的问题以及解决办法

    HTTP中ip地址伪造的问题以及解决办法 参考文章: (1)HTTP中ip地址伪造的问题以及解决办法 (2)https://www.cnblogs.com/codefly-sun/p/5941314. ...

  9. Vue中:error ‘XXXXX‘ is not defined no-undef解决办法

    Vue中:error 'XXXXX' is not defined no-undef解决办法 语法没错居然报错了 解决方法: 拓展 语法没错居然报错了 解决方法: 在使用vue的时候,使用一个全局变量 ...

最新文章

  1. 这70个Java必背英语单词不会,就别说你是Java程序员!
  2. [导入]3.5 [ Enterprise Library ]注入模型设计
  3. Apache配置代理服务器的方法(2)
  4. 6、处理大数据对象(CLOB 数据小说+BLOG 数据图片,电影,音乐)
  5. c语言为什么数据写不进文件,求大神看看为什么不能将数据写入文件
  6. 她不理我了,怎么办?
  7. 弱引用的用途:在底层C++对象被上层python脚本对象使用时(转)
  8. d9900 修改ip 思科dcm_思科设备SSH登陆详细配置过程
  9. 使用Flash彻底美化你的程序
  10. 开头什么的肯定要自我介绍然后把它扔到置顶咯_~
  11. Java的Exception异常机制(一)
  12. SAP报表导出格式设置
  13. 李玉刚与石头的雨花石
  14. JavaScript——与君初相识
  15. Virtualbox拓展包安装失败
  16. 项目研发管理实施经验谈(1)
  17. ECSHOP 银联在线支付 PHP 银联商务
  18. Windows Embedded Compact 7可定制化互联网电视
  19. Android访问中央气象台的天气预报API得到天气数据
  20. matlab使用LMI对二阶系统进行H无穷控制

热门文章

  1. 计算机网络系统系统设备配置,计算机网络系统技术方案及设备配置方案
  2. java中子线程与主线程通信_Android笔记(三十二) Android中线程之间的通信(四)主线程给子线程发送消息...
  3. htop linux命令详解,htop使用详解
  4. 执行一次怎么会写入两次数据_浅谈 Redis 数据持久化之 AOF 模式
  5. pycharm中配置r语言_【R语言】R语言中的循环
  6. 实现线段切割法_切割晶圆及玻璃产品的现代技术与设备
  7. 大数据技术之 Kafka (第 3 章 Kafka 架构深入 ) Kafka 消费者
  8. 2021当代青年婚恋状态研究报告
  9. 2021消费者置业信心指数报告
  10. java ssm框架 缓存_SSM框架之Mybatis(7)延迟加载、缓存及注解