JBoss 5.1. 0 EAP. Randomly generate Java lang.NoClassDefFoundError
In our EJB 3.0 application, we have a random Java lang.NoClassDefFoundError.
It happens to happen in the IDE
Establish:
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 looks like this:
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 looks like this:
The JVM has been started with the option: - verbose: class to view all class loading operations
--- 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 ---
The file "org / joda / time / TZ / defaultnameprovider" must be in the jar file jar: File: / C: / workarea / projects / xxx trunk / xxx ear / target / xxx ear!/ xxxEJB. jar
Recommendations:
We feel that quarz has something to do with it Therefore, when something is scheduled, EJB 3.0 remote stateless service Sometimes errors occur
Quartz scheduler was originally created in servlet context, but most of it works normally
Does anyone have the same problem?
JBoss deployment is completed through the IntelliJ JBoss plug-in:
Is it because of the deployment mechanism we use? We use the IntelliJ JBoss plug-in to deploy applications, so JBoss says:
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/}
Solution
This may be due to the jar conflict (XX. Ear) inside the binary
Public class 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()); } }
}