Java 是否存在JNDI命名空间约定?

Java 是否存在JNDI命名空间约定?,java,jakarta-ee,jboss,datasource,Java,Jakarta Ee,Jboss,Datasource,我已经下载了JBoss EAP 6.1,我将添加一个新的数据源。我必须将数据源绑定到JNDI名称。通过读取示例数据源的JNDI名称: java:jboss/datasources/ExampleDS 我看到他们在java:jboss之后使用了datasources。这仅仅是一种命名约定——我在任何地方都找不到——还是使用java:jboss/bananaboat/MyDS` 下面列出的第一部分(例如java:comp是范围,其余部分只是普通的层次结构组织)是否正确 java:comp/ - T

我已经下载了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

这一切都来自记忆(刚才另一位团队成员告诉我):

java:前缀是JBoss/EE标准。对于所有不可序列化的资源,都应该加上前缀,这意味着它们是jvm的本地资源。在这之后,您可以命名任何您想要形成类似“目录”结构的东西。e、 如果您使用JNDI获得绑定“java:jboss/datasources”,您将获得该名称下列出的所有资源的子树。它将包含示例,也可能包含其他数据源


回答您的问题:您不必用java:jboss来命名数据源。但是给它起个有意义的名字是有意义的。

我不得不自己回答同样的问题,并把这些链接放在一起

简而言之,可以是任何类型,但JEE定义了自己的:

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

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

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

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

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

  • comp
    绑定到为组件相关绑定保留的子树
  • env
    绑定到一个子树,该子树是为组件的部署描述符定义的与环境相关的绑定保留的
  • 资源工厂引用放置在按其资源管理器类型区分的子树中。
    • jdbc
      用于jdbc数据源引用
JEE 7教程还详细介绍了在中引用EJB的命名策略

请注意,
@Resource
用于注入
数据源的注释
通常指定相对于
java:comp/env
的JNDI名称-有关可移植和可部署的解决方案,请参见

中所述,
java:jboss
名称空间是仅由WildFly/jboss提供的自定义扩展



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

数据源应该命名为:jdbc/MyDS吗?甚至“jboss/EE标准”都意味着应该将链接更正为什么