JBoss 5.1.0 EAP.随机生成java.lang.NoClassDefFoundError

在我们的EJB 3.0应用程序中,我们发生了随机发生的 java.lang.NoClassDefFoundError.

它恰好发生在IDE中.

建立:

OS: Windows 7 32 Bit
Java JDK: 1.6.0_24 (32 Bit)‎
IDE: IntelliJ 11.1‎
App-Server: JBoss 5.1.0 EAP
EAR-Building with „maven-ear-plugin“‎
WAR-Building with Maven „<packaging>war</packaging>“‎
EJB-Building with Maven „<packaging>ejb</packaging>“ und „maven-ejb-‎plugin“‎

EAR看起来像这样:

xxx.ear
‎   |___ META-INF
‎   |    |___ application.xml (Information about EAR,EJB und WEB-Modul ‎configured)‎
‎   |‎
‎   |___ xxxEJB.jar‎
‎   |    |‎
‎   |    |___ META-INF
‎   |    |    |___ persistance.xml (JPA 1.0 configuration)‎
‎   |    |    |___ jboss.xml (JBoss-Config)‎
‎   |    |    |___ ejb-jar.xml (EJB 3.0 definition)‎
‎   |    |‎
‎   |    |___ country/yyy/xxx/.. (our own compiled classes)
‎   |    |___ report/.. (JasperReport-Tamplates)
‎   |    |___ quickfix/.. (QuickFixJ-configuration)
‎   |    |___ all dependent libraries for our EJB 3.0 project,(74-jar-files)
‎   | ‎
‎   |___ xxxWAR.war‎
‎        |‎
‎        |___ META-INF
‎        |___ WEB-INF
‎             |‎
‎             |___ lib‎
‎             |    |___ all dependent libraries for the Servlet-‎project,(2-jar-files)
‎             |___ classes‎
‎             |    |___ country/yyy/xxx/.. (our own compiled classes)
‎             |___ web.xml (Servlet-configuration)‎

Stacktrace看起来像这样:

JVM已使用选项:-verbose:class启动,以查看所有类加载操作.

--- SNIP JBoss-Log ---‎

‎[Loaded country.yyy.xxx.service.issue.util.IssueUtil from file:/C:/Workarea/Projects/xxx-‎trunk/xxx/target/classes/]‎
‎[Loaded org.joda.time.DateTimeZone from jar:file:/C:/Workarea/Projects/xxx-trunk/xxx-‎ear/target/xxx.ear!/xxxEJB.jar]‎
‎[Loaded org.joda.time.Chronology from jar:file:/C:/Workarea/Projects/xxx-trunk/xxx-‎ear/target/xxx.ear!/xxxEJB.jar]‎
‎[Loaded org.joda.time.chrono.BaseChronology from jar:file:/C:/Workarea/Projects/xxx-trunk/xxx-‎ear/target/xxx.ear!/xxxEJB.jar]‎
‎[Loaded org.joda.time.DateTimeZone$1 from jar:file:/C:/Workarea/Projects/xxx-trunk/xxx-‎ear/target/xxx.ear!/xxxEJB.jar]‎
‎[Loaded org.joda.time.tz.NameProvider from jar:file:/C:/Workarea/Projects/xxx-trunk/xxx-‎ear/target/xxx.ear!/xxxEJB.jar]‎
‎[Loaded org.joda.time.JodaTimePermission from jar:file:/C:/Workarea/Projects/xxx-trunk/xxx-‎ear/target/xxx.ear!/xxxEJB.jar]‎
‎[Loaded org.joda.time.tz.Provider from jar:file:/C:/Workarea/Projects/xxx-trunk/xxx-‎ear/target/xxx.ear!/xxxEJB.jar]‎
‎[Loaded org.joda.time.tz.FixedDateTimeZone from jar:file:/C:/Workarea/Projects/xxx-trunk/xxx-‎ear/target/xxx.ear!/xxxEJB.jar]‎
‎[Loaded org.joda.time.tz.ZoneInfoProvider from jar:file:/C:/Workarea/Projects/xxx-trunk/xxx-‎ear/target/xxx.ear!/xxxEJB.jar]‎
ERROR - javax.ejb.EJBTransactionRolledbackException: Unexpected Error
java.lang.NoClassDefFoundError: org/joda/time/tz/DefaultNameProvider
at org.joda.time.DateTimeZone.getDefaultNameProvider(DateTimeZone.java:545)‎
at org.joda.time.DateTimeZone.setNameProvider0(DateTimeZone.java:515)‎
at org.joda.time.DateTimeZone.<clinit>(DateTimeZone.java:116)‎
at ‎country.yyy.xxx.service.issue.util.InitialFixingDateTimeUtil.getHedgingTimestampsForIssue(InitialFixingDateTimeUtil.java:83)‎
at ‎country.yyy.xxx.service.issue.util.InitialFixingDateTimeUtil.getFirstHedgingTimestampForIssue(InitialFixingDateTimeUtil.java:43)‎
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)‎
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)‎
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)‎
at java.lang.reflect.Method.invoke(Unknown Source)‎

‎--- SNAP JBoss-Log ---‎

文件“org / joda / time / tz / DefaultNameProvider”肯定在jar文件jar:file:/ C:/ Workarea / Projects / xxx-trunk / xxx-ear / target / xxx.ear!/xxxEJB.jar

建议:

我们感觉Quarz与它有关.因此,当安排了某些事情时,EJB 3.0远程无状态服务.有时会发生错误.

Quartz-Scheduler最初是在Servlet-Context中创建的,但大部分工作正常.

有人有同样的问题吗?

JBoss部署是通过IntelliJ JBoss插件完成的:

是不是,问题是因为我们使用的部署机制?我们使用intelliJ JBoss插件部署应用程序,因此JBoss说:

09:39:21,614 INFO  [MainDeployer] deploy,url=file:/C:/Workarea/Projects/xxx-trunk/xxx-ear/target/xxx.ear
09:39:33,613 INFO  [Ejb3DependenciesDeployer] Encountered deployment AbstractVFSDeploymentContext@2726974{vfszip:/C:/Workarea/Projects/xxx-trunk/xxx-ear/target/xxx.ear/xxxEJB.jar/}

解决方法

这可能是由于二进制内部的jar冲突(xx.ear).
您可以使用以下代码在ear文件夹的lib文件夹中找出jar重复

公共类JarSearch {

public static final String NL = System.getProperty("line.separator");

public static String directory = new String();
public static File file;
public static Writer output;

public static void main(String args[]) {
    /*if (args.length != 2){
        System.out.println("You must provide 1. search directory and 2. search string");
        System.exit(0);
    }*/
    JarSearch search = new JarSearch();
    try{
        String dir = "E://lib";//path of lib folder
        directory = dir;
        file = new File(directory);
        String parentPath = file.getParent();
        parentPath += "\\JarSearchResult.txt";
        file = new File(parentPath);
        //output = new BufferedWriter(new FileWriter(file));
        String searchStr = "DES.class";// name of class file to b searched
        search.searchDir(dir,searchStr);//"C:\\Program Files\\IBM\\Application Developer\\plugins\\com.ibm.etools.ctc.binding.java\\runtime\\ctcjava.jar");
    }catch(IOException ioe){
        System.out.println(ioe.toString());
    }
}

public static void searchDir(String dirName,String searchStr)throws IOException{
    File dir = new File(dirName);
    if (!dir.isDirectory()){
        throw new IOException(dir+" is not a directory !!!");
    }
    File files[] = dir.listFiles();
    for (int i=0; i<files.length; i++){
        if (files[i].isDirectory()){
            searchDir(files[i].getAbsolutePath(),searchStr);
        }else{
            if (files[i].getName().endsWith(".jar")){
                searchFile(files[i].getAbsolutePath(),searchStr);
            }
        }
    }
    //output.close();
}

public static void searchFile(String fileName,String searchStr)throws IOException{
    //System.out.println("File Absolute Path :: " + fileName);
    boolean outputMessage = false;
    StringBuffer buf = new StringBuffer();
    int index1 = fileName.lastIndexOf("\\");
    int index2 = fileName.lastIndexOf("/");
    //System.out.println(index1 + " :: " + index2 + " ===>>> " + NL);
    int index = -1;
    if (index1 > index2){
        index = index1;
    } else {
        index = index2;
    }
    buf.append(NL);

    buf.append("DIR: ");
    buf.append(fileName.substring(0,index));
    buf.append(NL);

    buf.append("JAR: ");
    buf.append(fileName.substring(index+1));
    buf.append(NL);

    searchStr = searchStr.toLowerCase();

    JarFile jar = new JarFile(fileName);
    Enumeration e = jar.entries();
    while (e.hasMoreElements()){
        JarEntry entry = (JarEntry)e.nextElement();
        String strEntry = entry.getName().toLowerCase();
        //System.out.println(strEntry);
        if (strEntry.indexOf(searchStr) > -1){
            outputMessage = true;
            buf.append(entry.getName());
            buf.append(NL);
        }
    }
    if (outputMessage){
        System.out.println(buf);
        //output.write(buf.toString());
    }
}

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 目录 连接 连接池产生原因 连接池实现原理 小结 TEMPERANCE:Eat not to dullness;drink not to elevation.节制
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 一个优秀的工程师和一个普通的工程师的区别,不是满天飞的架构图,他的功底体现在所写的每一行代码上。-- 毕玄 1. 命名风格 【书摘】类名用 UpperCamelC
今天犯了个错:“接口变动,伤筋动骨,除非你确定只有你一个人在用”。哪怕只是throw了一个新的Exception。哈哈,这是我犯的错误。一、接口和抽象类类,即一个对象。先抽象类,就是抽象出类的基础部分,即抽象基类(抽象类)。官方定义让人费解,但是记忆方法是也不错的 —包含抽象方法的类叫做抽象类。接口
Writer :BYSocket(泥沙砖瓦浆木匠)微 博:BYSocket豆 瓣:BYSocketFaceBook:BYSocketTwitter :BYSocket一、引子文件,作为常见的数据源。关于操作文件的字节流就是 —FileInputStream&amp;FileOutputStream。
作者:泥沙砖瓦浆木匠网站:http://blog.csdn.net/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节。交流QQ群:【编程之美 365234583】http://qm.qq.com/cgi-bin/qm/qr?k=FhFAoaWwjP29_Aonqz
本文目录 线程与多线程 线程的运行与创建 线程的状态 1 线程与多线程 线程是什么? 线程(Thread)是一个对象(Object)。用来干什么?Java 线程(也称 JVM 线程)是 Java 进程内允许多个同时进行的任务。该进程内并发的任务成为线程(Thread),一个进程里至少一个线程。 Ja
Writer :BYSocket(泥沙砖瓦浆木匠)微 博:BYSocket豆 瓣:BYSocketFaceBook:BYSocketTwitter :BYSocket在面向对象编程中,编程人员应该在意“资源”。比如?1String hello = &quot;hello&quot;; 在代码中,我们
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 这是泥瓦匠的第103篇原创 《程序兵法:Java String 源码的排序算法(一)》 文章工程:* JDK 1.8* 工程名:algorithm-core-le
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 目录 一、父子类变量名相同会咋样? 有个小故事,今天群里面有个人问下面如图输出什么? 我回答:60。但这是错的,答案结果是 40 。我知错能改,然后说了下父子类变
作者:泥瓦匠 出处:https://www.bysocket.com/2021-10-26/mac-create-files-from-the-root-directory.html Mac 操作系统挺适合开发者进行写代码,最近碰到了一个问题,问题是如何在 macOS 根目录创建文件夹。不同的 ma
作者:李强强上一篇,泥瓦匠基础地讲了下Java I/O : Bit Operation 位运算。这一讲,泥瓦匠带你走进Java中的进制详解。一、引子在Java世界里,99%的工作都是处理这高层。那么二进制,字节码这些会在哪里用到呢?自问自答:在跨平台的时候,就凸显神功了。比如说文件读写,数据通信,还
1 线程中断 1.1 什么是线程中断? 线程中断是线程的标志位属性。而不是真正终止线程,和线程的状态无关。线程中断过程表示一个运行中的线程,通过其他线程调用了该线程的 方法,使得该线程中断标志位属性改变。 深入思考下,线程中断不是去中断了线程,恰恰是用来通知该线程应该被中断了。具体是一个标志位属性,
Writer:BYSocket(泥沙砖瓦浆木匠)微博:BYSocket豆瓣:BYSocketReprint it anywhere u want需求 项目在设计表的时候,要处理并发多的一些数据,类似订单号不能重复,要保持唯一。原本以为来个时间戳,精确到毫秒应该不错了。后来觉得是错了,测试环境下很多一
纯技术交流群 每日推荐 - 技术干货推送 跟着泥瓦匠,一起问答交流 扫一扫,我邀请你入群 纯技术交流群 每日推荐 - 技术干货推送 跟着泥瓦匠,一起问答交流 扫一扫,我邀请你入群 加微信:bysocket01
Writer:BYSocket(泥沙砖瓦浆木匠)微博:BYSocket豆瓣:BYSocketReprint it anywhere u want.文章Points:1、介绍RESTful架构风格2、Spring配置CXF3、三层初设计,实现WebService接口层4、撰写HTTPClient 客户
Writer :BYSocket(泥沙砖瓦浆木匠)什么是回调?今天傻傻地截了张图问了下,然后被陈大牛回答道“就一个回调…”。此时千万个草泥马飞奔而过(逃哈哈,看着源码,享受着这种回调在代码上的作用,真是美哉。不妨总结总结。一、什么是回调回调,回调。要先有调用,才有调用者和被调用者之间的回调。所以在百
Writer :BYSocket(泥沙砖瓦浆木匠)一、什么大小端?大小端在计算机业界,Endian表示数据在存储器中的存放顺序。百度百科如下叙述之:大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加
What is a programming language? Before introducing compilation and decompilation, let&#39;s briefly introduce the Programming Language. Programming la
Writer :BYSocket(泥沙砖瓦浆木匠)微 博:BYSocket豆 瓣:BYSocketFaceBook:BYSocketTwitter :BYSocket泥瓦匠喜欢Java,文章总是扯扯Java。 I/O 基础,就是二进制,也就是Bit。一、Bit与二进制什么是Bit(位)呢?位是CPU
Writer:BYSocket(泥沙砖瓦浆木匠)微博:BYSocket豆瓣:BYSocket一、前言 泥瓦匠最近被项目搞的天昏地暗。发现有些要给自己一些目标,关于技术的目标:专注很重要。专注Java 基础 + H5(学习) 其他操作系统,算法,数据结构当成课外书博览。有时候,就是那样你越是专注方面越