《第三讲JNDI》PPT课件.ppt_第1页
《第三讲JNDI》PPT课件.ppt_第2页
《第三讲JNDI》PPT课件.ppt_第3页
《第三讲JNDI》PPT课件.ppt_第4页
《第三讲JNDI》PPT课件.ppt_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三讲 JNDI,湖南文理学院计算机学院 xxx,内容回顾,J2EE体系结构 本课程应用环境 开发工具: MyEclipse 数据库服务器:MySQL 5.0 应用服务器:BEA Weblogic Server 9.2,本讲教学,教学目标: 3.1 JNDI简介 3.2 JNDI的体系结构 3.3 命名服务的应用编程 教学重点: JNDI的API;应用编程 教学难点: 创建上下文,3.1 JNDI简介,为什么需要JNDI? 应用程序必须能在不知道外部信息是如何命名和组织在其运行环境中的情况下来存取资源和外部信息,JNDI命名上下文和Java语言的注释提供了这种能力 JNDI和注释(Annotation)是存取外部资源和信息的机制 应用程序在运行环境中查找的资源(如数据源、Servlet、EJB)和外部信息必须在命名服务中注册,否则无法找到 用一个有意义的文本名与对象关联。通过分布式系统的命名和目录服务能够对分布式系统中的资源(文件、分布式对象、服务)进行方便的访问和管理,3.1 JNDI简介,JNDI(Java Naming and Directory Interface) JNDI是Java EE中的核心技术之一,它允许组件定位其他组件和资源,提供了企业级应用所需要的资源和外部信息的注册、存储以及获取组件等功能,许多J2EE组件的使用需要JNDI 的支持 在JMS、JMail、JDBC、EJB等技术中,大量应用这种技术 例如,要定位JDBC资源,EJB调用JNDI的lookup方法,lookup方法传递一个JNDI名称参数,返回相关的对象,3.1.1 访问对象的基本方式,凭借对象名称 (name)与对象体(object) 的绑定(binding),使用者通过上下文(context)来存取欲使用的对象 命名服务系统示例 RMI注册表 远程对象名远程对象 DNS 主机名称IP Address 文件系统 文件名或路径文件句柄,3.1.1 访问对象的基本方式,目录服务 目录服务是命名服务的扩充,也是凭借名称 与对象 的绑定来存取欲使用的对象。但允许对象拥有属性 (attributes)以记录额外的信息。于是,使用者可以通过名称来查看(look up)对象并获得该对象的属性信息,或是利用属性作为搜寻的过滤条件 (search filter) 目录服务是命名服务,命名服务不需要是目录服务,3.1.1 访问对象的基本方式,例如:电话公司的电话服务系统,记录每个单位登记的电话号码。对于单位对象,有地址等属性可利用,对象,属性名,属性值,什么是目录? 目录类似于一个数据库,它通常包含一些基于属性(名-值结构)的描述性信息 由于目录中的信息被读的频率比写的频率高许多,所以目录没有复杂的事务和回滚机制,3.1.1 访问对象的基本方式,3.1.1 访问对象的基本方式,目录与数据库的区别(目录服务的特殊性) 检索功能强大,而增、删、改等数据库更新功能则较弱,更新只是简单的更改操作。因为目录服务器是专门为那些检索频率多于更新频率的数据服务而设计的 对大量的信息查找或信息检索,目录应该快速给出应答 为提高性能和可靠性,并降低应答时间,分布式的目录信息要在广阔的网络范围内进行复制。复制点之间,暂时的不一致是难免的,只要最终能同步即可,3.1.1 访问对象的基本方式,目前使用Directory较著名的应用系统与架构 Novell公司的 NDS(Novell Directory Services) Sun公司的NIS(Network Information Service) LDAP(Lightweight Directory Access Protocol),3.1.2 JNDI基本概念,名称 描述对象的名称字符串 一个名称空间中所有的命名必须遵循相应的规则该名称空间的命名惯例,如DNS的命名惯例 类型 原子名字:不可再分的名字 混合名字(Compound Name): 按照命名约定组成的零个或多个原子名字序列 复合名字(Composite Name): 跨越多个命名系统的名字,由多个部分组成,每个部分处于不同的命名空间,3.1.2 JNDI基本概念,绑定(binding) JNDI命名服务有一组将原子名字与对象关联在一起的绑定 上下文(Context) JNDI提供了一个命名上下文对象,即一组名称到对象绑定,被绑定在一个上下文中的名称是对象的JNDI名称,所有的命名操作相对于一个上下文。其状态是不同原子名字到对象的绑定集合,其操作有解析名字、绑定名字、解绑定名字、列举绑定名字、注销名字、重新命名对象等,3.1.2 JNDI基本概念,命名系统 一个具有相同类型(有相同命名约定)的上下文对象的集合 命名系统的主要功能是从名字映射到对象,对象可以是任何类型 一个目录系统用于表现一个计算机环境中各种信息的特殊类型的对象。一个目录对象和它的属性相关联,属性表现为一个标识符和一个值的集合 名称空间 一个命名/目录系统中名字的集合,3.1.2 JNDI基本概念,目录的属性与子上下文 一个上下文内部可以具有另一个上下文,称为子上下文,与文件系统中的目录非常相象,这种分层结构可以更好地组织信息 子上下文仅在目录服务中有效,而在命名服务中无效,因为命名服务未安排在类似分层树的结构中 对于支持子上下文的命名服务,Context类也提供创建和销毁子上下文的方法,3.1.2 JNDI基本概念,为避免与JNDI名称空间中的其他企业资源的名称冲突,并且避免可移植性问题,J2EE应用程序中的所有名称应该以字符串java:comp/env开始,3. 2 JNDI的体系结构,JNDI包含一组API和一组SPI(Service Provider Interface) Java程序通过JNDI API 存取各种naming和directory 服务,3. 2 JNDI的体系结构,JNDI的思想是提供一个通用的接口。底层的名字服务实现可以是各种类型,JNDI通过SPI实现代码屏蔽了各种名字和目录服务实现的区别,3.2.1 JNDI的包和类,JNDI由若干个独立的包组成 基础包javax.naming 从中获得JNDI核心概念的定义 服务提供程序包javax.naming.spi 特定服务提供程序的实际实现存放在独立的包中 javax.naming.directory javax.naming.event javax.naming.ldap,3.2.1 JNDI的包和类,基础包javax.naming 包含命名服务的类 (classes)和存取接口(interfaces for accessing) Context接口让用户定义对象在名称空间中的相对位置,naming服务以context为接口,提供查看、绑定、对象更名(renaming objects)等功能 InitialContext提供naming或directory服务的一个起始位置。因为在JNDI的世界中没有绝对的root观念,所有的动作都建立在context上;有了起始位置,使用者才能借助它对其context上的对象进行存取 NamingException api则为JNDI定义的一组类,负责捕获 (catch)所有发生在 naming或directory 服务里的异常 (exceptions),3.2.1 JNDI的包和类,javax.naming.directory 包 由 javax.naming扩充而来,提供存取 directory服务的功能建立在naming 服务之上,增加对directory中的对象检索其属性( retrieve attributes)和通过指定属性为条件来搜寻(search)等功能。 其中DirContext api提供对象在directory内context的接口,与 Context api的运作方式类似,但更进一步定义了查询和更新directory中对象属性的方法( methods),3.2.1 JNDI的包和类,javax.naming.spi 让系统开发者为特定的naming或 directory系统来撰写使用JNDI的应用程式,例如在 Plug-ins、Java Object Support及 Multiple Naming Systems(Federation)等方面的应用,3.3 命名服务的应用编程,命名服务的应用编程 类似于数据库编程,需要在用户代码和数据库之间建立连接 使用JNDI 连接对象 连接JDBC资源 连接JMS资源 连接JavaMail资源,3.3.1 连接对象,步骤 引入JNDI类 Context、InitialContext、NamingException import javax.naming.*; 创建初始上下文空间 通过一个属性对象把相应的信息传递给InitialContext构造器 JNDI对象绑定 使用bind方法建立名字和对象间的映射 JNDI对象重新绑定:rebind 删除JNDI对象:unbind 通过上下文查找对象:lookup 捕获异常,3.3.1 连接对象,创建初始上下文空间 创建Context实例 try ctx = new InitialContext(p); ,Context ctx=null; /InitialContext建立JNDI属性 Properties p=new Properties(); p.put(Context.INITIAL_CONTEXT_FACTORY,“weblogic.jndi.WLInitialContextFactory“); p.put(Context.PROVIDER_URL,“t3:/localhost:7001“);,属性对象,上下文工厂对象,连接字符串,3.3.1 连接对象,创建并析构一个子命名空间 在上下文空间的接口中,包含了创建并析构子空间(在file system中相当于子文件夹)的方法。 语句为: Context result=ctx.createSubcontext(“”); ctx.destroySubcontext(“”);,3.3.1 连接对象,绑定对象 javax.naming包中的Binding,此类中有4个方法 Context接口中的bind()和rebind()方法 ctx .bind( String name, Object obj ) ctx .rebind( String name, Object obj ) ctx .unbind( String name ),/ JNDI对象绑定 String test=“JNDI Test example“; ctx.bind(“name“,test);,3.3.1 连接对象,注意:绑定的对象必须是引用对象和可引用的对象。如果是普通类,则不能运行,而抛出如下异常 Lookup failed: javax.naming.OperationNotSupportedException: Can only bind References or Referenceable objects 相应技术 /products/jndi/tutorial/basics/naming/bind.html,/ JNDI对象重新绑定 String str=“welcome to you “; ctx.rebind(“name“,str);,3.3.1 连接对象,查找一个对象 用ctx.lookup( String name )函数 参数为对象的名字 返回当前上下文中参数name对应的绑定对象。返回对象类型由底层命名系统和对象本身关联的数据共同决定。一个命名系统中可能包含多种类型的对象 String s=(String)ctx.lookup(“name“);,3.3.2 连接JDBC资源,(1)创建一个InitalContext对象 (2)使用lookup方法返回一个DataSource对象,调用lookup方法时,需要给出数据源的JNDI名称。JNDI名称必须与在deployment descriptory文件或web应用程序环境定义文件中定义一致。 / 获得WebLogic Server JNDI初始上下文信息 Properties properties = new Properties(); properties.put(Context.INITIAL_CONTEXT_FACTORY, “weblogic.jndi.WLInitialContextFactory“); properties.put(Context.PROVIDER_URL, “t3:/localhost:7001“); ctx = new InitialContext(properties); / 建立数据源对象 ds = (javax.sql.DataSource)ctx.lookup(“mysqlDS“);,3.3.3 连接JMS资源,(1)创建一个InitalContext对象 (2)使用lookup方法返回一个javax.jms.TopicConnection Factory对象或一个javax.jms.queueConnectionFactory对象。 javax.jms.Topic topic=NULL; try InitialContext nctx = new InitalContext(); topic= (ja

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论