Tomcat中使用JNDI引用外部资源

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应用的JNDI InitialContext的环境变量.
  • <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

推荐文章

由NSClassFromString生成的类与头文件中定义的类不关联

由NSClassFromString生成的类与头文件中定义的类不关联

推荐文章

如何在泛型类之外获取实际的泛型参数?

如何在泛型类之外获取实际的泛型参数?

推荐文章

类中的boost::thread

类中的boost::thread

推荐文章

需要帮助获取android手机上安装的所有应用程序的列表吗

需要帮助获取android手机上安装的所有应用程序的列表吗

推荐文章

在重复键上插入导致自动递增字段出现问题

在重复键上插入导致自动递增字段出现问题

推荐文章

Flash AS3中的每周/重复选项?就像日历上的每周重复?

Flash AS3中的每周/重复选项?就像日历上的每周重复?

推荐文章

异步组件和WinForms

异步组件和WinForms

推荐文章

如何保持最新的SDK更新?

如何保持最新的SDK更新?

推荐文章

如何使用jquery获取内容

如何使用jquery获取内容

推荐文章

如何在JTextArea中打开文件,并使用FileReader和FileWriter类进行读写操作

如何在JTextArea中打开文件,并使用FileReader和FileWriter类进行读写操作

推荐文章

如何选择下一个没有特定CSS类的div

如何选择下一个没有特定CSS类的div

推荐文章

在Xcode 4中的哪里存储自定义图标?

在Xcode 4中的哪里存储自定义图标?

推荐文章

如何在macosx中检测java运行时?

如何在macosx中检测java运行时?

推荐文章

Javascript、单选按钮和PHP

Javascript、单选按钮和PHP

推荐文章

使用ApacheAxis2和Tomcat版本7的web服务出现问题

使用ApacheAxis2和Tomcat版本7的web服务出现问题

推荐文章

将mongoid_slug与CanCan的load_和_authorize_资源一起使用

将mongoid_slug与CanCan的load_和_authorize_资源一起使用