JNDI
JNDI(Java Naming and Directory Interface )是Java EE中容器服务的重要组成部分. 主要作用是给多种命名和目录服务提供了统一的接口1. 使用JNDI的EE应用可以保存和获取任意类型的Java对象.
其中的命名和目录服务指定范围比较广泛, 包括LDAP(The Lightweight Directory Access Protocol), DNS和NIS(The Network Information Service).
由容器实现者实现JNDI通常被称为JNDI命名上下文(naming context).
命名空间(namespace)
命名环境提供了四个逻辑命名空间: java:comp, java:module,
java:app, and java:global分别提供给组件, 模块, 应用程序以及所有部署程序共享的类.
一个Java EE组件能创建一个javax.naming.InitialContext
类, 然后再命名空间java:comp/env以及子路径中查找相关的环境上下文.
Tomcat2
Apache Tomcat™ 是java Servlet, JavaServer Pages, Java Expression Language和Java WebSocket技术的一个开源实现.
Tomcat中的JNDI命名上下文3
首先, 在Java EE规范中, 规定了/WEB-INF/web.xml文件中一系列元素用来引用和定义资源.
此外, 在$CATALINA_BASE/conf/server.xml和META-INF/context.xml中的<Context>
标签中, 也可以定义资源. Tomcat规定了资源配置必须在<Context>
使用下列标签, 包括:
<Environment>
用来定义有限个暴露给web应用的JNDIInitialContext
的环境变量.<Resource>
<ResourceLink>
<Transaction>
以下, 我们用<Environment>
标签做一个例子来熟悉JNDI的定义.
Environment标签4
你可以像下面这样配置命名值(named value), 它会被当成一个环境条目资源, 这样web程序在环境条目中就能看到这个变量了.
<Context>
...
<Environment name="maxExemptions" value="10"
type="java.lang.Integer" override="false"/>
...
</Context>
<Environment>
标签中有效的属性值如下:
属性 | 描述 |
---|---|
description | 可选, 给人写的描述信息. |
name | 相对于命名空间java:comp/env的名字资源名. |
override | 是否允许<env-entry> 标签覆盖同名的环境资源. true是允许, false为不允许. 默认为true. |
type | Java类型的全限定名. |
value | 资源的值, 必须能转换成定义的Java类型. |
[1]:The Java EE tutorial