tomcat下的资源锁问题

其实这个应该不算问题,是一个tomcat中的一个机制。

问题描述:

我前些天完成了一个用户3步自定义建站的功能模块。大致介绍一下:

用户登录,在页面表单中输入站点的一些基本信息,选择logo,单击创建,一个自定义站点就在服务器上的tomcat中的webapp目录下创建成功,用户可以转回到站点列表中单击刚才生成的站点链接即时访问站点。

这个模块除了权限控制外的难点主要有下面2点:

1)编辑站点名称时,对tomcat下的webapp目录中的站点文件夹重命名。

2)用户即时访问站点。

上面的难处都跟tomcat的资源锁有关系。

为了能实现用户即时访问新建站点(无需重启tomcat),我在模块中配了一个context.xml文件,配置如下:

 

<?xml version="1.0" encoding="UTF-8"?> 

<Context reloadable="true" antiJARLocking="true" antiResourceLocking="false">

</Context> 

 

最开始的配置是这样的:

 

<?xml version="1.0" encoding="UTF-8"?> 

<Context reloadable="true" antiJARLocking="true" antiResourceLocking="true">

</Context> 

按照最开始的配置没有这些问题,因为上面配置文件中的 xxxLocking 设置成 true的话,已经将tomcat的资源锁打开,这样就不存在资源被锁的问题。但是部署项目测试几次后发现服务器的磁盘已经被吃的只剩下5M,妈妈咪,太吓人了。以为是中毒了,后来在g.cn上发现,都是context.xml配置的问题。将资源锁打开后,项目文件会在tomcat的temp文件夹下面自动生成一个该项目的临时拷贝,而且不会自动删除。由于用于新建站点的模版比较大,所以就出现了服务器上的磁盘被狂吃的情况。

之后把context.xml文件配置改成如下:

 

 

<?xml version="1.0" encoding="UTF-8"?> 

<Context reloadable="true" antiJARLocking="false" antiResourceLocking="false">

</Context> 

改完配置后测试发现站点文件夹名称重命名失败,renameTo()方法总是返回false.莫名其妙。经过痛苦的Debug和Search后发现原来是资源锁没打开的原因。这个问题到现在还没有解决,总之还是期待有缘人吧。

那么为什么context.xml文件的配置会改成如下呢?

 

<?xml version="1.0" encoding="UTF-8"?> 

<Context reloadable="true" antiJARLocking="true" antiResourceLocking="false">

</Context> 

原因是,在删除站点的时候明明提示webapp下面的相关文件已经全部删除,但是去webapp目录下看总是会留下a/WEB-INF/lib/之后是该项目的jar包。(a表示站点名称) 之后看了配置文件,明白了,原来jar包锁设置为false,在项目热启动后会将原来删除的jar重新加载进来,至于资源锁设置为false,而删除的资源没有重新加载就没弄清楚真相,但是想想也对。如果删除的资源也能重加载那就比较恐怖了。所以为了将项目删干净,便将jar包的锁打开。

现在该模块除了不能修改站点名字(最恨的是修改名字有时成功,有时失败。最恨这种概率性的错误),其他都还算比较成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值