Java堂  


m2eclipse插件使用中提示jar包找不到的解决方法

类归于: JavaPlateform — Jet @ 4:33 下午
原文出处: http://www.javatang.com/archives/2010/01/31/3312389.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

在Eclipse中使用m2eclipse开发Maven项目的时候,如果是创建Module项目的时候经常会莫名的出现找不到子模块包的错误信息,但是pom.xml已经加入了改包的引用,并且使用mvn deploy命令等编译也没有任何错误,后来在Eclipse中的Marks View中发现一个项目的warning信息:

Classpath entry org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER will not be exported or published. Runtime ClassNotFoundExceptions may result.

后来Google了一下,解决这个warning的步骤如下:
1. 首先右键项目,然后选择“Properties”,在左边选择Java Build Path,然后在右边的“Order andExport”标签中选中最下面的“Maven Dependencies”,然后确定;

2. 选择“Marks”或“Problems”视图,然后选中那个warning信息,右键选择“Quick Fix”,然后直接选择“Finish”,这样就可以了。

如果还是出现错误的信息,直接在上面的视图中右键删除提示就可以了。

参考资料:
Why the “MAVEN2_CLASSPATH_CONTAINER will not be exported or published”

Maven2部署构件到Nexus时出现的Failed to transfer file错误

类归于: Architecture, JavaPlateform — Jet @ 12:45 下午
Tags: ,
原文出处: http://www.javatang.com/archives/2010/01/23/4518375.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

具体怎样使用deploy命令部署构件到nexus服务器上可以参考经典的《Maven Definitive Guide》(Maven操作指南),书中的16.7节里面讲解的非常详细。假设我们在项目pom.xml文件中对maven服务器的设置信息如下:

  1. <distributionManagement>
  2.       <repository>
  3.           <id>nexus-releases</id>
  4.           <name>Local Nexus Repository</name>
  5.           <url>http://192.168.1.99:8081/content/repositories/releases</url>
  6.       </repository>
  7.       <snapshotRepository>
  8.           <id>nexus-snapshots</id>
  9.           <name>Local Nexus Repository</name>
  10.           <url>http://192.168.1.99:8081/content/repositories/snapshots</url>
  11.       </snapshotRepository>
  12.   </distributionManagement>

这里我要说的是在使用的过程中遇到的几个都是“Failed to transfer file”错误,错误信息如下格式:

Error deploying artifact: Failed to transfer file:… Return code is:4xx

也就是说前面错误的信息都是一样的,只是后面返回的HTTP状态数字不同。

1. Return code is: 405
这个问题害我查了两个多小时才发现错误的根源,简单的错误就是在Maven执行到上传文件到服务器的时候出现一个HTTP 405错误。开始的时候总以为是Maven本身的问题,所以在这个上面浪费了不少时间。后来仔细查了405错误的含义是“用来访问本页面的 HTTP 方法不被允许”,最后终于发现是因为前面repository的地址写错了,或者是端口写错,或者是地址中的某个单词拼错了,反正原因就是repository的地址写错了

2. Return code is: 401或者Return code is: 403
其实403错误就是“禁止访问”的含义,所以问题的根源肯定在授权上面。Maven在默认情况下会使用deployment帐号(默认密码deploy)登录的系统,但是关键的Nexus中Releases仓库默认的Deployment Policy是“Disable Redeploy”,所以无法部署的问题在这个地方,方法是将其修改为“Allow Redeploy”就可以了。

到这里还没有结束,因为如果直接按照上面的设置的话会有一个安全问题,那就是这样所有的开发人员都可以将构件部署到Nexus的releases仓库中了,时间长了会导致这个仓库中非常乱,这也应该是nexus为什么默认情况下将Release仓库的发布权限关闭的原因了。解决这个问题的整体思路就是在部署构件的时候需要使用用户名和密码登录,操作如下:
(1) 首先将Releases仓库默认的Deployment Policy修改为“Allow Redeploy”;
(2) 然后在右边的Security下面的Users中,修改deployment帐号的密码,方法是在帐号上右键,然后选择“Set Password”(PS:这个操作我找了好久,后来无意中右键才找到,呵呵~~);

(3) 这个时候如果直接执行 mvn deploy 命令的话就又会出现401错误,还有一步就是将密码设置到Maven settings.xml中。打开settings.xml文件(${user.home}/.m/settings.xml或%{m2_home}/conf/settings.xml),找到<servers>,然后修改信息如下:

  1. <server>
  2.       <id>nexus-releases</id>
  3.       <username>deployment</username>
  4.       <password>deploydv89</password>
  5.     </server>
  6.  
  7.     <server>
  8.       <id>nexus-snapshots</id>
  9.       <username>deployment</username>
  10.       <password>deploydv89</password>
  11.    </server>

这里需要特别说明一句的是里面的id必须和你在项目pom.xml文件中distributionManagement下面设置的仓库id一致!当然了,这个里面你也可以设置admin帐号,或者参照deployment的权限手动添加新的帐号等等都是可以的。

当然,问题到这里已经得到了比较完美的解放,但是如果有人还要较真的话会想到帐号的密码直接放到配置文件里面不是很安全。其实只要这里不建议放admin帐号,而deployment是无法登录的。如果非要更安全一些的话,也可以使用Maven 2.1.0之后所提供的密码加密功能,操作的步骤如下:
(1) 使用“mvn –encrypt-master-password xxx”或“mvn –emp xxx”创建一个主密钥,后面的xxx就是你所要设置的密钥的内容,这个密钥主要用于后面加密密码来用的;命令执行之后会产生一个类似{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}形式的字符串。
(2) 在${user.home}/.m/目录下创建一个名为settings-security.xml文件,我们将刚刚产生的主密钥放到这个文件中,文件的内容如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <settingsSecurity>
  3.     <master>{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}</master>
  4. </settingsSecurity>

注意,这个settings-security.xml文件一定要放在${user.home}/.m/目录下面,而不能放在${m2_home}/conf目录下!
(3) 使用“mvn –encrypt-password xxx”或“mvn –ep xxx”命令对帐号的密码进行加密,后面的xxx就是帐号的密码,加密之后依然会产生一个“{xxx}”形式的字符串,将这个字符串替换上面settings.xml文件中的server下面的password节点内容即可。
还有一种更安全的方式,就是将主密钥放到U盘里面,具体的操作可以看下面的参考资料。

3. Return code is: 400
400错误的含义是“错误的请求”,在这里的原因是往往是没有部署到nexus的仓库中。nexus的repository分三种类型:Hosted、Proxy和Virtual,另外还有一个repository group(仓库组)用于对多个仓库进行组合。部署的时候只能部署到Hosted类型的仓库中,如果是其他类型就会出现这个400错误。

还有一种情况也会出现400错误,就是默认情况下部署构件到Releases仓库中有时也会出现400错误,这个原因就像上面提到的那样,Nexus中Releases仓库默认的Deployment Policy是“Disable Redeploy”,所以无论你在settings.xml文件中将server的username设置为deployment还是使用admin都是无法部署的,就会出现这个400错误。这个问题也困扰了我好长时间,而且我还看到网上有人说admin没有部署构件的权限,这个是不对的。修改的方法可以参考上面第2条的做法。

参考资料:
maven 中 部署构件至Nexus(mvn deploy)
Maven2中需要注意的问题
maven deploy到nexus私服出错问题
Maven Tips and Tricks: Encrypting Passwords
Maven – Password Encryption

离线版Google Chrome Frame下载

类归于: OS — Jet @ 8:47 上午
原文出处: http://www.javatang.com/archives/2010/01/19/4754372.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

Google Chrome Frame是Google公司在早些时候推出的一个IE插件,功能是让IE支持Chrome浏览器内核,这个插件一推出就在业内引起了广泛的争议。

但是Chrome Frame官方提供的下载地址都是在线安装版本的,没有离线安装文件,后来Google了一下终于找到了其离线版的下载地址:http://cache.pack.google.com/edgedl/chrome/install/295.0/chromeframe_installer.exe 。不过从下载的地址来看应该是一个临时的,但是我已经下载下来了,安装文件是11.9MB。

下载下来之后可以使用下面的命令来定制安装,参数的含义一看英文就很明白了。

chromeframe_installer.exe –do-not-launch-chrome –do-not-create-shortcuts –do-not-register-for-update-launch –system-level –chrome-frame

Good Luck!

参考资料:

http://code.google.com/p/chromium/issues/detail?id=22733

Apache下FastCGI模块的众多版本

类归于: OS, Web&Server — Jet @ 8:36 上午
Tags: ,
原文出处: http://www.javatang.com/archives/2010/01/07/3629356.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

这两天在Apache上配置以FastCGI方式来加载PHP和Perl,连续花了三天的时间才正式配置好并且稳定了,配置的话到不是很麻烦,关键是配置好之后还要稳定。后续我会将整个过程记录下来给大家分享,今天我要先说的是FastCGI的版本问题。

目前我们在网上能够找到的FastCGI有三个版本:
(1) mod_fastcgi:官方地址是http://www.fastcgi.com/。这个可以说是最初始的FastCGI的版本,可惜的是现在作者已经好久没有维护了,现存编译好的版本非常少,其官方网站更多的是以一个“标准”的姿态出现的。现在给出通过官方网站没法直接找到的两个地址,一个是下载地址http://www.fastcgi.com/dist/,另外一个是相关的配置参数的文档http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html。虽然是官方标准,但是不建议在生产环境中直接使用,因为它特别的不稳定,而且兼容性极差。

(2) mod_fcgid v2.2:官方地址是http://fastcgi.coremail.cn/,不过网站现在打不开了,所幸的是可以在http://www.apachelounge.com/download/网站上下载。fcgid是在fastcgi的基础上进行了扩展和优化,并且针对Apache的新版本做了及时的更新,使得可以在生产环境下使用,二者具体的区别可以阅读下面的参考资料。原来在coremail上所提供的文件因为现在网站没法访问,所以具体的关于ApacheLounge上所提供的mod_fcgid2.2和coremail上所提供的有什么区别我不是很了解。所幸我找到了作者的邮箱,通过跟作者邮件沟通了解到,原来作者在做完第一个版本的fcgid之后就将源代码发布到了网上,后来ApacheLounge的Steffen使用源代码重新在Windows下面编译后发布了可以直接使用的二进制版本的mod_fcgid.so文件。同时,Steffen也是Apache Windows版本的一个维护者。经过试用,我感觉这个版本的mod_fcgid是最适合在Windows环境下使用的。

(3) mod_fcgid v2.3.x +:官方地址为http://httpd.apache.org/mod_fcgid/,相关文档地址为:http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html。这个是目前Apache官方所提供的mod_fcgid,目前最新版本为2.3.4。通过作者了解到,这个是作者将原来放在coremail上的mod_fcgid代码捐献给Apache之后由Apache官方来维护的一个版本,可以说是2.2版本之后的后续版本。但是我在Windows上面使用之后感觉不是很稳定,Apache总是隔一段时间就自动关闭,不知道是我设置的问题还是其他问题。

综合来看,上面三个版本的情况如下:

  • mod_fastcgi:最初始的标准版本,适合开发,不适合直接在生产环境中使用;
  • mod_fcgid v2.2:目前在Apache Lounge上提供下载,个人认为是最适合在Windows环境下使用的一个版本,缺点是因为原来的fastcgi.coremail.cn网站已经不能访问,所以所参考的文档极少;
  • mod_fcgid v2.3.x +:最新最稳定的官方版本,其特点是目前mod_fcgid中最新的版本,而且是有官方来维护,文档内容也非常丰富。但以我个人使用来看,在Windows环境下不是很稳定。
  • 更新(2010.1.8):经过同mod_fcgid原作者Ryan Pan (Pan Qingfeng, pqf or 潘庆峰)沟通,他已经答应将原来在http://fastcgi.coremail.cn/的内容放到本站做镜像,详细说明见http://www.javatang.com/mod_fcgid-v2-2-mirror

    附同mod_fcgid作者沟通的邮件内容(经本人允许):

    庆峰,你好!
    很冒昧的给你发mail,我是mod_fcgid的使用者,有个疑问一直未知,就是关于mod_fcgid版本的问题。我现在在网络上找到三种mod_fcgid的版本:
    (1) 在http://www.apachelounge.com/download/上列出的两个mod_fcgid-2.2b-w32.zip(用于Apache 2.2.9+)和 mod_fcgid-2.2a-w32.zip(用于Apache 2.2.0到2.2.8),作者好像是Steffen。
    (2) 在http://fastcgi.coremail.cn/index.cn.htm(现在无法访问了)上也有一个mod_fcgid,作者的信息我只在ChinaUnix找到一个帖子http://bbs3.chinaunix.net/thread-320106-1-1.html,有人说跟上面的是同一个,但因为网站无法访问,所以没有办法看到。
    (3) 最后一个就是你写的mod_fcgid了,官方地址是http://httpd.apache.org/mod_fcgid/,现在的版本是2.3.4,详细文档地址是http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html。
    因为想在实际的项目中使用mod_fcgid加载PHP,所以还望解答我的疑问,非常感谢!
    顺颂商祺!
    马志勇 (Jet Ma)
    =========================
    Hi, 马先生
    (1)其实是专门维护Windows版Apache的一位外国朋友做的,源代码也是来自标准的mod_fcgid, 不过Steffen维护的是Windows版的编译好的mod_fcgid.so,方便大家直接使用(Windows很多人没有安装编译工具,直接给源代码大家基本上没多少人可以用的上)
    (2) 之前做mod_fcgid的时候,代码和文档一直放在这里的,但是后来代码捐献了给Apache之后,这里就不再维护了,另外最近公司服务器做了一些调整,我也改不了redirect到apache网站了
    (3) 这是当前官方的mod_fcgid, 维护的是最新最稳定的mod_fcgid, Apache软件基金会的程序员(我也是其中之一)正在维护这个项目,如果您有什么问题,可以直接在Apache的邮件列表提出的(不过使用问题最好不要在开发邮件列表提出了)

    Thanks

    参考资料:
    mod_fastcgi和mod_fcgid的区别
    Windows 下 Apache 1.3 以 FastCGI 模式运行 PHP

    Subversion和Apache的安装使用指南

    类归于: JavaPlateform, Web&Server — Jet @ 5:21 上午
    原文出处: http://www.javatang.com/archives/2009/12/31/2139330.html
    作者: Jet Mah from Java堂
    声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

    虽然Subversion(SVN)直接可以注册为服务程序,但是最方便的还是使用SVN+Apache的方式,因为可以无防火墙限制、方便直接使用浏览器对代码进行浏览等等。下面我就将自己在Windows下安装Subversion(SVN)和Apache的方法记录一下:

    1. 从Apache网站上下载Apache的安装包进行安装,这个过程比较简单。需要注意Apache的版本,本文采用2.2,当然也可以使用2.0版本。假定Apache的安装目录为D:\apache2。

    2. 在http://subversion.tigris.org/官方下载Subversion的Windows下面与Apache的配合版本,这里需要注意Apache的版本,2.0和2.2的是不一样的,不要下载错了。

    然后将下载下来的zip包解压缩到一个目录,比如D:\svn-win32-1.6.6。

    3. 将svn安装目录的bin目录下面的mod_authz_svn.so和mod_dav_svn.so两个文件拷贝到Apache安装目录的modules目录下面,然后修改Apache的配置文件httpd.conf,将下面两行的注释去掉:

    LoadModule dav_fs_module modules/mod_dav_fs.so
    LoadModule dav_module modules/mod_dav.so

    同时在下面增加两行:

    LoadModule dav_svn_module modules/mod_dav_svn.so
    LoadModule authz_svn_module modules/mod_authz_svn.so

    4. 接下来就是对SVN进行配置了,配置文件(包含每条的含义)如下:

    # 表示访问SVN的地址,形式为http:///svn
    <Location /svn>
    # 告诉Apache哪个模块负责服务像那样的URL--在这里就是Subversion模块
    DAV svn
    # 在Subversion 1.3及更高版本中,这个指示器使得Subversion列出由SVNParentPath指定的目录下所有的版本库
    SVNListParentPath on
    # 下面制定SVN仓库的位置,有两种选择:
    # (1) 单库:一个Apache下面只有一个SVN仓库,这样的话就使用SVNPath来指定唯一的仓库位置,访问仓库的方式是http:///svn
    # (2) 多库:一个Apache下面可以有多个SVN仓库,这样的话就使用SVNParentPath来指定所有仓库所在的主目录,访问仓库的方式是http:///svn/仓库1、http:///svn/仓库2等等
    SVNPath “D:\Data\SVNData\repository”
    #SVNParentPath “D:\Data\SVNData\repository”

    # 当一个验证对话框弹出时,告诉用户这个验证是用来做什么的
    AuthName “Subversion repositories”
    # 启用基本的验证,比如用户名/密码对,通常来做这样做就已经足够了。
    AuthType Basic
    # 指定密码文件的位置,密码文件中存放了用来验证用户的用户名和密码信息。这个文件的生成方式在后续步骤中会介绍
    AuthUserFile “D:\Data\SVNData\config\passwd”
    # 对版本库和人员进行权限分配,后面会进行详细的设置和介绍。
    AuthzSVNAccessFile “D:\Data\SVNData\config\svnaccessfile”

    # 限定用户只有输入正确的用户名及密码后才能访问这个路径
    Require valid-user
    # 如果想匿名读取的话使用下面的方式
    #<LimitExcept GET PROPFIND OPTIONS REPORT>
    #Require valid-user
    #</LimitExcept>
    </Location>

    5. 接下来使用Apache中的htpasswd.exe命令来生成密码文件,也就是上面AuthUserFile 设置项所指向的文件,切换到Apache安装目录的bin目录下,指向下面的命令:

    # 后面的参数c表示新建文件,在第一次执行的时候使用
    htpasswd -c D:\Data\SVNData\config\passwd
    # 如果是追加新用户或修改原有用户密码,命令后面不加参数c
    htpasswd D:\Data\SVNData\config\passwd

    每次执行命令之后会提示输入两遍密码

    6. 这个时候如果重启Apache的话会出现一个错误提示,这个是因为svn所使用的一些dll文件apache还无法获取,解决的方法可以将svn安装目录的bin目录下面的dll文件拷贝到系统的system32目录下面,但最好的方式是将bin目录加入到path环境变量中。

    7. 这个时候如果访问http:///svn的话,应该会出现一个登录框,输入用户名/密码之后就可以看到SVN仓库的内容了。不过常见下面的几个错误:
    (1) 出现“403 Forbidden”错误
    出现这个错误的原因有很多种,比如Apache2.2相对于之前的版本来说增强了安全性,默认情况下目录是禁止访问的,将“<Directory />”修改如下:

    <Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Allow from all
    </Directory>

    如果这样还不行的话那就是“多库还是单库”的问题了。上面讲过,在对SVN进行配置的时候,使用SVNParentPath设置所有库的根目录,在根目录下面存放多个SVN的库,那这样的话直接访问父目录是没有权限的,只能通过http:///svn/project1来访问对应的项目仓库;如果使用SVNPath设置为单库的话则不会出现这个错误了。

    (2) 出现“<m:human-readable errcode=”720003″>Could not open the requested SVN filesystem</m:human-readable>”错误
    出现这个错误是告诉你你所指定的SVN仓库的位置并不是一个合法的SVN仓库,解决的方法是首先创建一个空目录,然后使用“svnadmin create”命令来创建SVN库:

    # 首先进入 D:\Data\SVNData\repository 目录下
    md project1
    svnadmin create D:\Data\SVNData\repository\project1

    8. 最后安装SVN客户端就可以访问啦,Eclipse集成的客户端推荐使用Subclipse,Visual Studio集成的客户端推荐使用ankhsvn,系统集成的客户端推荐使用TortoiseSVN

    参考资料:
    [翻译] windows安装基于Apache的SVN服务器(包括SSL配置)
    基于svnserve的服务器,权限文件authz配置的常见问题及解答
    Forbidden access or bad repository ?
    Subversion for Windows 安裝指南

    在Eclipse WTP中加入Resin server adapter

    类归于: JavaPlateform — Jet @ 6:01 上午
    原文出处: http://www.javatang.com/archives/2009/12/30/0134324.html
    作者: Jet Mah from Java堂
    声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

    目前Eclipse的WTP用来开发JavaEE的功能越来越强大了,再配合上Maven和Ant,完全可以将MyEclipse丢到垃圾桶了。但是在使用WTP进行Server配置的时候发现竟然不支持Resin,后来Google了一下,找到两个解决的方法:
    1. Amateras 这个是一个日本人写的Eclipse插件,可以绑定Resin到WTP中,不过他支持的Eclipse和Resin的版本都比较低,而且好久都没有更新了,不推荐使用。

    2. The Resin Eclipse plugin 这个是在Resin的官方WIKI上发现的一个Eclipse插件,比较稳定也比较活跃,是Resin官方推荐使用的插件,Eclipse Update地址是:http://caucho.com/eclipse,安装之后就会在Server Adapter里面出现Resin Server了。

    参考资料:
    IDE-CauchoWiki
    WTP扩展(1):增加Resin Server Runtime Environments

    Windows下手动安装JRE和Tomcat出现的错误

    类归于: JavaPlateform — Jet @ 5:39 上午
    Tags:
    原文出处: http://www.javatang.com/archives/2009/12/30/3926321.html
    作者: Jet Mah from Java堂
    声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

    我通常不喜欢在系统中使用安装程序来安装JDK,而是直接做一个拷贝,然后指定JAVA_HOME和CLASSPATH环境变量。另外Tomcat的安装我也是喜欢下载zip包的形式,然后解压缩到一个目录下面,启动的时候直接运行bin/startup.bat就可以了。

    可是使用bin/service.bat 将Tomcat安装成Windows Service(Windows服务)程序的时候会出现“[Tomcat]Failed creating java ….\jvm.dll”的提示,后来Google了一下,原来是JRE的bin目录下有一个msvcr71.dll文件在启动的时候需要依赖,所以可以将这个文件拷贝到%SystemRoot%\system32下面,也可以拷贝到Tomcat的bin目录下面,当然你可以将%JRE_HOME%\bin加入到path环境变量中,总之要让系统或Tomcat找到这个dll文件。这里比较推荐的方式是使用最后一种,毕竟有可能不仅仅是Tomcat会使用到这个dll文件,也不一定只会用到这一个dll文件。 :)

    参考资料:[Tomcat]Failed creating java D:\jre6\bin\client\jvm.dll的解决

    分享几句话

    类归于: Life — Jet @ 8:22 上午
    Tags:
    原文出处: http://www.javatang.com/archives/2009/09/18/2219311.html
    作者: Jet Mah from Java堂
    声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

    好久没有更新文章了,是在对不住一直关注我的朋友了。

    先给大家一起分享几句话,请好好体会一下。

    The world needs dreamers and the world needs doers. But above all, the world needs dreamers who do. -Sarah Ban Breathnach

    文武争驰,君臣无事,可以尽豫游之乐,可以养松乔之寿,鸣琴垂拱,不言而化。何必劳神苦思,代下司职,役聪明之耳目,亏无为之大道哉?-魏征《谏太宗十思疏》

    穷人缺什么?表面缺金钱,本质缺野心,脑袋缺观念,机会缺了解。命运缺选择,骨子缺勇气!

    生活的确是黑暗的,除非有了渴望;所有渴望都是盲目的,除非有了知识; 一切知识都是徒然的,除非有了工作; 所有工作都是空虚的,除非有了爱;当你们带着爱工作时,你们就与自己、与他人、与上帝合为一体。—[黎巴嫩]纪伯伦

    使用Jacob时出现的另一个UnsatisfiedLinkError错误:jacob.dll already loaded in another classloader

    类归于: JavaPlateform — Jet @ 12:00 上午
    Tags:
    原文出处: http://www.javatang.com/archives/2009/06/01/0036305.html
    作者: Jet Mah from Java堂
    声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

    之前文章中已经说过Jacob在windows2003环境下使用的时候会出现UnsatisfiedLinkError错误,解决的方法是需要下载Redistributable Package安装即可。

    但如果在JavaEE项目中使用Jacob的时候还会出现另外一个UnsatisfiedLinkError错误:jacob.dll already loaded in another classloader,错误往往会出现在Web容器重启之后。后来查到下面的相关资料:

    Java API表明:JVM只允许一个默认的ClassLoader来load native library,同时并不提供专门的API来unload一个loaded native library,因此无法在我们的重启Web应用的代码中来手工清除已经load的jacob。

    原因找到了,这是因为在重启Web容器的时候并不会自动结束上一次对dll的加载,解决问题的关键在于重启Web程序之后要确保不要再次加载jacob.jar包,有一个方法就是不要将jacob.jar包放在web程序中,而是将jacob.jar包放在Web容积自身的lib目录下面就可以了。

    参考资料:
    jacob.dll already loaded in another classloader

    卸载冰盾防火墙造成网卡不能使用的问题

    类归于: OS — Jet @ 8:32 上午
    Tags: ,
    原文出处: http://www.javatang.com/archives/2009/05/18/3237301.html
    作者: Jet Mah from Java堂
    声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

    前段时间服务器上按照冰盾防火墙,在软件到期之后卸载了,等到重启服务器之后发现系统中网卡“消失”了。驱动没有了,重新安装网卡驱动没有效果,卸载掉网卡驱动再安装也没用,甚至在BOIS中将网卡屏蔽掉然后再启动依然不行。就这样来回折腾了三四个小时都是不能找到网卡,最后只能决定重新安装一下系统。

    因为在机房中进行操作,所以如果安装系统的话很多软件需要重新配置,非常麻烦。后来想到在卸载冰盾防火墙出现提示重启的时候我选择的否,然后我为了减少重启的次数又对“本地连接”中的TCP/IP属性进行了一些修改,最后才重启的,会不会是因为这个原因造成的?

    于是我又重新安装了一遍冰盾防火墙,重启之后久违的“本地连接”出现了,网络连接也正常了。这个时候再卸载冰盾防火墙,完成后直接重启服务器就没有之前的问题了。后来我又在本地一台服务器上面做了一个实验,就是再执行完冰盾卸载程序之后不立即重启,然后对“本地连接”中的TCP/IP属性进行操作之后再重启,依然发现“本地连接”消失了,看来这是冰盾防火墙卸载程序的一个重大bug。

    解决的方法就是重新安装冰盾防火墙,然后执行完卸载重新之后立即重启就可以了。

    下一页 »