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()); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |