j2ee规范——JNDI

看了j2ee的视频,有点意思呀,视频里的老师讲的很深奥呀。如果真把老师讲的学会了,那肯定又能提高一大截。

JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。(360百科)

从上面的定义中可以看出JNDI提供了两种API

命名服务是将名称和对象联系起来。例如我们的手机的通讯录一样,手机通讯录里是姓名对应手机号,可以通过姓名找到手机号。

目录服务是命名服务的自然扩展。它将有关现实世界中的事物(如人、计算机、打印机等等)描述为具有属性的对象,例如人这个对象,有性别、年龄。

优点

JNDI包含了大量的命名和目录服务,直接使用不同种类的服务,这样程序就不用与各种服务产生耦合。

这就类似:我的手机的通讯录里存有提高班所有人的手机号,如果我想给某个人,直接找到他名字就能拨打,而不用再记住手机号码再输入手机号码拨打。这样我不用记手机号码,我和手机号码的耦合度就降低了。

使用

配置Tomcat的Server.xml

<Context path="/JNDIDemo" docBase="D:\workspace\JNDIDemo\WebRoot" debug="0" reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_quality_log." suffix=".txt" timestamp="true"/>
  <Resource
    name="jdbc/test" <!-- JNDI数据池名称 -->
    type="javax.sql.DataSource" <!-- 数据类 -->
    password="karid"     <!-- 密码 -->
    driverClassName="oracle.jdbc.driver.OracleDriver"  <!-- 驱动 -->
    maxIdle="2"               <!-- 最少可用lia -->
    maxWait="5000"        <!-- 最大等待时间 5秒 -->
    username="karid"       <!-- 用户名 -->
    url="jdbc:oracle:thin:@127.0.0.1:1521:karid"
    maxActive="4" <!-- 最大可用连接 --> />       

<ResourceParams name="jdbc/test"> 

<parameter>
  <name>removeAbandoned</name>
  <!-- Abandoned DB connections are removed and recycled -->
  <value>true</value>
</parameter>
<parameter>
  <name>removeAbandonedTimeout</name>
  <!-- Use the removeAbandonedTimeout parameter to set the number of seconds a DB connection has been idle before it is considered abandoned.  -->
  <value>60</value>
</parameter>
<parameter>
  <name>logAbandoned</name>
  <!-- Log a stack trace of the code which abandoned -->
  <value>false</value>
</parameter> 

<parameter>
  <name>factory</name>
  <!--DBCP Basic Datasource Factory -->
  <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter> 

</ResourceParams> 

配置web.xml

<pre name="code" class="html"><description>MySQL Test App</description>
<resource-ref>
     <description>DB Connection</description>
     <res-ref-name>jdbc/test</res-ref-name>
     <res-type>javax.sql.DataSource</res-type>
     <res-auth>Container</res-auth>
</resource-ref> 

使用JNDI定义和引用

public class DataSourceFactory
{
    private static DataSource ds;
    public static DataSource createDataSourde()
    {
      if (ds == null)
      {
         try
         {
             Context initContext = new InitialContext();
             if (initContext == null)
                 System.out.println("无配置环境");
             Context envContext = (Context) initContext.lookup("java:/compenv");
             ds = (DataSource) envContext.lookup("jdbc/test"); //根据名称取得数据源
          }
          catch (NamingException e)
          {
              e.printStackTrace();
          }
       }
       return ds;
    }
}

总结

JNDI包含了大量的命名和目录服务,直接使用不同种类的服务,不用关心服务的提供者是什么。就像配置数据源一样,不用去关心它用的是什么数据库,只管去去引用JNDI即可。

时间: 2024-10-15 19:05:31

j2ee规范——JNDI的相关文章

J2EE规范

J2EE是由SUN提出的用于简化开发企业级应用程序的一系列规范的组合,J2EE基于中间层集成的框架的方式为应用开发提供了一个统一的开发平台.基于容器管理.组件化的模型为企业建立一个高可用性,高可靠性可扩展的应用平台提供支持,降低了开发分布式应用程序的难度,降低了开发成本,而且提供一整套方便与旧的遗留系统相集的强有力支持,并提供了安全性及规范的打包安装的支持.开发人员使用的J2EE规范开发的应用程序将受厂商及客户的支持. J2EE是由一整套服务,应用程序接口及协议构成,提供对开发多层Web程序应用

【J2EE】在项目中理解J2EE规范

J2EE平台由一整套服务(Service),应用程序接口(API)和协议构成,它对开发企业级应用提供了功能支持.13个核心技术分别是JDBC, JNDI, EJB, RMI, JSP, SERVLET, XML, JMS, JAVAIDL/CORBA, JTS, JTA, JAVAMAIL和 JAF. 何为企业级应用? 1.数据量特别大. 2.用户特别多. 3.性能要求高. 4.安全性要求高. 5.生命周期长. 这时候我们就要考虑数据存储和查询的问题,系统访问快慢即性能问题,如何使用事务保证安全

走进Java(二)J2EE规范解释

一.背景 起初,各个公司都开发出了自家的组件,可是用户使用过程中,各家的组件不通用,不兼容.所以提出J2EE协议,它就是基于Java技术的一系列标准. J2EE平台由一整套服务(Services).应用程序接口(APIs)和协议构成,它的功能非常全面,用于数据处理和服务器端应用.它对开发基于Web的多层应用提供了功能支持.使用J2EE技术部署的应用是:"编写一次,随处运行". 客户端(层)的组件包括Applet.Application.Html三种. 应用服务器,就是封装好的组件.协议

j2ee规范——Servlet实例

之前学习j2ee的规范的时候学习过servlet(j2ee规范--Servlet),那是从宏观上了解了servlet,知道他是干什么用的?现在在项目中运用到了servlet,就是为了解决怎么用的问题.用一个实例去总结一下怎样运用. 在myeclipse中新建一个servlet程序,需要三个步骤.1.前台显示代码.2.继承HttpServlet.重写doGet或者doPost.3.在web.xml中注册servlet. 1.前台显示代码 <body> <h1>第一个servlet小例

以EJB谈J2EE规范

接触J2EE的时间不短了,曾经有很长一段时间处于迷糊时期.当时嘴里天天念叨着J2EE,可J2EE究竟是个什么东西,自己却说不出个一二三来.只知道现在自己在使用J2EE,但具体"怎么用啦?"."哪儿用了?",我不清楚.下面我就以EJB为例,简单谈谈具体什么是J2EE.哪里用到了J2EE.我们需要学习J2EE的那些东西. 很多人在学习EJB,不知道大家有什么想过:我们在学习EJB的什么?我们学习的EJB跟J2EE是什么关系?跟JBoss等容器又是什么关系? 我们知道,s

J2EE规范标准

J2EE是一个很大的平台体系,提供了很多服务.程序接口.协议等.这么庞大的体系必须要由一系列的标准进行规范,不然将会一片混乱.通过这些规范好的接口来开发程序将会使程序更加强壮.更加有生命力.总的来说,规范是一种抽象思维的体现,它的好处就是达到了约束所有厂商的效果,抽象出一个统一的规范接口,使我们在编程时使用统一的接口,兼容性得到保证,与底层具体实现达到高度隔离解耦.我们知道,J2EE有十三个规范,每个标准提供不同的服务,应用的场合也不同,这十三个规范并非全部都是标准的,只有标准的规范才会在JDK

J2EE规范总结

概述 J2ee是我们步入java学习的一个開始.它将开启这趟奇幻之旅,Java是一种简单的,跨平台的,面向对象的,分布式的.解释的.健壮的安全的.结构的中立的,可移植的.性能非常优异的多线程的,动态的语言.不不过免费开源,并且兼具了跨平台的长处. 什么是J2EE? J2EE(Java 2 Enterprise Edition)是建立在Java 2平台上的企业级应用的解决方式.J2EE技术的基础便是Java 2平台.不但有J2SE平台的全部功能,同一时候还提供了对EJB.Servlet.JSP.X

J2EE之JNDI

1.什么是JNDI? JNDI( Java Naming and Directory Interface ),是Java平台的一个标准扩展,提供了一组接口.类和关于命名空间的概念.如同其它很多Java技术一样,JDNI是provider-based的技术,暴露了一个 API和一个服务供应接口(SPI).这意味着任何基于名字的技术都能通过JNDI而提供服务,只要JNDI支持这项技术.JNDI目前所支持的技术包括 LDAP.CORBA Common Object Service(COS)名字服务.R

j2ee规范——EJB

1.EJB是什么 商务软件的核心部分是它的业务逻辑.业务逻辑抽象了整个商务过程的流程,并使用计算机语言将他们实现. -- J2EE 对于这个问题的处理方法是将业务逻辑从客户端软件中抽取出来,封装在一个组件中.这个组件运行在一个独立的服务器上,客户端软件通过网络调用组件提供的服务以实现业务逻辑,而客户端软件的功能单纯到只负责发送调用请求和显示处理结果.在J2EE 中,这个运行在一个独立的服务器上,并封装了业务逻辑的组件就是EJB(Enterprise JavaBean)组件. 2.通俗一点对于EJ