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组合,此组合已测试通过
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 server 2012 完整的扩展dll+版本适合的ImageMagick压缩包+Ghostscript安装包+thinkphp5的测试代码
imageMagick+ima4java配置,实现图片压缩
GF3 SAR图像处理软件PolSAR,安装需要PolSARpro6.0安装包,包括Google Earth安装包、ESA-SNAP安装包、GIMP安装包、ImageMagick安装包,以及Convert.exe程序,PolSARproCheckConfigWin64.exe(用来检验PolSAR是否安装...
ImageMagick, JMagick安装、配置及使用 使用JMagick压缩图片大小尺寸 生成高品质缩略图,jmagick使用指南
jmagick.jar,ImageMagick.exe,测试过,可用
mageMagick (TM) 是一个免费的创建、编辑、合成图片的软件。它可以读取、转换、写入多种...ImageMagick是免费软件:全部源码开放,可以自由使用,复制,修改,发布。它遵守GPL许可协议。它可以运行于大多数的操作系统。
在网上找了N多个ImageMagick与相关的Jmaigck,结果CSDN上面其他下载的配合起来总是会有问题,要么JVM崩溃,要么找不到DLL文件。自己去官网问了很久,才找到一对比较稳定的版本,6.3.9的,保存起来也希望大家能够喜欢...
因为im4java是基于imagemagick的commandline进行调用的java接口,不像 jmagick那样用java jni调用本地imagemagick的api那么复杂。其实安装imagemagick在任何平台都是一样的安装,在linux下面有rpm包,安装那个包,...
ImageMagick英文原版参考手册,附有一个PHP制作的电子贺卡范例.本书针对ImagaMagick 命令行有非常详细的介绍.特别对于ImageMagick内置的批处理语言Conjure有最详细的介绍.在其他地方我都没有看到过. ImageMagick + ...
ImageMagick-7.0.8-56-Q16-x64-dll.rar是ImageMagick7.0.8的windows 64位操作系统的安装程序,解压执行即可安装。...ImageMagick利用多个计算线程来提高性能,并且可以读取,处理或写入兆,千兆或兆像素图像大小。
ImageMagick是免费软件:全部源码开放,可以自由使用,复制,修改,发布。它遵守GPL许可协议。它可以运行于大多数的操作系统。ImageMagick的大多数功能的使用都来源于命令行工具。它可以读取、转换、写入多种格式的...
压缩包在java下使用jmagick的所有必需工具和安装包,还有使用实例。
ImageMagick命令使用文档
PHP+ImageMagick,图片压缩代码
ImageMagick-7.0.8-56-Q16-x64-dll.rar是ImageMagick7.0.8的windows 64位操作系统的安装程序,解压执行即可安装。...ImageMagick利用多个计算线程来提高性能,并且可以读取,处理或写入兆,千兆或兆像素图像大小。
ImageMagick