【问题标题】:Not able to load javax.imageio.ImageIO class in WAS 8.5无法在 WAS 8.5 中加载 javax.imageio.ImageIO 类
【发布时间】:2017-03-16 17:15:32
【问题描述】:

我无法加载 JAI 1.3.0 的 ImageIO 类。 Java 6 和 Web 应用程序服务器 (WAS) 8.5。我的代码在 Java 6 和 WAS(7.0.19) 上运行良好。

我已经在 pom.xml 中正确地提到了依赖。需要知道是否有人有同样的问题。

byte[] imgBytes = imagesVO.getImgBytes();
BufferedImage image = ImageIO.read(new ByteArrayInputStream(imgBytes));

似乎我的服务器在执行期间无法加载 ImageIO 类,因此image 的值将变为空。我正在通过imagesVO 传递 Tiff 格式文件。

【问题讨论】:

    标签: java websphere jai


    【解决方案1】:

    WAS 8.5 中关于 ImageIO 库的行为发生了变化,作为该版本中添加的一些类加载器泄漏预防逻辑的一部分。启用泄漏预防后,ImageIO 库会立即作为服务器启动过程的一部分实例化,目的是防止它链接(永久,因为它对 Java EE 类加载的动态特性不友好)到应用程序提供的实现类。不过,副作用是,由于库是在应用程序类出现之前实例化的,因此将无法找到任何应​​用程序提供的插件。

    有一些潜在的解决方法:

    1) 在执行操作之前显式调用 ImageIO.scanForPlugins()。这将告诉 ImageIO 使用线程上下文类加载器对插件类进行重新扫描,然后你的会被拾取。请注意,这将导致系统级 ImageIO 库对您的应用程序类的永久引用,因此如果您在不重新启动 JVM 的情况下重新启动应用程序,类加载器将被泄漏(这在以前的 WebSphere 版本中已经发生,所以这可能对你来说不是什么大问题)。

    2) 在您的服务器中禁用类加载器泄漏预防。您可以使用系统属性 (com.ibm.ws.runtime.component.disableMemoryLeakService=true) 执行此操作。同样的警告也适用于类加载器的泄漏。

    3) 将必要的 ImageIO 库添加到您的 JVM 类路径中。需要 JVM 级别的类路径修改的情况非常少见,但这是其中之一 - ImageIO 将在服务器启动期间扫描插件,找到您的插件(因为它在 JVM 类路径中),并作为奖励它不会泄漏您的应用程序类加载器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-14
      • 2013-07-28
      • 1970-01-01
      相关资源
      最近更新 更多