`

虚拟主机同时运行多个使用 ImageMagick +Jmagick的网站

阅读更多

       Tomcat虚拟主机同时运行多个使用 ImageMagick +Jmagick的网站,遇到了这个错误:Native Library C:\WINDOWS\system32\jmagick.dll already loaded in another classloader

-----------------------------------------------------

环境说明:

中间件:tomcat6.0.18

开发环境:winXP

服务器:CentOS5.3

         在一个tomcat下,有多个虚拟主机, 运行了多个网站,每个网站都使用 ImageMagick +Jmagick 来处理图片, 须要使用JNI调用本地*.dll文件来处理图片,  每个网站(web应用程序)都有自己的lib,在WebContent\WEB-INF\lib下面.  这样就有重复的jar包, 如jmagick.jar,servlet-api.jar, ***等好多jar包, 在每个网站(web应用程序)都有一份.

-----------------------------------------------------

结果在启动tomcat时会报:

1 忽略了servlet-api.jar .  (具体日志信息没有复制)

2 一个web应用程序处理完图片后,第二个web应用程序再处理图片时会出错:Native Library C:\WINDOWS\system32\jmagick.dll already loaded in another classloader

3 A C3P0Registry mbean is already registered

-----------------------------------------------------

 

我搜索到了  http://jbossweek.iteye.com/blog/138903的一篇文章:

1、症状 

如果JBoss上的两个web应用需要使用相同的JNI本地库,当第二个web应用加载JNI本地库时,就会出现Native Library xxx.so already loaded in another classloader错误

2、原因 

 Java虚拟机为了在JNI本地库中确保基于classloader的命名空间隔离,因而不允许一个JNI本地库被两个不同的classloader加载。而JBoss中web应用的classloader是独立的,也就是说每个web应用都有一个专属的classloader,这样就出现两个classloader加载同一JNI本地库的情况

3、解决方法 

在JBoss AS中,虽然不同的web应用使用不同的classloader,但是web应用classloader的父classloader是相同的,这样根据双亲委托模型只要让父classloader加载JNI本地库就可以避免被多个classloader加载。父classloader的classpath为JBoss AS配置(default、all或minimal)的lib目录,因而只要将JNI class单独发布成jar包,并放在配置(default、all或minimal)的lib目录中,问题就可以解决

 以上说明了问题的原因, 上面说 "因而只要将JNI class单独发布成jar包"  , 我使用了 jmagick.jar是在这里调用了JNI ,  所以把jmagick.jar 从WebContent\WEB-INF\lib下 移动到了E:\tomcat-6.0.18\lib下, 就不会被重复加载了.

 

----------------------------------------------------

Tomcat6的类加载顺序

1、最先是$JAVA_HOME/jre/lib/ext/下的jar文件。
2、环境变量CLASSPATH中的jar和class文件。

3、$CATALINA_HOME/lib 下的jar文件。

4、各自具体的webapp /WEB-INF/classes下的class文件。
5、各自具体的webapp /WEB-INF/lib下的jar文件。

 

 

3
0
分享到:
评论
1 楼 feidaodalian 2009-11-12  
谢了,哥们。我也是同样的问题,不过是发生在glassfish3上。现在问题解决了。

相关推荐

    ImageMagick-6.3.9+jmagick组合

    这个“ImageMagick-6.3.9+jmagick组合”指的是ImageMagick的一个特定版本6.3.9与JMagick的集成,已经过测试,确保在运行时的稳定性和兼容性。 ImageMagick的知识点: 1. **基本功能**:ImageMagick支持多种图像...

    linux下安装ImageMagick-6.5+JMagick -6.4 经测试成功的

    Jmagick包中的Changelog.txt中有ImageMagick与JMagick版本对应的关系的说明 ) 安装说明: ================================== cd /usr/bin/ rm java rm javac ln -s /usr/java/jdk6/bin/java java ln -s /usr/java/...

    ImageMagick+Tricks+Web+Image+Effects+from+the+Command+Line+and+PHP.pdf

    ImageMagic Tricks国外人写的一本书 ImageMagick+Tricks+Web+Image+Effects+from+the+Command+Line+and+PHP.pdf

    WINDOWS下thinkphp5.0+php 7.0使用ImageMagick+Ghostscript把网页面内容转化为png图片

    在Windows环境下,使用ThinkPHP5.0框架配合PHP 7.0进行网页内容转化成PNG图片的操作,通常涉及到几个关键组件和技术:ImageMagick、Ghostscript以及PHP的GD库或Imagick扩展。这里我们将详细讲解这个过程,以及如何在...

    imageMagick+ima4java配置

    以下是一个简单的Java示例代码,演示如何使用Im4Java库来实现图片的压缩功能: ```java import im4java.core.IMOperation; import im4java.core.ConvertCmd; public class Ima4JavaMagickCreator implements ...

    jmagick-6.2.4-1-IM-6.2.5.jar,ImageMagick-6.2.5-4-Q16-windows-dll.exe

    **压缩包子文件的文件名称列表** 中,"ImageMagick 详细安装使用 linux (jmagick)_java.mht"可能是一个包含如何在Linux系统上安装和使用JavaMagick的教程文件,.mht是MHTML(多用途互联网邮件扩展)文件,通常用来...

    Jmagick32位的和Jmagick64位的Jmagick.dll,Jmagick.jar

    例如,一个Web应用可能使用Jmagick来动态生成缩略图,或者在上传图片时进行预处理,以确保符合规定的尺寸和格式。 总的来说,Jmagick提供了一种灵活且强大的方式,让Java开发者能够充分利用ImageMagick的图像处理...

    64位Linux安装ImageMagick

    在64位Linux环境下安装ImageMagick,特别是与JMagick配合使用,是一个涉及多个步骤的过程,主要目的是为了实现Java应用程序对ImageMagick图像处理功能的调用。以下是详细的安装步骤和相关知识点: 1. **卸载旧版本*...

    PolSARpro6.0+Google Earth+ESA SNAP+GIMP+ImageMagick+Convert安装包

    GF3 SAR图像处理软件PolSAR,安装需要PolSARpro6.0安装包,包括Google Earth安装包、ESA-SNAP安装包、GIMP安装包、ImageMagick安装包,以及Convert.exe程序,PolSARproCheckConfigWin64.exe(用来检验PolSAR是否安装...

    jmagick安装和配置

    在运行Java应用时,使用`-Djava.library.path`参数指定`jmagick.dll`所在目录,例如: ```bash java -Djava.library.path="C:\Program Files\Java\jdk1.8.0_201\bin" -classpath "your_classpath" YourMainClass ```...

    jmagick.jar 用法

    - 在适当的时候使用多线程处理多个图像。 - 避免不必要的内存复制,例如,尽可能地重用 `ImageInfo` 和 `Image` 对象。 - 如果可能,尝试减少中间步骤,避免过多的图像转换和操作。 **总结** JMagick 是 Java ...

    jmagick-win-5.5.7-Q8.zip

    "jmagick-win-5.5.7-Q8.zip"这个压缩包中包含了在Windows环境下运行JMagick所需的所有组件,包括核心库文件"jmagick.dll"、Java类库文件"jmagick.jar"以及ImageMagick的安装程序"ImageMagick-5.5.7-Q8-windows-dll....

    ImageMagick使用手册

    JMagick是ImageMagick的一个Java绑定,它允许Java应用程序直接利用ImageMagick的功能。在Windows环境下,安装JMagick需要以下几个步骤: 1. 首先,你需要下载并安装ImageMagick。你可以从官方网站`...

    ImageMagick

    mageMagick (TM) 是一个免费的创建、编辑、合成图片的软件。它可以读取、转换、写入多种...ImageMagick是免费软件:全部源码开放,可以自由使用,复制,修改,发布。它遵守GPL许可协议。它可以运行于大多数的操作系统。

    ImageMagick安装配置forjava项目(使用jmagick)最新版本

    本文旨在为Java项目中使用jmagick库的ImageMagick安装与配置提供指南。ImageMagick是一款用C语言编写的图像处理工具,它支持对图像进行缩放、旋转、锐化、色彩调整以及特效添加等多种操作。用户既可以通过命令行界面...

    jmagick 软件、安装说明(window和linux两个版本)

    ImageMagick是一个广泛使用的跨平台图像处理库,能够读取、转换和写入多种图像格式。通过JMagick,开发者可以在Java环境中无缝地进行图像处理操作,如缩放、裁剪、旋转、调整颜色等。 **1. JMagick的基本概念** - *...

    jmagick.zip

    JMagick与ImageMagick是两个在图像处理领域中广泛使用的开源库,尤其在Java环境中,它们为开发者提供了强大的图像处理功能。本文将深入探讨这两个工具的核心概念、功能以及如何在实际项目中应用。 首先,JMagick是...

    jmagick 用法

    同时,确保 ImageMagick 的可执行文件(如 `convert.exe` 在 Windows 上)位于系统路径中,以便 JMagick 可以找到并调用。 **2. 创建 MagickImage 对象** 在 Java 代码中,使用 `MagickImage` 类来表示和操作图像...

    ImageMagick7.0.8 win64 16安装包下载。使用moviepy抛ImageMagick异常问题解决

    ImageMagick-7.0.8-56-Q16-x64-dll.rar是ImageMagick7.0.8的windows 64位操作系统的安装程序,解压执行即可安装。...ImageMagick利用多个计算线程来提高性能,并且可以读取,处理或写入兆,千兆或兆像素图像大小。

Global site tag (gtag.js) - Google Analytics