Java 命名和目录接口 (Java Naming and Directory Interface, JNDI) 是一种应用编程接口 (application programming interface, API),用于访问不同类型的命名和目录服务。Java EE 组件通过调用 JNDI 查找方法来定位对象。
JNDI 是 Java 命名和 API 目录接口的首字母缩略词。通过对此 API 进行调用,应用程序可以定位资源和其他程序对象。资源是提供到系统(如数据库服务器和消息传送系统)的连接的程序对象。(JDBC 资源有时被称为数据源。)每个资源对象都是由唯一的友好名称所标识,称为 JNDI 名称。Application Server 附带的命名和目录服务将资源对象及其 JNDI 名称绑定在一起。要创建新资源,需要将新的名称-对象绑定输入到 JNDI 中。
本节包括以下主题:
J2EE 命名服务
命名引用和绑定信息
使用自定义资源
使用外部 JNDI 系统信息库和资源
J2EE 命名服务
JNDI 名称是便于用户使用的对象名称。这些名称通过 J2EE 服务器提供的命名和目录服务绑定到其对象。由于 J2EE 组件通过 JNDI API 访问此服务,因此对象通常使用其 JNDI 名称。例如,PointBase 数据库的 JNDI 名称为 jdbc/Pointbase。Application Server 启动时,将从配置文件中读取信息,并自动将 JNDI 数据库名称添加到名称空间。
Java EE 应用程序客户机、企业 Bean 以及 Web 组件都需要具有权限才能访问 JNDI 命名环境。
应用程序组件的命名环境是一种机制,使用它可以在部署或汇编期间自定义应用程序组件的商业逻辑。使用应用程序组件的环境即可对应用程序组件进行自定义,而无需访问或更改应用程序组件的源代码。
Java EE 容器实现 Java EE 应用程序组件的环境,并将该环境作为 JNDI 命名上下文提供给 Java EE 应用程序组件实例。J2EE 应用程序组件的环境的使用方式如下:
应用程序组件的商业方法使用 JNDI 接口访问该环境。应用程序组件提供商在部署描述符中声明应用程序组件需要其运行时环境提供的所有环境项。
容器实现存储应用程序组件环境的 JNDI 命名上下文。容器还提供了部署者可以用于创建和管理每个应用程序组件的环境的工具。
部署者使用容器提供的工具,可以初始化应用程序组件的部署描述符中声明的环境项。部署者可以设置和修改环境条目的值。
容器使环境命名上下文在运行时可用于应用程序组件实例。应用程序组件的实例使用 JNDI 接口获取环境项的值。
每个应用程序组件定义了其本身的环境项集合。一个应用程序组件在同一容器内的所有实例共享相同的环境项。不允许应用程序组件实例在运行时修改环境。
命名引用和绑定信息
资源引用是部署描述符中的一种元素,用于标识该资源的组件的编码名称。更具体地说,编码名称引用资源的连接工厂。在下节给出的示例中,资源引用名称为 jdbc/SavingsAccountDB。
资源的 JNDI 名称和资源引用名称是不同的。使用此命名方法,您需要在进行部署之前先映射这两个名称,但此方法也用于将组件与资源分离开。由于具有此分离功能,因此如果组件在以后需要访问其他资源,则无需更改名称。这一灵活性使您可以更加容易地从先前存在的组件汇编 J2EE 应用程序。
下表列出了用于 Application Server 所使用的 J2EE 资源的 JNDI 查找及其关联的引用。
表 6–1 JNDI 查找及其关联的引用 JNDI 查找名称
关联的引用
java:comp/env
应用程序环境条目
java:comp/env/jdbc
JDBC 数据源资源管理器连接工厂
java:comp/env/ejb
EJB 引用
java:comp/UserTransaction
UserTransaction 引用
java:comp/env/mail
JavaMail 会话连接工厂
java:comp/env/url
URL 连接工厂
java:comp/env/jms
JMS 连接工厂和目标
java:comp/ORB
应用程序组件之间共享的 ORB 实例
使用自定义资源
自定义资源访问本地 JNDI 系统信息库,外部资源访问外部 JNDI 系统信息库。这两种类型的资源都需要用户指定的工厂类元素、JNDI 名称属性等。在本节中,我们将讨论如何为 J2EE 资源配置 JNDI 连接工厂资源,以及如何访问这些资源。
在 Application Server 中,您可以创建、删除和列出资源以及 list-jndi-entities。
使用外部 JNDI 系统信息库和资源
通常,在 Application Server 上运行的应用程序需要访问存储在外部 JNDI 系统信息库中的资源。例如,一般的 Java 对象可能会以 Java 模式存储在 LDAP 服务器中。外部 JNDI 资源元素允许用户配置此类外部资源系统信息库。外部 JNDI 工厂必须实现 javax.naming.spi.InitialContextFactory 接口。
使用外部 JNDI 资源的示例:
<resources>
<!-- external-jndi-resource element specifies how to access J2EE resources
-- stored in an external JNDI repository. The following example
-- illustrates how to access a java object stored in LDAP.
-- factory-class element specifies the JNDI InitialContext factory that
-- needs to be used to access the resource factory. property element
-- corresponds to the environment applicable to the external JNDI context
-- and jndi-lookup-name refers to the JNDI name to lookup to fetch the
-- designated (in this case the java) object.
-->
<external-jndi-resource jndi-name="test/myBean"
jndi-lookup-name="cn=myBean"
res-type="test.myBean"
factory-class="com.sun.jndi.ldap.LdapCtxFactory">
<property name="PROVIDER-URL" value="ldap://ldapserver:389/o=myObjects" />
<property name="SECURITY_AUTHENTICATION" value="simple" />
<property name="SECURITY_PRINCIPAL", value="cn=joeSmith, o=Engineering" />
<property name="SECURITY_CREDENTIALS" value="changeit" />
</external-jndi-resource>
</resources>
本章说明如何配置用于访问企业信息系统 (enterprise information system, EIS) 的连接器。本章包括以下几个部分:
连接器概述
管理连接器连接池
管理连接器资源
管理受管对象资源
连接器概述
连接器模块也称为资源适配器,是允许应用程序与企业信息系统 (enterprise information system, EIS) 进行交互式操作的 Java EE 组件。EIS 软件包含各种类型的系统:包括企业资源规划 (ERP)、主机事务处理和非关系数据库。类似其他 Java EE 模块,安装连接器模块即是部署该连接器模块。
连接器连接池是一组用于特定 EIS 的可重复使用的连接。要创建连接器连接池,请指定与池关联的连接器模块(资源适配器)。
连接器资源是为应用程序提供到 EIS 的连接的程序对象。要创建连接器资源,请指定其 JNDI 名称及其关联的连接池。多个连接器资源可以指定一个连接池。应用程序可通过查找资源的 JNDI 名称定位资源。(有关 JNDI 的更多信息,请参见“JNDI 名称和资源”部分)。EIS 的连接器资源的 JNDI 名称通常位于 java:comp/env/eis-specific 子上下文中。
Application Server 使用连接器模块(资源适配器)实现 JMS。请参见“JMS 资源与连接器资源之间的关系”部分。
管理连接器连接池
要创建、编辑和删除连接器连接池,请在管理控制台中单击“资源”—>“连接器连接池”。有关管理连接器连接池的详细说明,请查看管理控制台联机帮助。
设置 EIS 访问
部署(安装)连接器。有关部署连接器的详细说明,请查看管理控制台联机帮助。
为连接器创建连接池。
创建与连接池关联的连接器资源。
管理连接器资源
要创建、编辑和删除连接器连接池,请在管理控制台中单击“资源”—>“连接器”。有关管理连接器连接池的详细说明,请查看管理控制台联机帮助。
管理受管对象资源
封装在资源适配器(连接器模块)中的受管对象为应用程序提供了专用功能。例如,受管对象可以提供对特定于资源适配器及其关联的 EIS 的分析器的访问。对象可以被管理,即管理员可以配置对象。要配置对象,请在“创建管理对象资源”页面或“编辑管理对象资源”页面中添加名称-值属性对。创建受管对象资源时,请使管理的对象与 JNDI 名称相关联。
要创建、编辑和删除连接器连接池,请在管理控制台中单击“资源”—>“受管对象资源”。有关管理连接器连接池的详细说明,请查看管理控制台联机帮助。
http://docs.sun.com/app/docs/doc/820-4606/abllp?l=zh&a=view
分享到:
相关推荐
我们需要在 `META-INF/context.xml` 文件中配置 JNDI 资源,并在 Java 代码中使用 `InitialContext` 对象来查找 JNDI 资源。同时,我们还需要在 `WEB-INF/web.xml` 文件中添加资源环境引用和资源引用,以便连接到 ...
可以利用Spring的JNDI_lookup标签或者`jee:jndi-lookup`元素来查找并注入JNDI资源,例如数据源。这样,Spring管理的bean可以直接使用由JNDI查找得到的数据源。 3. **Hibernate:** Hibernate作为ORM框架,用于对象-...
在Java应用服务器中,数据源(DataSource)通常作为一个JNDI资源预先配置好。开发者可以通过JNDI查找获取数据源,然后通过数据源创建数据库连接,执行SQL查询。这样做的好处是,数据库连接参数可以在服务器端统一...
- **配置文件**:如context.xml,可能包含了JNDI资源的定义,例如在Tomcat服务器中,这些配置会被用来设置数据源。 - **测试类**:用于验证JNDI操作是否正确的测试类,可能使用了JUnit或其他测试框架。 - **README**...
2. **查找JNDI资源**:接着,使用`lookup()`方法通过给定的JNDI名称查找资源,如数据源。例如: ```java Context context = new InitialContext(); DataSource dataSource = (DataSource) context.lookup("java:...
这个插件名为"JNDI Explorer for Eclipse",它极大地简化了在开发过程中对JNDI资源的操作,尤其对于那些需要频繁与JNDI交互的项目来说,它是一个非常实用的工具。 JNDI是一个Java API,它提供了一种标准的方式来...
在描述中提到的"应用服务器JNDI自动配置工具",可能是一个工具或框架,它自动处理JNDI资源的配置,使得开发者无需手动编写大量的XML配置文件或者在代码中硬编码资源信息。这样的工具通常会提供图形化界面或者命令行...
1. **服务器配置**:在Java EE服务器的配置文件(如Tomcat的context.xml或server.xml)中定义JNDI资源。 2. **应用配置**:在Web应用的web.xml文件中,可以通过`<resource-ref>`元素声明对JNDI资源的引用。 3. **...
JNDI配置文档(如`JNDI配置.doc`)可能包含如何在不同应用服务器(如Tomcat、JBoss、WebLogic等)中配置JNDI资源的详细步骤,包括设置应用服务器的配置文件、编写JNDI绑定代码以及处理相关异常等内容。这些配置对于...
2. **应用配置**:在Web应用的`web.xml`中,可以声明对JNDI资源的引用。例如,定义数据源的JNDI名,然后在Servlet或JSP中通过`InitialContext`查找并使用。 3. **JNDI查找**:使用`javax.naming.InitialContext`类...
这意味着开发者可以利用WebLogic的特性,如集群、安全性等,来管理和访问JNDI资源。 5. **测试JNDI**: 文件名为`testJNDI`的压缩包可能包含了一个简单的Java程序,用于测试JNDI查找和绑定。这个程序可能包括初始...
局部JNDI资源只对当前Web应用可见,提供了一种灵活的资源隔离方式。比如,为某个特定应用定义数据源,可在`web.xml`中写入: ```xml <description>DB Connection Pool <res-ref-name>jdbc/MyAppDB <res-type>...
配置JNDI资源可以帮助我们实现应用程序与数据库或其他服务的解耦,提高代码的可移植性和可维护性。 当在Tomcat6中配置JNDI时,错误可能由多种原因引起: 1. **配置文件错误**:最常见的错误是`context.xml`或`...
**步骤1**:在Tomcat的`conf`目录下的`context.xml`文件中添加JNDI资源定义。例如,配置一个名为`sqlconn`的数据源: ```xml auth="Container" type="javax.sql.DataSource" driverClassName=...
- `AuthenticationException`:当用户尝试访问JNDI资源但未通过身份验证时抛出。 - `CommunicationException`:在网络通信出现问题时抛出。 - `InvalidNameException`:当指定的名字格式不正确时抛出。 - `...
本文将详细介绍如何在Comcat应用服务器中配置JNDI资源,帮助开发者更好地理解并掌握这一关键技术。 #### 二、Comcat简介 Comcat虽然看起来像是拼写错误,但从上下文判断这里应该是指Tomcat或类似的Java应用服务器...
2. **打包应用**:确保你的Java应用包含了必要的部署描述符,如`web.xml`或`ejb-jar.xml`,这些文件定义了JNDI资源引用。资源引用通常是一个JNDI名称,应用在运行时将通过这个名字来查找并使用服务。 3. **部署应用...
在非Java EE环境中,或者你希望在代码中显式地查找JNDI资源,可以使用`InitialContext`类的`lookup`方法。这通常需要你提供完整的JNDI上下文路径,例如在Glassfish服务器上: ```java Properties props = new ...
在Web应用服务器中,如Tomcat、JBoss等,可以配置JNDI资源,然后通过JNDI查找获取数据库连接池中的连接。例如,你可以定义一个名为"jdbc/MyDataSource"的JNDI资源,它指向Oracle数据库的连接池。应用程序可以通过...
在配置JNDI数据源时,可能会遇到各种问题,如找不到JNDI资源、连接失败、权限不足等。这些问题往往源于配置文件的错误、驱动不兼容或者类路径设置不当。因此,仔细检查并遵循官方文档是解决问题的关键。 总结,JNDI...