如何在WebLogic 11g上两次部署相同的Web应用程序?

时间:2012-03-22 08:52:46

标签: java web-applications deployment weblogic-10.x java-ee-5

我们开发了一个JEE5 Web应用程序(WAR)并在WebLogic 11g(10.3.5)下运行它。

现在,应该将同一个应用程序部署为同一WebLogic上不同客户(不同URL,不同数据)的单独应用程序。

我通过在部署之后为每个部分设置不同的上下文根来管理第一部分。

但是我还没有让它们使用不同的数据源 - 因为我想避免客户特定的构建,所以persistence.xml对于所有应用程序都是相同的,因此也是持久性单元名称。

此方案的最佳设置是什么?我是否强制进行单独的构建以及不同的WAR,或者我必须将服务器或域与服务器分开,还是有更好的方法来解决它?

3 个答案:

答案 0 :(得分:0)

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();
  ...
}

我的想法是,您可以使用name从已配置的多个数据源中进行选择。根据您的部署方式,您将建立不同的数据库连接并获得正确的应用程序数据。

答案 1 :(得分:0)

在我看来,在Oracle文档中看来,拥有多个域是使用相同的持久性单元名称分隔数据源的唯一方法 - 这很糟糕,因为这基本上意味着并行运行两个WLS。 / p>

出于这个原因,我决定构建单独的WAR文件(我最初试图避免),包括客户特定的persistence.xml文件,并在WLS中指定客户特定的数据源。

答案 2 :(得分:0)

我知道这个帖子已经很老了,但回复是为了帮助有同样问题的人在这个帖子上磕磕绊绊。

最新的weblogic 12.2.1附带Multi-tenancy(我猜是附加组件),它可以让你在一个域中运行相同的应用程序。

编辑: Weblogic 12.2.1引入了名为Partitions的概念。分区是weblogic域的配置和运行时细分。在单个weblogic域中,您可以创建多个分区。每个分区都有一个或多个资源组。资源组是weblogic resorces的逻辑分组,如数据源,jms,Java EE应用程序等。例如,为了实现原始帖子所要求的内容,我们创建了一个资源组模板,其中包含Web应用程序和数据源作为资源。在数据源配置中,我们可以提供占位符变量而不是实际URL作为DB URL。然后我们可以创建两个引用此资源组模板的分区(每个分区现在都有一个单独的Web应用程序和数据源)。每个分区将通过创建具有相同JNDI名称的两个数据源来覆盖DB URL属性。在每个分区中,我们创建虚拟主机/端口,以便客户端可以使用它来访问在相应分区中运行的应用程序。

有关此问题的更详细信息可在https://blogs.oracle.com/WebLogicServer/entry/domain_partitions_for_multi_tenancy

中找到