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包的锁打开。
现在该模块除了不能修改站点名字(最恨的是修改名字有时成功,有时失败。最恨这种概率性的错误),其他都还算比较成功。
页:
[1]