当前位置: 代码迷 >> 综合 >> 使用分层实现业务处理之-JNDI
  详细解决方案

使用分层实现业务处理之-JNDI

热度:48   发布时间:2023-12-14 19:15:36.0

使用分层实现业务处理-JNDI

  • JNDI

JNDI

JNDI的全称是Java命名与目录接口(Java Name and Directory Interface),是一个有关应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用,统一的接口。
我们可以把JNDI简单的理解为是一种将对象和名字绑定的技术,即指定一个资源名称,将该名称与某一资源或服务相关联,当需要访问其他组件和资源时,就需要使用JNDI服务进行定位,应用程序可以通过名字获取对应的对象或服务。
使用JNDI可以访问的目录及服务很多,如DNS,文件服务,数据库等。下面就通过完成一个任务来学习如何使用JNDI API访问Tomcat中的JNDI资源。具体要求是,在tomcat中发布一条信息供所有的web应用程序使用。
Tomcat根目录\conf\context.xml文件为全局的上下文配置文件,对所有的web应用有效。所以将要发布的信息配置在此文件中,再通过JNDI来查找信息。
首先,在tomcat中发布一条信息,修改context.xml文件,代码如下:

<Context><Environment name="tjndi" value="hello JNDI" type="java.lang.String"/>
</Context>

元素用于配置命名的值,所配置的值作为环境条目资源,对整个Web应用可见。它包含的属性有name,type,value。
name:环境条目的名称,相当于java:comp/env名称。
type:环境条目的Java类名的全称。
value:通过JNDI context请求时,返回给应用的参数值,该值必须转换成type属性定义的Java类型。
然后编写JSP代码,通过JNDI访问环境条目,具体代码如下。

<%@ page import="javax.naming.*"%>
<%//javax.naming.Context 提供了查找JNDI Resource的接口Context ctx=new InitialContext();//java:comp/env/为前缀String testjndi=(String) ctx.lookup("java:comp/env/tjndi");out.print("test jndi:"+testjndi);
%>

javax.naming包下的Context接口表示命名上下文,它由一组名称到对象的绑定组成。InitialContext是Context接口的实现类。Object lookUp(String name)方法根据名称检索指定对象。为了避免JNDI命名空间中的资源名称互相冲突,并且避免可移植性问题,javaEE应用程序中的所有名称应该以字符串“java:comp/env”作为前缀。在此示例中,前缀后面的“tjndi”则对应context.xml文件中元素的name属性。
运行结果:

test jndi; hello JNDI

通过此任务总结使用JNDI的步骤如下。
(1)配置资源。
(2)通过Context的lookup()方法查找资源。
此时,大家一定会疑惑,使用application应该也能满足上述的需求。但是application对象只能在一个Web应用中使用,而使用JNDI发布的信息是对服务器上所有的Web应用程序都可见的。JNDI不知完成这种简单的需求,它还提供了对其他资源的引用,比如JNDI和数据源实现数据库连接池的访问。

  相关解决方案