2012-03-22 40 views
4

我们开发了一个JEE5 Web应用程序(WAR),并在WebLogic 11g(10.3.5)下的生产环境中运行它。如何在WebLogic 11g上两次部署相同的Web应用程序?

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

我管理第一部分,为每个部署设置不同的上下文根。

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

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

+0

找到解决办法吗? – elopez 2013-04-30 15:47:32

+0

@elopez:没有比我自己的答案下面。 – 2013-05-02 06:29:03

回答

0

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

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

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 se来自您已配置的多个数据源。根据您的部署方式,您将创建不同的数据库连接并拥有正确的应用程序数据。

+0

你能解释一下更详细一点吗?以什么方式提供帮助,我可以怎样处理这些信息?根据这些信息,是否需要在应用程序代码中进行不同的操作?我正在寻找一种方法来保留代码_unchanged_并在部署时进行配置。 – 2012-03-22 09:49:41

+0

感谢您的澄清。但是我担心,这对我没有多大帮助,因为我有一个persistence.xml声明了持久化单元的名称和一个用于配置实体管理器的components.xml(来自Seam 2),所以我不会自己进行连接,但使用框架配置的实体管理器。 – 2012-03-22 11:44:54

+0

也许这东西可以参数化,希望你找到一种方法 – dldnh 2012-03-22 12:03:41

0

我知道这个线程很旧,但是回复的目的是为了能够帮助有同样问题的人在这个线程中磕磕绊绊。

最新的weblogic 12.2.1附带了多租户(我猜是附加的),它可以让您在单个域中运行相同的应用程序。

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

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

相关问题