【发布时间】:2012-02-15 04:05:21
【问题描述】:
我有多个客户:
- 客户端 1 - 40 个用户
- 客户端 2 - 50 个用户
- 客户端 3 - 60 个用户
我有一个应该为所有客户端提供服务的 Web 应用程序。 应用程序被部署到 Tomcat 中。每个客户都有自己的数据库。
我想要实现的是为所有客户端提供服务的单个 Web 应用程序实例。客户端(以及要连接的数据库)由 URL 中的上下文路径标识。
即我暗示以下场景:
- 一些用户请求http://mydomain.com/client1/
- Tomcat 调用我的应用程序的单个实例(无论请求哪个上下文)
- 我的应用程序处理请求的其余部分,认为它已部署到 /client1 上下文路径,即所有重定向或相对 URL 应针对 http://mydomain.com/client1/ 解析
当客户端 2 请求 http://mydomain.com/client2/ 时,我希望我的应用程序(同一个实例)现在处理它,就像它部署到 /client2 上下文路径一样。
Tomcat 可以做到这一点吗?
【问题讨论】:
-
三次部署同一个应用程序(配置不同)会更容易也更安全,每次都有自己的配置和上下文路径。按照您的操作方式,来自客户端 1 的人可以轻松访问客户端 2 的数据。您最终会重新实现 Tomcat 为您实现的功能。
-
嗯,应用程序很大,当然我没有 3 个客户,但还有更多。我只是想减少内存消耗并防止多次加载同一个应用程序。
-
我可以看到减少内存消耗的愿望,特别是在应用程序非常大的情况下。然而,在我看来,它的设计已经把它拉到了一个角落。最好的方法一直是 1) 要么拥有三个不同配置的部署(如 JB Nizet 所说),要么 2) 拥有三个物理上不同的容器进程,每个容器进程托管一个单独的、不同配置的部署。哪个更好取决于应用程序和 JEE 容器。您正在尝试手动实现应用程序/容器隔离。 "ZOMG! SNAFU" 有很多方法,所以如果你必须走这条路,请谨慎行事。
-
内存很便宜。软件工程师(和律师)不是:-)
标签: java tomcat configuration web