我们开发了一个JEE5 Web应用程序(WAR),并在WebLogic 11g(10.3.5)下运行它.
现在,应将同一应用程序部署为同一WebLogic上不同客户(不同URL,不同数据)的单独应用程序.
我通过在部署之后为每个部分设置不同的上下文根来管理第一部分.
但我还没有让他们使用不同的数据源 – 因为我想避免客户特定的构建,所以persistence.xml对于所有应用程序都是相同的,因此也是持久性单元名称.
这种情况的最佳设置是什么?我是否强制进行单独的构建以及不同的WAR,或者我必须将服务器或域与服务器分开,还是有更好的方法来解决它?
解决方法
ServletContextListener.contextInitialized可以查看ServletContext并找出哪个部署
在web.xml中,定义一个servlet上下文侦听器:
<listener> <listener-class>com.path.YourServletContextListener</listener-class> </listener>
然后在YourServletContextListener.java中,添加一个contextInitialized方法,如下所示:
public void contextInitialized(ServletContextEvent sce) { ServletContext sc = sce.getServletContext(); String name = sc.getContextPath(); ... }
我的想法是你可以使用该名称从已配置的多个数据源中进行选择.根据您的部署方式,您将建立不同的数据库连接并拥有正确的应用程序数据.