如何在不重新启动Web应用程序的情况下重新加载servlet类?

时间:2010-03-05 13:07:34

标签: java class servlets classloader

我想重新加载我的web图层类而不重新加载我的服务层类(这需要更长的时间来初始化和更改频率更低)。我的服务层没有引用到Web层,我可以毫无问题地创建一个全新的Web层实例。

我可以设想一个涉及复杂的类加载器技巧的解决方案来隔离它自己的类加载器中的Web层,我认为这可能是唯一的方法,所以我要问的是,是否有一个库在那里做到了吗?

我了解JavaRebel - 我不需要那么大的力量,而且我真的在寻找更轻量级的免费解决方案。

4 个答案:

答案 0 :(得分:3)

如果您的网络层与服务层分开,您是否可以将它们部署为单独的应用程序?然后可以根据需要经常重新加载Web应用程序。

如果重新加载webapp的原因是配置更改,则将属性等从WEB-INF文件夹移开(因为它们通常不会重新加载/重新加载)。可以在Spring和FreeMarker中找到处理可重载配置等的想法

答案 1 :(得分:1)

我认为你最终会浪费更多的时间来开发这个功能而不是实际开发webapp。只是生活,这就是你付出的代价。我可以想象,对于那些习惯于在每个新代码行上进行F5 /刷新的PHP开发人员而言,这可能会令人沮丧......但是,它还取决于您正在使用的appserver。大多数人只支持hotdeploys。确保您的配置也是如此,通常IDE应该已经注意了这一点(至少,我的确如此:Eclipse + Tomcat6或Glassfish3)。

它可能还取决于有问题的appserver是否快速和/或成功。我已经体验过Glassfish - 尽管它是一个缓慢的起动器 - 在热部件中非常快。我喜欢。 Tomcat在这方面有点慢,也并不总是成功的(例如旧的东西/垃圾仍在内存中等等)。

答案 2 :(得分:1)

答案 3 :(得分:0)

不确定这会解决您的问题,但如果您可以轻松实例化Web层的整个实例,也许您可​​以创建一个名为reloadWebLayer()的方法。然后在单击时调用reoladWebLayer()的管理页面添加一个按钮?

如果你需要它自动重新加载,你可以设置一个计时器并每x秒调用一次reloadWebLayer(),或者你可以编写一个文件监听器,只要类路径上的文件发生变化就运行reloadWebLayer()?