文档章节

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

猪刚烈
 猪刚烈
发布于 2014/09/24 13:52
字数 662
阅读 33
收藏 0

       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文件。

 

 

本文转载自:http://elf8848.iteye.com/blog/474697

共有 人打赏支持
猪刚烈
粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
私信 提问
centos 6.2 安装 JMagick 64位 (转载)

把老版本的ImageMagick和JMagick卸载干净 查看版本号: [root@3qianke ~]# rpm -qa | grep ImageMagick ImageMagick-6.2.8.0-4.el5_1.1 ImageMagick-6.2.8.0-4.el5_1.1 [root@3qianke ~]# r......

枫爱若雪
2013/07/01
0
6
在CentOS4上安装JMagick

用Java做网站经常要处理用户上传的图片,例如生成缩略图等等。虽然Java可以使用Java2D进行一些图片操作,但是功能和效率实在太差了。 目前比较好的是用JMagick来进行图像处理,不过JMagick是...

红薯
2008/12/15
920
0
ImageMagick 图片处理工具的安装

ImageMagick安装配置 for java项目 (使用jmagick) 目录: 一、ImageMagick介绍 二、在Linux上用源码安装ImageMagick与jmagick 三、在Linux上使用yum安装ImageMagick 四、在windows上安装I...

铁血战士
2011/10/01
9.3K
0
ImageMagick高清压缩图片-GraphicsMagick+im4java

之前有写过imageMagick压缩图片的文章,但是那篇文章中用到的是jmagick。 JMagick是一个开源API,利用JNI(Java Native Interface)技术实现了对ImageMagick API的Java访问接口,因此也将比纯J...

Gmupload
2013/09/09
0
0
JMagick安装(Linux版)

要安装JMagick,必须先安装ImageMagick。 ImageMagick在FC3下有RPM,所以apt-get install ImageMagick。安装测试好之后,运行jmagick的./configure,死左。它说找不到ImageMagick的api.h。 ...

红薯
2009/01/25
3.8K
21

没有更多内容

加载失败,请刷新页面

加载更多

day179-2018-12-16-英语流利阅读-待学习

《海王》:上映 7 天,票房突破 9 亿,DC 要翻身? Daniel 2018-12-16 1.今日导读 这部电影堪称“有《阿凡达》般的视觉奇观,《指环王》般的史诗质感,《夺宝奇兵》般的寻宝历险,《狮子王》...

飞鱼说编程
16分钟前
5
0
window下安装maven

1.下载软件包: 2.解压到当前的安装路径: D:\Maven3.5.3 3.添加环境变量: 新建一个名为:MAVEN_HOME 填写解压路径:D:\Maven3.5.3 打开path,添加:%MAVEN_HOME%\bin 确定即可。 4.验证环境...

狼王黄师傅
30分钟前
5
0
聊聊flink的FsCheckpointStorage

序 本文主要研究一下flink的FsCheckpointStorage CheckpointStorage flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/CheckpointStorage.java /** * CheckpointStor......

go4it
52分钟前
3
0
makefile 常用函数

Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是 Unix程序员。今天我们来学习下makefile的常用函数。 《GNU make》h...

科陆李明
今天
21
0
Android 报错 Could not find com.android.tools.build:aapt2:3.2.1-4818971.

报错信息: Could not find com.android.tools.build:aapt2:3.2.1-4818971.Searched in the following locations: file:/C:/Users/96110/AppData/Local/Android/Sdk/extras/m2reposito......

lanyu96
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部