我已经下载了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
答案 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之后将数据源命名为数据源。但将其命名为有意义的事情是有意义的。