加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 03:11:14 所属栏目:Java 来源:网络整理
导读:在我们的EJB 3.0应用程序中,我们发生了随机发生的 java.lang.NoClassDefFoundError. 它恰好发生在IDE中. 建立: OS: Windows 7 32 BitJava JDK: 1.6.0_24 (32 Bit)?IDE: IntelliJ 11.1?App-Server: JBoss 5.1.0 EAPEAR-Building with ?maven-ear-plugin“?WA
在我们的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 FilesIBMApplication Developerpluginscom.ibm.etools.ctc.binding.javaruntimectcjava.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());
    }
}

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读