有人能告诉我,当重新启动配置文件时,Websphere在类加载方面是否做了不同的事情,而不是重新启动该配置文件中的应用程序?
我正在处理针对Java 8编译的大型企业应用程序,该应用程序在其\ WEB-INF \ lib文件夹中有250多个第三方JAR文件,并且在Websphere 9.0.0.2上遇到不同的行为(内部版本号: cf021645.01构建日期:11/8/16)因为当我重新启动配置文件时,应用程序的一切正常,但是当应用程序本身随后出现在第三方JAR代码深处的类加载相关错误时它会中断重新启动。
我查看了类加载器查看器,打开了详细的类加载并配置了诊断跟踪,所有内容在我看来都正确加载。我使用相同版本的Websphere在不同的配置文件中部署了相同应用程序的两个实例,并且两者之间的行为是一致的,重新启动配置文件并且应用程序都很好但是然后重新启动应用程序并且事情变坏了。
我们最近才开始在WebSphere 9上部署我们的应用程序,在此之前我们正在将针对Java 6编译的版本部署到Websphere 7而没有任何问题。使用的一些第三方JAR很老,因为我们的依赖管理(或缺乏)需要一些工作,但在这个阶段我不愿意开始在应用程序时更新库的重要任务在一个案例中工作正常但不是另一个案例。
添加了更多信息:
以下是应用程序重启后出现的错误类型示例。在这个特定的实例中,我运行了一些应用程序代码,这些代码从文件系统读取Word文档并将其传递给第三方PDF生成库,因此执行从我们的本地代码进入PDF生成库,然后进入ImageIO的。我不总是得到相同的错误,它有时会在另一个应用程序重启后的另一个点失败(使其进一步向下进入imageio代码)但imageio似乎总是导致问题。
引起:java.lang.NoClassDefFoundError:it / geosolutions / imageio / plugins / arcgrid / raster / AsciiGridRaster $ AsciiGridRasterType at it.geosolutions.imageio.plugins.arcgrid.spi.AsciiGridsImageReaderSpi.canDecodeInput(AsciiGridsImageReaderSpi.java:216) 在javax.imageio.ImageIO $ CanDecodeInputFilter.filter(ImageIO.java:578) 在javax.imageio.spi.FilterIterator.advance(ServiceRegistry.java:832) 在javax.imageio.spi.FilterIterator。(ServiceRegistry.java:826) 在javax.imageio.spi.ServiceRegistry.getServiceProviders(ServiceRegistry.java:527) 在javax.imageio.ImageIO.getImageReaders(ImageIO.java:657) 在javax.imageio.ImageIO.read(ImageIO.java:1449) 在javax.imageio.ImageIO.read(ImageIO.java:1363)
据我所知,我们似乎根本没有使用任何共享库。
我在早期调查我的问题Not able to load javax.imageio.ImageIO class in WAS 8.5时偶然发现了这个问题,我可以确认我们已经在做第1点(显式调用ImageIO.scanForPlugins(),我们将它作为servlet的一部分来做在我们的应用程序启动时执行)我还配置了第2点(在服务器中使用系统属性com.ibm.ws.runtime.component.disableMemoryLeakService = true禁用类加载器泄漏防护)以尝试诊断我的问题。我没有尝试过第3点,因为在我看来这是最后的手段。
关于imageio,我们在我们的应用程序中部署了以下JAR作为250+的一部分:
jai_codec
jai_imageio
jai_core
ImageIO的-EXT-arcgrid-1.1.10
ImageIO的-EXT流-1.1.10
imageio-ext-utilities-1.1.10
我不确定jai JAR的确切版本,但会努力找出答案。
我们还部署了一大堆geotools JAR,有时它会在通过imageio执行后失败。所有这些geotools JAR都是版本2.4.0,我知道它已经很老了,我不确定它们现在在Java 8上运行的向后兼容性如何。尽管我认为geotools 2.4.0与Java 1.4一致,但它们在Websphere 7 Java 6上运行良好。当应用程序在一个案例中工作正常而不是另一个案例时,我不愿意开始更新库。