【问题标题】:Are there JNDI namespace conventions?有 JNDI 命名空间约定吗?
【发布时间】:2013-12-16 19:07:06
【问题描述】:

我已经下载了 JBoss EAP 6.1,我要添加一个新的数据源。我必须将数据源绑定到 JNDI 名称。通过读取示例数据源的 JNDI 名称,即:

java:jboss/datasources/ExampleDS

我看到他们在java:jboss 之后使用了datasources。这只是一个命名约定 - 我无法在任何地方找到 - 还是使用 java:jboss/bananaboat/MyDS 可以吗?`

下面列出的第一部分是否正确 - 例如java:comp 是范围,其余只是正常的层次结构?

java:comp/ - The namespace is scoped to the current component (i.e. EJB) 
java:module/ - Scoped to the current module 
java:app/ - Scoped to the current application      
java:global/ - Scoped to the application server

https://docs.jboss.org/author/display/AS71/JNDI+Reference

【问题讨论】:

标签: java jakarta-ee jboss datasource


【解决方案1】:

这都是凭记忆(前段时间另一个团队成员告诉我的):

java: 前缀是 JBoss/EE 标准。它应该作为所有不可序列化资源的前缀,这意味着它们是 jvm 的本地资源。之后,您可以命名任何您喜欢的名称,以形成类似“目录”的结构。例如如果您使用 JNDI 来绑定“java:jboss/datasources”,您将获得以该名称列出的所有资源的子树。它将包含 ExampleDS 和可能的其他数据源。

回答您的问题:您不必在 java:jboss 之后将其命名为数据源。但将其命名为有意义的名称是有意义的。

【讨论】:

  • 数据源是否应该命名为:jdbc/MyDS?
  • “JBoss/EE 标准”是什么意思
【解决方案2】:

我必须自己回答同样的问题,然后将这些链接放在一起。

简而言之,JNDI Naming Policies 可以是任何,但 JEE 定义了自己的:

JNDI 的定义独立于任何特定的命名和 目录服务实现。

但是,一个重要的平台确实定义了一组有限的 使用 JNDI 的命名策略是 ... JEE

这将是数据源最传统的名称:

企业命名空间植根于 java URL 方案的 URL 上下文中。

例如,JDBC Salary 数据库的名称可能为“java:comp/env/jdbc/Salary”。

  • ...comp 绑定到为组件相关绑定保留的子树。
  • ...env 绑定到为组件的环境相关绑定保留的子树,由其部署描述符定义。
  • 资源工厂引用放置在按其资源管理器类型区分的子树中。
    • ...jdbc 用于 JDBC 数据源引用。

JEE 7 教程还详细介绍了在 32.4.1.1 Portable JNDI Syntax 中引用 EJB 的命名策略。

请注意,@Resource 注入 DataSource 的注解通常指定相对于 java:comp/env 的 JNDI 名称 - 请参阅 this answerthis answer 以了解可移植性和可部署性解决方案。

your updated link 中所述,java:jboss 命名空间是仅由 WildFly/JBoss 提供的自定义扩展。


为了回答这个问题,标准命名空间下的子树只是正常的层次结构。显然,只有当这些子树被应用程序服务器、文档、流程等(广泛)识别时才有意义。否则,我猜几乎平坦的键值或随机的bananaboat/MyDS 很好,但仍然必须“挂载”在支持的命名空间下,如 java:jboss

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 2018-03-21
    • 2013-07-18
    • 1970-01-01
    • 2016-03-25
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多