`
sundoctor
  • 浏览: 325174 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在webLogic 10.3中部署Hibernate 3.5出现 ClassNotFoundException解决办法

    博客分类:
  • Java
阅读更多
在开发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之前加上下面一句:
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}"
CLASSPATH="${PRE_CLASSPATH}:${SAVE_CLASSPATH}"


或者修改${DOMAIN_HOME}/bin/setDomainEnv.sh,在setDomainEnv.sh前面加入一句:
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”
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
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC '-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN' 'http://java.sun.com/dtd/application_1_3.dtd'>
<application>
  <display-name>cckzzx</display-name>
  <description>cckzzx</description>
  <module>
    <web>
      <web-uri>cckzzx.war</web-uri>
      <context-root>cckzzx</context-root>
    </web>
  </module>
</application>


weblogic-application.xml
<?xml version="1.0"?>
<weblogic-application xmlns="http://www.bea.com/ns/weblogic/90"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<application-param>
		<param-name>webapp.encoding.default</param-name>
		<param-value>UTF-8</param-value>
	</application-param>
	<prefer-application-packages>
		<package-name>org.apache.commons.*</package-name>	
		<package-name>antlr.*</package-name>
		<package-name>javax.persistence.*</package-name>
	</prefer-application-packages>
</weblogic-application>

<prefer-application-packages>
表示在weblogic中优先使用当前应用中的jar包
最后将war文件和META-INF目录打包成ear包、部署。在这里我参考网上资料写了一个ant脚本build.xml对项目进行ear打包
build.xml
<?xml version="1.0"?>
<project name="cckzzx" default="ear" basedir=".">
	<property name="project.name" value="cckzzx" />
	<property name="app.dir" value="${basedir}" />
	<property name="src.java.dir" value="${app.dir}/src/main/java" />
	<property name="src.resources.dir" value="${app.dir}/src/main/resources" />
	<property name="weblogic.home" value="/opt/Oracle/Middleware/wlserver_10.3" />
	<property name="wls.username" value="weblogic" />
	<property name="wls.password" value="weblogic123" />
	<property name="wls.hostname" value="localhost" />
	<property name="wls.port" value="7001" />
	<property name="wls.server.name" value="AdminServer" />
	<property name="build.dir" value="${app.dir}/build" />
	<property name="build.classes.dir" value="${build.dir}/classes" />
	<property name="build.tmp.dir" value="${build.dir}/tmp" />
	<path id="build.classpath" description="编译时的classpath路径">
		<fileset dir="${basedir}/WebRoot/WEB-INF/lib">

		<include name="*.jar" />
		</fileset>
		<fileset dir="${weblogic.home}/server/lib">
<include name="weblogic.jar" />
		</fileset>
		<pathelement location="${build.classes.dir}" />
	</path>
	<taskdef name="wldeploy" classname="weblogic.ant.taskdefs.management.WLDeploy" classpathref="build.classpath" />
	<target name="clean" description="删除编译目录">
		<delete dir="${build.dir}" />
	</target>
	<target name="prepare" depends="clean" description="创建编译目录">
		<mkdir dir="${build.dir}" />
		<mkdir dir="${build.classes.dir}" />
		<mkdir dir="${build.tmp.dir}" />
	</target>
	<target name="compile" depends="prepare" description="编译">
<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="**">
	<classpath refid="build.classpath" />
	</javac>
	</target>
	<target name="ear" depends="compile" description="打包EAR包">
	<jar jarfile="${build.dir}/${project.name}.jar">
	<fileset dir="${build.classes.dir}">
	<include name="com/**/*.class" />
	<include name="**/*.xml" />
	</fileset>
	</jar>
	<mkdir dir="${build.tmp.dir}/WebRoot" />
	<copy todir="${build.tmp.dir}/WebRoot">
	<fileset dir="${app.dir}/WebRoot">
	<exclude name="WEB-INF/classes/**" />
	</fileset>
	</copy>
	<copy todir="${build.tmp.dir}/WebRoot/WEB-INF/lib">
	<fileset file="${build.dir}/${project.name}.jar" />
	</copy>
	<mkdir dir="${build.tmp.dir}/WebRoot/WEB-INF/classes" />
	<copy todir="${build.tmp.dir}/WebRoot/WEB-INF/classes">
	<fileset dir="${src.resources.dir}" />
	</copy>
	<war warfile="${build.dir}/${project.name}.war" webxml="${build.tmp.dir}/WebRoot/WEB-INF/web.xml">
	<fileset dir="${build.tmp.dir}/WebRoot">
	<exclude name="WEB-INF/web.xml" />
	</fileset>
	</war>
	<ear earfile="${build.dir}/${project.name}.ear" appxml="${app.dir}/src/weblogic/META-INF/application.xml">
			<fileset dir="${app.dir}/src/weblogic">
				<include name="META-INF/weblogic-application.xml" />
	</fileset>
	<fileset dir="${build.dir}">
	<include name="${project.name}.war" />
	</fileset>
	</ear>

	<delete file="${build.dir}/${project.name}.jar" />
	<delete file="${build.dir}/${project.name}.war" />
	<delete dir="${build.classes.dir}" />
	<delete dir="${build.tmp.dir}" />
	</target>

	<target name="deploy" depends="ear,undeploy" description="布署EAR服务">
		<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" failonerror="true" />
	<echo message="come here......" />	<echo message="deploy success......." />
	</target>
	<target name="undeploy" description="删除EAR服务">
	<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" failonerror="false" />
	</target>
</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两个包。
分享到:
评论
1 楼 zcs100 2014-02-20  
和你遇到了相似的问题,麻烦看一下[url][/url]http://bbs.csdn.net/topics/390711542

相关推荐

    weblogic 10.3 的部署以及配置数据源

    WebLogic Server 10.3 是一款由甲骨文公司提供的企业级应用服务器,它用于部署、管理和运行Java EE(Java Platform, Enterprise Edition)应用程序。本篇将详细讲解WebLogic 10.3的部署过程及配置数据源的步骤。 **...

    weblogic10.3性能优化参数配置

    Weblogic10.3_Windows 集群布署是指在 Windows 服务器上部署 Weblogic 集群的方案。该方案可以提高服务器的高可用性和负载均衡能力,适合大规模企业级应用系统。 1. 机器配置 机器配置是影响集群性能的重要因素之...

    weblogic10.3安装与部署步骤

    本文将详细介绍WebLogic 10.3的安装和部署步骤,帮助你快速理解和操作这个强大的中间件平台。 **一、WebLogic 10.3的安装** 1. 下载WebLogic 10.3的安装包,确保系统满足其硬件和软件需求。 2. 双击安装文件,启动...

    weblogic10.3 org.hibernate.hql.ast.HqlToken报错问题

    在本问题中,我们遇到了一个特定的错误,即“weblogic10.3 org.hibernate.hql.ast.HqlToken报错”,这涉及到Hibernate ORM框架和其在WebLogic上的运行。让我们深入探讨这个问题,以及可能的解决方案。 首先,`org....

    weblogic10.3 使用

    ### WebLogic 10.3 使用详解 #### 一、WebLogic 10.3 安装步骤 在正式开始WebLogic 10.3 的使用...通过以上步骤,可以有效解决Spring + Hibernate3在WebLogic 10.3环境中出现的异常问题,确保开发工作的顺利进行。

    weblogic 10.3 安装过程详解

    WebLogic 10.3是Oracle公司发布的一款企业级应用服务器,它提供了强大的Java EE平台支持,能够帮助企业构建、部署和管理复杂的应用程序。本文将详细介绍WebLogic 10.3的安装过程,帮助读者更好地理解和掌握其安装...

    Weblogic10.3优化设置

    本文将详细介绍如何针对Weblogic 10.3进行优化设置,确保其在生产环境中的高效运行。 #### 二、JVM内存优化 ##### 1. 修改`seDomainEnv.cmd`文件 在生产环境中,合理调整JVM内存对于提高Weblogic服务的性能具有...

    sunone8.1到weblogic10.3转移配置

    本文将详细介绍如何解决从Sun ONE 8.1到WebLogic 10.3迁移过程中出现的Hibernate配置问题,并提供具体的解决方案。 #### 二、问题背景与分析 当尝试在WebLogic 10.3环境中运行原先部署在Sun ONE 8.1上的应用时,...

    Weblogic 10.3 新特性 中文版

    ### Weblogic 10.3 新特性中文版 #### 概述 Oracle WebLogic Server 10.3 是 Oracle 公司推出的一款企业级 Java 应用服务器,它提供了强大的功能来支持各种 Java 应用程序和服务。WebLogic 10.3 的发布带来了许多...

    Weblogic10.3.6.0补丁包(含补丁安装说明).zip

    Weblogic 10.3.6 2019年7月16日集成补丁包(p29633432_1036_Generic_20190716.zip),补丁名称:MXLE,下载文件中包含补丁安装说明和方法(自用详细步骤)。服务器打补丁前请注意做好备份,若与旧的补丁冲突,需卸载...

    Oracle WebLogic Server 10.3.0.0下载.txt

    Oracle WebLogic Server 10.3.0.0下载 包括两个文件: server103_linux32.bin server103_win32.exe

    Oracle weblogic10.3.1.0.0集群配置手册

    在集群中,如果一个服务器实例出现故障,其他实例可以接管其服务,确保应用不间断运行。 三、WebLogic 10.3.1.0.0集群配置 1. 集群创建:在WebLogic管理控制台中,通过“域”-&gt;“配置”-&gt;“集群”进行集群的创建。...

    SSH2+Weblogic10.3

    这个项目是SSH2+jquery做的一个例子,主要是在weblogic10.3上部署没有问题,很多人用这个架构在weblogic有问题,这个可以直接部署,页面用jquery做了一个权限的增删改的例子,非常实用

    WEBLOGIC 10.3.6.0.210119 - 2021年1月补丁

    在提供的压缩包文件列表中,“WEBLOGIC SAMPLES SPU 10.3.6.0.210119 (Patch)”可能包含了一系列示例应用程序和特殊补丁更新单元(Special Patch Update, SPU),SPU是Oracle提供的一种快速修复机制,用于解决特定问题...

    WebLogic10.3+Apache2.2集群配置图文指南(含windows版和unix版).doc

    WebLogic 10.3+Apache 2.2 集群配置图文指南 本文档旨在为读者提供一个详细的 WebLogic 10.3+Apache 2.2 集群配置图文指南,涵盖 Windows 和 Unix 两个平台。下面是本文档的详细知识点: 一、集群配置简介 * 集群...

    Weblogic Server Tools for eclipse 3.5

    WebLogic Server Tools for Eclipse 3.5 是一个强大的开发工具集,专为在Eclipse集成开发环境中(IDE)高效管理、部署和调试Oracle WebLogic Server应用程序而设计。这个版本为开发人员提供了无缝的工作流程,使得在...

    Weblogic 10.3.0.0 win32位

    公司需要,非得让安装个这么老版本的,全网找遍了找不到。没办法找客户要了一个。

Global site tag (gtag.js) - Google Analytics