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

java.lang.LinkageError: LinkageError while defining class

阅读更多

■·在这个社会上最让人欣慰的是,几乎没有人会真正跌入低谷 ■·最可悲的是明明有能力飞,但很少有人飞到高处

 

问题分类:程序发布

影响部门:音像资料馆3694

 

软件名称:websphere
软件版本:v5.1
环境平台:linux

问题描述:

1.本地tomcat+myeclipse+jdk1.4开发程序文件class发至测试环境(linux+was5.1) 结果:测试通过
2.将通过文件发至正式环境(linux+was5.1) 结果:失败

 

注:前后两个环境发布过程中均为直接替换文件的方式!

 

Error log:

 

Caused by: java.lang.LinkageError: LinkageError while defining class: com.ctvit.medialog.dy.impl.MedialogTypeImpl$MediaTypesTypeImpl

Could not be defined due to: com/ctvit/medialog/dy/impl/MedialogTypeImpl$MediaTypesTypeImpl (Bad magic number)

This is often caused by having a class defined at multiple

locations within the classloader hierarchy. Other potential causes

include compiling against an older or newer version of the class

that has an incompatible method signature.

Dumping the current context classloader hierarchy:

==> indicates defining classloader

==>[0] 

com.ibm.ws.classloader.CompoundClassLoader@2d2e87c2

 

分析:

 

原因可能如下:

l          一种是编译自定义类的jdk与服务器的jdk不一致,也就是说两个操作系统下的服务器中的jdk版本不一致.(己排除)

l          另一种是由于自定义的类在服务器中存在重复定义.(有可能)

l          上传的文件已经损坏。本机器通过SSH上传过程中文件已经损坏。属于本机问题。(此情况几率较小)

l          最大的疑点classLoader冲突(有可能)

l          用低版本的文件替换至新版本文件时就会出现此错误

 

 Bad magic number:

        Java编译后的class二进制文件(以class结尾)可以通过网络传输。有时候在传输文件的过程中,连接可能会被中断或受干扰,使得class 文件装载失败;有时候当拷贝文 件到web服务器时,文件会被混淆或者发生磁盘错误。因此,JVM和class loader提供了特别的手段去验证类文件是否完整。一个预防就是每个类定义的开始包含了magic number, 这是一串四位的字节数组用来标记该文件之所以为类定义文件。 对于那些很想知道magic number是什么的人来说,它就是一个16进制数CAFEBABE,class loader用它来确定一个文件是否真得是类文件。

 

 操作过程:

 

1.      第一步将正式环境上medialog.war整个应用down至测试环境,结果测试通过;

2.      第二步将本地修改文件替换至测试环境,结果测试通过;

3.      第三步将测试环境中替换的文件发布至正式环境;

4.      第四步发布之后重启medialog.war应用并进行测试;

5.      第五步如果测试不通过,重启WebShpere,再进行测试;

6.      第六步测试再不通过,将正式环境中己替换文件并出错的medialog.war下载至测试环境,再在测试环境中进行测试是否通过;

7.      最终结果如果失败即刻回退正式环境的操作.

 

替换程序时需注意:

l          在替换文件之前务必将正式环境的medialog服务关闭.

l          在关闭medialog服务之后上传替换文件,并保证上传替换的准确性.

l          替换文件之后,重新启动medialog服务,验证是否发布成功

 

 

注:之所以没有将本地开发的应用打包medialog.war发,因考虑到此应用程序近二年时间没有修改过,程序经手人也比较多,版本上控制的不是很好,所以不敢轻易的将本地程序直接打包分发.风险太大!

 

2010-11-24操作如下:

 

1.将本地程序打包medialog.war分发至测试环境,结果测试未通过.

       错误码:500
提示: Filter [myFilter]: could not be initialized

 

2.将通过的测试环境medialog.war导出ear.再进行测试环境分发,成功!但出现新的问题,导出的ear并非最新更新程序.

 

   原因:注意一下$was_home\config\cells\***Node01Cell\applications,这个目录下的文件

          由于更新应用程序的方法是直接替换,所以上面那个目录下的一些文件并没有同步更新,那么在控制台导出的文件版本必然要老很多

 

注:发布过程中需要注意以下几点

       1).应用程序的上下文设定为 “/medialog”.
       2).发布过程的资源绑定设定.jndi
       3).安装完成后,设置应用的“web模块的类载入方式”为 “PARENT_LAST”.

 
 

2010-11-25

 

计划将测试环境ear包导出成功并重新分发测试环境...

 

继续操作...待续...

 

2010-11-30

 

以上所有方案均未通过,不得已将整包发布,因此程序很久未曾修改,版本上可能与正式环境不一致,所以整包发布的风险较大,在测试环境中一定要将所有功能测通!

最终通过方案:

 

1.      将本地medialog.war打包发至测试环境并进行测试通过.

2.      将此medialog.war发至正式环境通过.

 

0
0
分享到:
评论

相关推荐

    Exception in thread \"main\" java.lang.LinkageError错误的解决

    NULL 博文链接:https://utopialxw.iteye.com/blog/1138133

    java.lang.NoClassDefFoundError错误解决办法

    4. 因为NoClassDefFoundError是java.lang.LinkageError的一个子类,所以可能由于程序依赖的原生的类库不可用而导致 5. 检查日志文件中是否有java.lang.ExceptionInInitializerError这样的错误 与...

    在Java中异常分析

    - **异常路径**:`java.lang.Object -> java.lang.Throwable -> java.lang.Error -> java.lang.LinkageError -> java.lang.IncompatibleClassChangeError` - **解释**:当类文件中的类型与预期类型不匹配时抛出。 - ...

    解决出现 java.lang.ExceptionInInitializerError错误问题

    `java.lang.ExceptionInInitializerError` 是Java编程语言中一种比较特殊的异常,通常在类的静态初始化过程中遇到问题时抛出。这个错误意味着在初始化类的静态变量或静态初始化块(static block)时发生了异常。这类...

    Burp suite主题插件.jar

    每个人都知道黑客只在晚上工作,所以多年来人们要求 PortSwigger 实现一个黑暗主题。当他们这样做时,黑客们到处欢欣鼓舞!但是,有些人仍然想要更多......直到...... Burp Customizer! Burp Suite 2020.12 用 ...

    java 异常种类总结【转】.docx

    java.lang.LinkageError 是一种链接错误,指的是在程序中某个类依赖于另外一些类,但是这些类的定义发生了变化时抛出的异常。 24. java.lang.NoClassDefFoundError 未找到类定义错误 java.lang....

    juel-Tomcat与EL冲突问题

    启动Tomcat时报错:Caused by: java.lang.LinkageError: loader constraints violated when linking javax/el/ExpressionFactory class 说明:原因是juel.jar, juel-engine.jar, juel-impl.jar包和Tomcat6.0中的el-...

    常见java异常.txt

    - 类层次结构:java.lang.Object -> java.lang.Throwable -> java.lang.Error -> java.lang.LinkageError -> java.lang.IncompatibleClassChangeError - 描述:当类或接口的实现不符合其定义时,比如方法签名改变...

    Java常见异常.pdf

    Java异常处理是编程中至关重要的一个部分,它帮助开发者识别并处理程序运行时可能出现的问题。在Java中,异常被组织成一个层次结构,根类是`Throwable`,它有两个主要的子类:`Error`和`Exception`。`Error`通常用于...

    java 异常总结

    ### Java异常总结与详解 #### 引言 在Java编程中,异常处理是软件开发过程中不可或缺的一部分。良好的异常处理能够帮助我们及时发现并解决问题,从而提高程序的稳定性和健壮性。本文旨在全面总结Java中常见的异常...

    Burpsuite永久版

    Burpsuite永久使用版,没有使用限制,V1.7.26版本,http抓包工具。

    JBPM4运行时错误异常总结

    3. `javax.servlet.ServletException: java.lang.LinkageError: loader constraint violation`: 这个错误是由于两个不同的类加载器加载了同一个类的不同版本,导致签名冲突。解决方法是统一项目和Tomcat服务器中的库...

    jaxb-2_1_9.zip

    java.lang.LinkageError: JAXB 2.0 API is being loaded from the bootstrap classloader, but this RI (from jar:file://build/web/WEB-INF/lib/jaxb-impl.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class...

    Java核心API需要掌握的程度

    Java的核心API主要集中在`java.lang`包中,包含了大量常用的基础类,这些类为Java程序提供了基本的操作能力。以下是对`java.lang`包中部分重要类的介绍: 1. **Object**:所有类的基类,提供了一些基本方法如`...

    总结了java容易出错的信息 以及错误信息类型

    Java编程语言中,错误和异常处理是程序健壮性的重要组成部分。这些异常和错误可以分为不同的类别,帮助开发者识别和修复程序中的问题。以下是对Java中常见错误和异常类型的详细解释: 1. **算术异常类:Arithmetic...

    java异常类型.txt

    5. **`java.lang.LinkageError`** - 与类加载有关的错误,例如无法解析类依赖时会抛出此类错误。 ### 总结 了解这些异常类型对于编写健壮可靠的Java应用程序至关重要。正确地处理异常不仅可以提高程序的稳定性,还...

    常见JAVA异常总结

    `java.lang.LinkageError` 表示类链接失败。这通常是因为类或其依赖项存在问题,如版本冲突、依赖未找到等问题。 - **解决方法**: - 检查类路径和依赖关系,确保所有必要的类都被正确加载。 - 如果使用第三方库...

    endorsed 解决soa连接错误

    在Java中,如果不同库之间存在版本冲突,可能会导致`java.lang.LinkageError`,特别是涉及到Java API的更新时,如JAXB或JAX-WS。 描述中提到,将解压后的jar包放置在`%TOMCAT_HOME%`和`%JAVA_HOME%\lib\endorsed`...

    CXF-JAXB包的处理问题

    本文将深入探讨如何解决CXF与JAXB版本冲突,以及如何处理Java.lang.LinkageError,特别是当JAXB 2.1 API与2.2 API之间发生不兼容时的情况。 首先,LinkageError通常发生在类加载过程中,当试图访问的类在不同的类...

Global site tag (gtag.js) - Google Analytics