将多个上下文根映射到单个应用程序

时间:2014-03-05 08:04:14

标签: java

我正在寻找解决方案,因为2天我们如何将多个上下文映射到单个部署的应用程序? 让我们提供更多细节...... 我们有一个应用程序(我们称之为All),它应该部署一次并引用多个上下文根,以便每个客户都可以使用不同的URL访问此应用程序。

ex: http://localhost:8080/Customer1 ===> webapp(All) 
    http://localhost:8080/Customer2 ===> webapp(All)

我尝试使用Apache的ProxyPass and ProxyPassReverse选项,如下所示。 但是当服务器收到来自客户端的请求时,它可以看到在这种情况下部署在服务器上的应用程序的上下文路径ALL(而不是CustomerX)。在服务器端,我需要知道请求了哪个客户(上下文根),以便我可以加载客户特定的登录页面,数据等。

  ProxyPass /Customer1 http://localhost:8083/ALL
  ProxyPassReverse /Customer1 http://localhost:8083/ALL
  ProxyPass /Customer2 http://localhost:8083/ALL
  ProxyPassReverse /Customer2 http://localhost:8083/ALL

然后我开始了解weblogic的Sahred图书馆概念并且它有效..! 在weblogic中,我们可以将应用程序部署为共享库,并使用来自不同Web应用程序(虚拟)的不同上下文根来引用它。 所以在我的情况下,我需要创建虚拟Web应用程序(对于Customer 1,Customer2 ... Customer n)并从这些应用程序中引用共享库应用程序。 如果我们采用共享库方法,有什么优缺点?那么内存消耗,会话管理呢? 有什么建议吗?还有其他解决办法吗?

1 个答案:

答案 0 :(得分:0)

这些网络应用程序不会是虚拟的。对于每个应用程序,服务器应创建特定的类加载器和其他所有内容。因此,使用此方法即使使用共享库,也会消耗更多内存。实际上,您还可以隔离共享库以避免一个客户端“打扰”另一个客户端。理想情况下,所有客户端都应该完全隔离,因为一个客户端不应该为另一个客户端问题付费(例如:资源使用过多)。

  • 相同的网络应用: 隔离每个请求 共享资源:计算资源,操作系统,Application Server资源,类,对象池等 注意:只有一个版本

  • 使用隔离的共享库的不同webapp 每个类加载器的隔离 共享资源:计算资源,操作系统,Application Server资源,来自共享库的类代码 (部署/发布同步) 注意:只有一个版本

  • 不同的webapps没有共享库 每个类加载器的隔离 共享资源:计算资源,操作系统和Application Server资源 (部署中的某种隔离) 开销:Web应用程序足迹

  • 不同的应用服务器 隔离每(Java)虚拟机 共享资源:计算资源(可能以某种方式隔离)和操作系统 开销:应用程序服务器占用空间+ Web应用程序占用空间

  • 不同的虚拟机: 每个(OS)虚拟机的隔离 共享资源:计算资源(可以隔离) 开销:操作系统占用空间(以某种方式通过智能虚拟化最小化)+ Web应用程序占用空间

计算资源:磁盘空间,I / O,CPU和内存