java - 不同应用服务器上 JNDI 中的自定义资源

标签 java jakarta-ee jboss weblogic jndi

前言:
大多数 J2EE 应用程序都通过 JNDI 使用容器管理的数据源。这很好,因为它为配置这些连接提供了一个位置。
当我们想要使用 ORM 框架(如 hibernate)或必须知道默认模式(主要用于 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
  • 网络逻辑 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

最佳答案

对于 WebSphere,您实际上可以在定义的数据源中设置默认架构。它是一个名为 currentSchema 的自定义属性。 (即,在 V7 中它是 Resources > JDBC > Data sources > your data source name > Custom properties > currentSchema。

否则,您可以使用 namespace 绑定(bind)并在那里定义它:(即,在 V7 中,它是环境 > 命名 > namespace 绑定(bind)。如果您不想以编程方式设置它,您可以使用 JNDI 来查找它WebSphere。

无法使用 JBoss 和 WebLogic,因为我没有使用过它们。

关于java - 不同应用服务器上 JNDI 中的自定义资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3749799/

相关文章:

java - 如何使用 RedHat 在启动时自动运行 JBoss 应用程序

Java - 内存使用,了解渲染的工作原理

java - 是否可以在运行时创建 Java 模型对象并动态映射 Spring Batch Reader 中的字段?

java - 更改 SWT Shell 的字体

java - 为什么每次重新部署都需要刷新连接池?

java - 无法创建类 org.jboss.arquillian.test.impl.EventTestRunnerAdaptor 的新实例

java - 此版本的渲染库比您的 IntelliJ IDEA 版本更新。请更新 IntelliJ IDEA

java - .class 文件中的版本号错误。在 Jdev 10.1.3.4.0 中嵌入的 oc4j

java - web.xml 到 WebSecurityConfigurerAdapter

java - JBoss6 和 Seam3 环境中的 Seam 邮件