我们在 glassfish V3.1.X 上部署了一个应用程序。该应用程序执行 ETL 操作,该操作涉及从 excel 文件中读取记录并将它们加载到数据库表中。
有时应用程序代码会因 NoClassDefFoundError 而失败。奇怪的是应用程序在重新启动时工作
最后两次失败是针对两个不同的类别:
第一个例外是:
java.lang.NoClassDefFoundError: Could not initialize class org.apache.xmlbeans.XmlBeans
at org.openxmlformats.schemas.spreadsheetml.x2006.main.WorkbookDocument$Factory.parse(Unknown Source) ~[poi-ooxml-schemas-3.9.jar:3.9]
at org.apache.poi.xssf.eventusermodel.XSSFReader$SheetIterator.<init>(XSSFReader.java:207) ~[poi-ooxml-3.9.jar:3.9]
at org.apache.poi.xssf.eventusermodel.XSSFReader$SheetIterator.<init>(XSSFReader.java:166) ~[poi-ooxml-3.9.jar:3.9]
at org.apache.poi.xssf.eventusermodel.XSSFReader.getSheetsData(XSSFReader.java:160) ~[poi-ooxml-3.9.jar:3.9]
at com.etlapplication.readexternalfile.excel.model.POIWorkbookImpl.getSheetNames(POIWorkbookImpl.java:368)
第二个是:
java.lang.NoClassDefFoundError: Could not initialize class org.apache.lucene.index.DocumentsWriterPerThread
at org.apache.lucene.index.LiveIndexWriterConfig.<init>(LiveIndexWriterConfig.java:117) ~[lucene-core-4.2.1.jar:4.2.1 1461071 - mark - 2013-03-26 08:28:27]
at org.apache.lucene.index.IndexWriterConfig.<init>(IndexWriterConfig.java:145) ~[lucene-core-4.2.1.jar:4.2.1 1461071 - mark - 2013-03-26 08:28:27]
at com.etlapplication.readexternalfile.excel.model.IndexedSharedStringTable.<init>(IndexedSharedStringTable.java:73)
我在日志中没有发现任何可能指向一些静态初始化问题的 ExceptionInInitializerError。
我已经启用了类加载消息的日志记录,以查看从何处加载类,但现在一切似乎都很好。等待问题再次发生,看看是否从其他地方加载了类。
任何进一步解决问题的建议。