【问题标题】:Custom resource in JNDI on different application servers不同应用服务器上 JNDI 中的自定义资源
【发布时间】:2010-09-20 08:37:18
【问题描述】:

前言:
大多数 J2EE 应用程序都通过 JNDI 使用容器管理的数据源。这很好,因为它为配置这些连接提供了一个位置。
当我们想要使用 ORM 框架(如休眠)或必须知道默认模式的东西(主要用于 Oracle,也可能是其他模式)时,就会出现问题,这可能与用于连接数据库的用户名不同。

我想将默认模式名称放在靠近数据源定义的位置。一种选择是将它放在 JNDI 中。然后,我将在构建 EntityManager 之前从那里手动读取(实际上使用 Spring)。

我发现有一种简单的方法可以像这样在 Apache Tomcat 中指定自定义资源(在这种情况下,它将是带有默认架构名称的字符串)(如果我错了,请纠正我):

<Environment name="schemaNames/EmployeeDB"
             type="java.lang.String"
            value="empl"
      description="Schema name of Employees Database for HR Applications"/>

无论如何,考虑到这可以在 Apache Tomcat 中完成,我应该如何在其他应用程序服务器中配置相同的自定义 JNDI 资源(字符串类型):

  • JBoss 4/5
  • WebSphere 6/7
  • WebLogic 9/10

如果您了解其他服务器,那就太好了。

另外,作为替代方案,我不想将架构名称放在系统属性或环境变量中。

非常感谢!


更新:
在 JBoss 上找到了一些实现它的方法。我没有测试它。
http://forums.java.net/jive/thread.jspa?messageID=316228

找到有关 WebLogic 的信息,但他们谈论的是通过编程而不是配置来实现:
http://weblogic-wonders.com/weblogic/2010/06/12/binding-objects-in-weblogic-servers-jndi-tree/
http://forums.oracle.com/forums/thread.jspa?messageID=4397353

【问题讨论】:

  • 为什么不想使用环境变量(env-entry)?
  • 这正是我想要做的,但没有编辑应用程序的 web.xml。

标签: java jakarta-ee jboss weblogic jndi


【解决方案1】:

对于 WebSphere,您实际上可以在定义的 DataSource 中设置默认模式。它是一个名为 currentSchema 的自定义属性。 (即,在 V7 中,它是资源 > JDBC > 数据源 > 您的数据源名称 > 自定义属性 > currentSchema。

否则,您可以使用名称空间绑定并在那里定义它:(即,在 V7 中,它是环境 > 命名 > 名称空间绑定。如果您不想以编程方式将其设置在WebSphere。

无法与 JBoss 和 WebLogic 交谈,因为我没有与他们合作过。

【讨论】:

    【解决方案2】:

    如果您使用的是 Hibernate,这是要添加到持久性单元中的属性:

    <property name="hibernate.default_schema" value="myschema" />
    

    这是 JPA 将为表名插入的前缀。

    如果您需要更接近 AS 数据源定义的内容,您可以在数据库连接时注入一些特定于数据库的 SQL;例如甲骨文,

    更改会话集 CURRENT_SCHEMA =

    在 JBoss 上,您可以在数据源定义中添加:

    <new-connection-sql>
    ALTER SESSION SET CURRENT_SCHEMA=myschema
    </new-connection-sql>
    

    也可以在 JBoss 7 Admin 中编辑。

    在 Weblogic 上,您可以将其注入连接池。

    在 Websphere 上,这应该是类似的。

    【讨论】:

      【解决方案3】:

      在 JBoss 上,您可以使用特殊的 MBean(org.jboss.naming.JNDIBindingServiceMgr) 和 service.xml 来配置 JNDI 条目,然后将这些条目映射到您的 web 应用程序中。对于这个相当重要的过程,这里有一个冗长的解释:

      http://usna86-techbits.blogspot.com/2011/01/jboss-jndi-and-javacompenv.html

      我仍在寻找一种将整个属性文件/资源​​包放入 jndi 的方法,因为当您有很多属性要放入 jndi 并为您的 web 应用程序提供时,这种手动映射会变得非常乏味.

      【讨论】:

        【解决方案4】:

        对于 WebLogic,尤其是 10.3.5 (11g),同样的问题已经困扰了很长一段时间。

        我花了一天的大部分时间环顾四周,我发现的只是:http://code.google.com/p/weblogic-jndi-startup/。它工作得很好。它有一点限制:它要求您要添加到 JNDI 的对象有一个带有单个 String 参数的构造函数。

        对于我需要的东西,weblogic-jndi-startup 不起作用,所以我在 Roger 的代码上构建并提出了这个:https://bitbucket.org/phillip_green_idmworks/weblogic-jndi-custom-resource-configuration/。我在http://coder-in-training.blogspot.com/2012/03/weblogic-jndi-custom-resource.html 写了一篇文章。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-13
          • 1970-01-01
          • 2016-09-23
          • 2023-03-06
          • 2018-05-17
          • 1970-01-01
          • 2012-12-01
          • 1970-01-01
          相关资源
          最近更新 更多