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

m_v*_*aly 4 java jboss weblogic jndi java-ee

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

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

正如我发现有一种简单的方法来指定Apache Tomcat中的自定义资源(在这种情况下它将是具有默认模式名称的String)(如果我错了,请纠正我):

<Environment name="schemaNames/EmployeeDB"
             type="java.lang.String"
            value="empl"
      description="Schema name of Employees Database for HR Applications"/>
Run Code Online (Sandbox Code Playgroud)

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

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

如果你知道其他服务器也会很棒.

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

非常感谢你 !


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

发现信息的WebLogic,但他们谈论与配置programmaticly并没有这样做:
http://weblogic-wonders.com/weblogic/2010/06/12/binding-objects-in-weblogic-servers-jndi-tree/
HTTP :?//forums.oracle.com/forums/thread.jspa MESSAGEID = 4397353

Chr*_*ich 5

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

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

不能和JBoss和WebLogic说话,因为我没有使用它们.