JNDI

J2EE

EJB Enterprise Java Bean

Bean是一个Java类,任何具有某种特性和事件接口约定的Java类都可以使一个bean

J2EE 中包括以下技术:
Enterprise JavaBeans (EJB) 技术
Java Interface Definition Language (IDL)
Java Message Service (JMS) API
Java Naming and Directory Interface (JNDI)
Java Remote Method Invocation (RMI) 和 Object Serialization
Java Servlet API
Java Transaction API (JTA)
Java Transaction Service (JTS)
JavaServer Pages (JSP) 技术
JDBC 数据库访问 API

 

EJB 应用程序是如何使用 JNDI 的呢?JNDI 的主要用途是检索对 EJB 组件的引用。因为 EJB 框架是一个分布式对象框架,所以 EJB 应用程序不应当假定 EJB 组件的位置。JNDI 就是获取对 bean 的起始引用的一种机制。当一个 bean 安装到一个 enterprise bean 服务器上时,一个被称为 EJB 容器的软件组件就负责创建各个名称-对象绑定,使所需的 Java 类文件能使用这个 bean。应用程序使用 JNDI 的查找方法来检索对象引用,如下例所示:
Context initialContext = new InitialContext( );
CartHome cartHome = javax.rmi.PortableRemoteObject.narrow(
initialContext.lookup("applications/shopping_cart"), CartHome.class);
应用程序有责任知道外部名称,应用程序就是通过这个名称才得以引用一个 enterprise bean,并通过 JNDI 来获取对该 bean 的引用的。

 

J2EE   上下文环境变量前缀,一般有如下几种:
      java:/comp/env/jdbc
      java:/comp/env/url
      java:/comp/env/mail
      java:/comp/env/jms 
在部署和运行EJB中,容器将在java:/comp/env/处创建一个JNDI上下文环境,在该环境中,可以查找获得
在ejb-jar.xml中定义的变量,通过在程序中用JNDI的lookup()方法查找java:/comp/env/后面的变量名得到的.这些值是只读的,也只供本地J2EE组件使用,而客户机无法获取这些值.

java:comp/env是组件的JNDI上下文的名字.

(实际上这个上下文也作为一种资源来处理了,资源查找的过程可以是这样:

jndictxt = ctxt.lookup(“java:comp/env”)然后用这个jndictxt来查找资源,

ref = jndictxt.lookup("jdbc/SavingsAccountDB")。)

jdbc/SavingsAccountDB是资源引用的JNDI名(The jdbc/SavingsAccountDB string is the JNDI name for the resource reference,这句话可能意味着资源引用实际上也跟资源一样处理成一种JNDI绑定对象了,但是实际上应该不是这样,因为在部署描述符中它是引用名元素。因为译者也不是高手,所以这里的具体实现细节有待读者自己研究了:)所以JDBC的DataSource对象的JNDI名就存储在java:comp/env/jdbc的上下文子对象中。(组件运行环境的上下文层次需要进一步了解)

原文地址:https://www.cnblogs.com/javahuang/p/2850323.html