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文件。
相关推荐
这个“ImageMagick-6.3.9+jmagick组合”指的是ImageMagick的一个特定版本6.3.9与JMagick的集成,已经过测试,确保在运行时的稳定性和兼容性。 ImageMagick的知识点: 1. **基本功能**:ImageMagick支持多种图像...
Jmagick包中的Changelog.txt中有ImageMagick与JMagick版本对应的关系的说明 ) 安装说明: ================================== cd /usr/bin/ rm java rm javac ln -s /usr/java/jdk6/bin/java java ln -s /usr/java/...
ImageMagic Tricks国外人写的一本书 ImageMagick+Tricks+Web+Image+Effects+from+the+Command+Line+and+PHP.pdf
在Windows环境下,使用ThinkPHP5.0框架配合PHP 7.0进行网页内容转化成PNG图片的操作,通常涉及到几个关键组件和技术:ImageMagick、Ghostscript以及PHP的GD库或Imagick扩展。这里我们将详细讲解这个过程,以及如何在...
以下是一个简单的Java示例代码,演示如何使用Im4Java库来实现图片的压缩功能: ```java import im4java.core.IMOperation; import im4java.core.ConvertCmd; public class Ima4JavaMagickCreator implements ...
**压缩包子文件的文件名称列表** 中,"ImageMagick 详细安装使用 linux (jmagick)_java.mht"可能是一个包含如何在Linux系统上安装和使用JavaMagick的教程文件,.mht是MHTML(多用途互联网邮件扩展)文件,通常用来...
例如,一个Web应用可能使用Jmagick来动态生成缩略图,或者在上传图片时进行预处理,以确保符合规定的尺寸和格式。 总的来说,Jmagick提供了一种灵活且强大的方式,让Java开发者能够充分利用ImageMagick的图像处理...
在64位Linux环境下安装ImageMagick,特别是与JMagick配合使用,是一个涉及多个步骤的过程,主要目的是为了实现Java应用程序对ImageMagick图像处理功能的调用。以下是详细的安装步骤和相关知识点: 1. **卸载旧版本*...
GF3 SAR图像处理软件PolSAR,安装需要PolSARpro6.0安装包,包括Google Earth安装包、ESA-SNAP安装包、GIMP安装包、ImageMagick安装包,以及Convert.exe程序,PolSARproCheckConfigWin64.exe(用来检验PolSAR是否安装...
在运行Java应用时,使用`-Djava.library.path`参数指定`jmagick.dll`所在目录,例如: ```bash java -Djava.library.path="C:\Program Files\Java\jdk1.8.0_201\bin" -classpath "your_classpath" YourMainClass ```...
- 在适当的时候使用多线程处理多个图像。 - 避免不必要的内存复制,例如,尽可能地重用 `ImageInfo` 和 `Image` 对象。 - 如果可能,尝试减少中间步骤,避免过多的图像转换和操作。 **总结** JMagick 是 Java ...
"jmagick-win-5.5.7-Q8.zip"这个压缩包中包含了在Windows环境下运行JMagick所需的所有组件,包括核心库文件"jmagick.dll"、Java类库文件"jmagick.jar"以及ImageMagick的安装程序"ImageMagick-5.5.7-Q8-windows-dll....
mageMagick (TM) 是一个免费的创建、编辑、合成图片的软件。它可以读取、转换、写入多种...ImageMagick是免费软件:全部源码开放,可以自由使用,复制,修改,发布。它遵守GPL许可协议。它可以运行于大多数的操作系统。
ImageMagick是一个广泛使用的跨平台图像处理库,能够读取、转换和写入多种图像格式。通过JMagick,开发者可以在Java环境中无缝地进行图像处理操作,如缩放、裁剪、旋转、调整颜色等。 **1. JMagick的基本概念** - *...
JMagick是ImageMagick的一个Java绑定,它允许Java应用程序直接利用ImageMagick的功能。在Windows环境下,安装JMagick需要以下几个步骤: 1. 首先,你需要下载并安装ImageMagick。你可以从官方网站`...
JMagick与ImageMagick是两个在图像处理领域中广泛使用的开源库,尤其在Java环境中,它们为开发者提供了强大的图像处理功能。本文将深入探讨这两个工具的核心概念、功能以及如何在实际项目中应用。 首先,JMagick是...
同时,确保 ImageMagick 的可执行文件(如 `convert.exe` 在 Windows 上)位于系统路径中,以便 JMagick 可以找到并调用。 **2. 创建 MagickImage 对象** 在 Java 代码中,使用 `MagickImage` 类来表示和操作图像...
ImageMagick-7.0.8-56-Q16-x64-dll.rar是ImageMagick7.0.8的windows 64位操作系统的安装程序,解压执行即可安装。...ImageMagick利用多个计算线程来提高性能,并且可以读取,处理或写入兆,千兆或兆像素图像大小。
在网上找了N多个ImageMagick与相关的Jmaigck,结果CSDN上面其他下载的配合起来总是会有问题,要么JVM崩溃,要么找不到DLL文件。自己去官网问了很久,才找到一对比较稳定的版本,6.3.9的,保存起来也希望大家能够喜欢...