【问题标题】:How to make J2EE weblogic application resilient to database problems如何使 J2EE weblogic 应用程序对数据库问题具有弹性
【发布时间】:2012-06-04 14:21:21
【问题描述】:

我有一个在 Oracle Weblogic Server 11g 上运行的 Web 应用程序。 它使用应用服务器中定义的数据源连接到Oracle数据库(也是11g),它的类是

oracle.jdbc.xa.client.OracleXADataSource

  • 如果由于某种原因数据库不存在,然后出现 返回,应用程序运行正常(尝试时出现异常 访问数据库,但这很好,然后可以再次获得一些新的 数据库恢复时的连接)

  • 但是,如果数据库在 weblogic 服务器启动期间关闭数据源未部署在服务器和应用程序上 抛出异常,因为它没有任何可用的数据源, 部署被标记为失败,当然没有什么可以修复这个 自动。

有没有办法在服务器启动期间在数据库不存在的情况下部署数据源? (这样当数据库恢复时应用程序变得可用)

【问题讨论】:

  • 另一种选择可能是在服务器启动后部署数据源,通过 JMX 或通过 WebLogic 启动类(请参阅:docs.oracle.com/cd/E15051_01/wls/docs103/jdbc_admin/config.html)。这是一个选择吗?不过,我同意@Funtik 的回答。一般来说,在大多数情况下,您的数据库服务器应该至少与您的应用服务器一样可靠。
  • 首先,我完全同意: 1. 数据库服务器应该和应用服务器一样可靠。 2. 有一个需要数据库才能运行的应用程序没有它是有意义的。
  • 但是,我看不出服务器的启动顺序很重要的任何合理的逻辑理由:在我的情况下,两台机器都在虚拟化基础架构上运行,并且存在维护阶段或事件在它上面,当机器重新启动时,需要对服务器进行一些人工干预,但我发现它没用。如果数据源在这里,应用程序可以做一种“预启动”,并在获得数据库连接时真正初始化自己。你不觉得有道理吗?
  • @DenisR。对不起,如果我不清楚。你说的很有道理。我的意思不是改变两台服务器的启动顺序,而是在不部署数据源的情况下启动 WebLogic 服务器,稍后在确定数据库处于健康状态时部署它。您可以通过 JMX 甚至通过 Java 代码来做到这一点。不过,我不确定这是否符合您的需求。

标签: java weblogic datasource failover weblogic11g


【解决方案1】:

为什么要在没有有效数据源的情况下部署应用程序?

您可能会伪造数据源(创建一个具有相同 JNDI 名称的虚拟数据源)并假设应用程序在启动时未验证数据源架构,您将获得一个半功能运行的应用程序(在第一次数据库交互时将失败) )。

当真正的数据源启动并运行时,您将无法切换到它。您仍然需要重新启动应用程序服务器。

更新:

根据 J2EE 规范(1.5 版),资源在部署过程中是绑定的。我相信可以实现一个自定义工厂,它将返回虚拟/活动数据源。是否值得努力实施? ;)

EE.5.6.2 部署者的责任

将资源管理器连接工厂引用绑定到操作环境中存在的资源管理器连接工厂。例如,部署者可以使用 JNDI LinkRef 机制来创建到资源管理器连接工厂的实际 JNDI 名称的符号链接。资源管理器连接工厂类型必须与 res-type 元素中声明的类型兼容。

【讨论】:

    【解决方案2】:

    您正在寻找的选项是“连接创建重试”,请检查此link

    “如果设置并且在创建数据源时数据库不可用,WebLogic Server 会在您指定的秒数后再次尝试在池中创建连接,并将继续尝试创建连接直到成功。此选项适用于在服务器启动时创建数据源时创建的连接..."

    【讨论】:

    • 它确实看起来像我正在寻找的东西。我会对其进行测试并随时通知您
    • 嘿@DenisR.,您是否最终看到了您期望使用此设置的行为?我很想知道如果设置了数据源/应用程序是否可以部署并启动数据库。
    【解决方案3】:

    将“Initial Capacity”http://docs.oracle.com/cd/E14571_01/web.1111/e13814/jdbc_tuning.htm#i1028616 设置为 0:weblogic 在启动时不会尝试创建任何连接,如果 DB 不可用也不会失败。

    【讨论】:

      猜你喜欢
      • 2011-07-25
      • 2016-02-22
      • 1970-01-01
      • 2011-05-11
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      • 2013-03-30
      相关资源
      最近更新 更多