是否有JNDI命名空间约定?

时间:2013-11-30 20:18:17

标签: java java-ee jboss datasource

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

java:jboss/datasources/ExampleDS

我发现他们在datasources之后使用了java:jboss。这只是一个命名约定 - 我无法在任何地方找到 - 或者使用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

2 个答案:

答案 0 :(得分:2)

我不得不自己回答同样的问题并将这些链接拉到一起。

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

  

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

     

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

这将是数据源的最常规名称:

  

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

     

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

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

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

请注意,@Resource注入注释DataSource通常会指定相对于java:comp/env的JNDI名称 - 请参阅 this answer {{3 用于便携式和可部署的解决方案。

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

要回答这个问题,标准命名空间下的子树只是普通层次结构。显然,只有应用服务器,文档,进程等(广泛地)识别这些子树才有意义。否则,我猜几乎平坦的键值或随机bananaboat/MyDS很好,但仍然必须是& #34;安装"在支持的命名空间下,如java:jboss

答案 1 :(得分:0)

这一切都来自记忆(不久前我被其他团队成员告知):

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

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