在J2EE 1.3中消除服务定位器实现中的缓存 - 编程入门网
进行访问、提供者为资源使用什么样的名称等等。
J2EE 应用程序服务器(例如 WebSphere Application Server)实现其自身的 JNDI 目录,服务器的应用程序正是使用它来访问所有资源。应用程序服务器需要构造 JDBC、 JMS 和其他资源,使其适用于服务器的应用程序。因为提供者通过 JNDI 提供他们的资源 ,所以应用程序服务器的 JNDI 树可以轻易地包含资源节点。 图 1. 应用程序服务器 JNDI 树 EJB 组件甚至并不知道其中的一些资源是远程的并且是在 EJB 容器之外被管理的。它 通过相同的 JNDI 树以相同的方式访问所有的资源。这是组件重用的很重要的部分:组件 访问资源而不用确切的了解资源是如何被提供的能力。 在J2EE 1.3中消除服务定位器实现中的缓存(2)时间:2011-04-02 IBM Bobby Woolf如何使用 JNDI 使用 JNDI,代码可以访问其组件的 JNDI 上下文并且使用它执行 查看,这是 JNDI 的一项操作,该操作接收一个名称并返回该名称的一个对象的绑定,这很像是 java.util.Map 对象中的 get(Object) 方法。 既然 JNDI 可以被用来将任何类型的对象绑定到一个名称,J2EE 就主要适用 JNDI 来 提供对 资源的访问。通过 JNDI 查找访问资源,组件以 资源名方式传递,然后返回在部 署描述符中由 资源引用元素所描述的资源。资源的大部分类型实际上都是 资源工厂,容 器以此来控制实例的产生、缓冲池的组合以及共享资源连接。资源工厂类型的例子包括: javax.ejb.EJBHome、 javax.ejb.EJBLocalHome、 javax.sql.DataSource 以及 javax.jms.ConnectionFactory。 举例来说,下面的代码片断使用 JNDI 来查找资源名 jdbc/datasource,它返回一个 资源工厂: DataSource 对象。
以此方式,代码可以脱离容器的资源管理而仍然可以轻易的通过资源的名称访问资源 。代码与容器之间只需在名称的使用上达成一致就可以。 资源名映射 资源实际上是有两个互相分离但又在 J2EE 中互有关联的名称: 资源引用名:资源引用的名称,是代码部分用来识别资源之用。 JNDI 名:容器用来识别资源的名称。 有了这种安排,代码和容器甚至在资源所使用的名称上不用达成一致。当代码被部署 时,部署者(J2EE 管理员,在容器中安装应用程序组件的那个人)使用部署工具将每个 资源引用名都映射到与它对应的 JNDI 名称上。 举例来说,代码可能要引用一个叫 jdbc/AccountDB 的数据库。此时,账户数据可能 存储在 Cloudscape® 数据库中,这样容器所引用的就是 jdbc/Cloudscape。部署者 将资源引用名 jdbc/AccountDB 绑定到 JNDI 名 jdbc/Cloudscape: 表 2
然后在实际运作中,当代码访问 AccountDB 时,它将得到 Cloudscape 数据库。 应用程序资源名辖区 在 J2EE 1.2 中,资源名都是全局的,因此当两个组件引用相同资源名时,他们得到 相同的资源引用,这是因为一个资源名映射到一个资源。在 J2EE 1.3 中开始,每个组件 (也就是说,每个 EJB bean 类和每个 Web 应用程序)定义其自身的一套资源名,在这 里每个组件的资源名与容器资源名互相独立。 这个改变对 J2EE 1.3 规范的影响是在其中加上了单独的一段,在 J2EE.5.4.1.2 "在部署描述符中声明资源管理器连接工厂引用。" 部分,其中阐述道: 其它的应用程序组件可以使用相同的资源引用名而不 |
||||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |