目前,我们支持许多使用相同Web应用程序的客户端,但每个客户端都有不同的配置来访问其数据库,设置文件等。随着客户端列表的增长,更新Web应用程序变得越来越艰巨,并且重复资源浪费了内存,文件空间等。
我们想要做的是拥有一个由所有儿童网络应用共享的父网络应用。然后让每个子Web应用程序只携带特定于它们的文件。当子Web应用程序启动时,Tomcat从父Web应用程序加载Web应用程序,然后在相同的程序包结构后覆盖子Web应用程序中定义的任何文件。
我们一直在谷歌搜索,并没有找到一个现成的或完整的解决方案。我们看过的解决方案:
有人对如何解决这个问题有什么建议或想法吗?如果无法进行Tomcat配置,那么不同的应用程序服务器(如Glassfish)或用于更新动态文件的工具(如OSGi,rsync)如何。如果可能,想要删除资源重复。
谢谢。
答案 0 :(得分:1)
没有“父”或“子”webapps这样的东西。它不是J2EE规范和AFAIK的一部分,任何应用程序服务器都不支持它。
那就是说,你的问题是双重的:
1)拥有共享资源。假设“资源”意味着静态资源(images / CSS / javascript / etc ...),这部分非常简单。
shared
(或lib
最新版本中);否则你可以在每个应用程序中部署它们。2)简化部署。我不确定这里的大问题是什么......编写一个基于“common”和“per”的Ant(批处理,shell,你有什么)脚本来组装和部署WAR是相当简单的-app“目录结构。
或者,您可能需要查看使用JNDI来严重减少必须部署的文件数量(理论上,每个应用程序只需一个context.xml
。
答案 1 :(得分:0)
如果您在网络应用中使用Spring,则可以构建父子层次结构 - Using a shared parent application context in a multi-war Spring application。
即。您可以在'parent'上下文中定义所有共享内容,并使用'child'上下文来使用它。
答案 2 :(得分:0)
如果您只是设置了文件和配置更改,则可以通过context.xml管理这些更改,然后您可以将每个应用程序上下文的docBase指向公共目录,以便所有应用程序共享相同的源。
缺点是应用程序的更改需要重启tomcat。
如果您想覆盖逻辑,这不能解决您的问题。
我正在探索类似场景的一个选项是将客户端自定义部分移动到ajax小部件/小工具中。然后让它成为配置文件的一部分,告诉应用程序为哪个客户端提取哪个版本的小工具。
您可以查看有关应用程序在此处共享文档库的文档http://tomcat.apache.org/tomcat-5.5-doc/config/context.html