`
lw4135
  • 浏览: 46952 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

JNDI概述——实例

阅读更多
1. JNDI概述
应用程序必须能在不知道外部信息是如何命名和组织在其运行环境中的情况下来存取资源和外部信息,JNDI命名上下文和Java语言的注释提供了这种能力
JNDI和注释(Annotation)是存取外部资源和信息的机制
应用程序在运行环境中查找的资源(如数据源、Servlet、EJB)和外部信息必须在命名服务中注册,否则无法找到
用一个有意义的文本名与对象关联。通过分布式系统的命名和目录服务能够对分布式系统中的资源(文件、分布式对象、服务)进行方便的访问和管理
JNDI是Java EE中的核心技术之一,它允许组件定位其他组件和资源,提供了企业级应用所需要的资源和外部信息的注册、存储以及获取组件等功能,许多J2EE组件的使用需要JNDI 的支持
在JMS、JMail、JDBC、EJB等技术中,大量应用这种技术
例如,要定位JDBC资源,企业bean调用JNDI的lookup方法,lookup方法传递一个JNDI名称参数,返回相关的对象

JDBC对每个数据库有独立的驱动程序,JNDI的思想是提供一个通用的接口。底层的名字服务实现可以是各种类型,JNDI通过SPI实现代码屏蔽了各种名字和目录服务实现的区别


1.这个是遍历目录下的文件例子:
package liu;

import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.naming.NamingEnumeration;
import javax.naming.NameClassPair;
//例中使用Context.list(),返回NameClassPair的一个枚举类型的集合。每个NameClassPair由对象的名字和它的类名组成

public class List {
	public static void main(String[] args) {
		Hashtable env = new Hashtable(11);
//设置JNDI工厂类,指明Service provider是文件系统.

		env.put(Context.INITIAL_CONTEXT_FACTORY,
				"com.sun.jndi.fscontext.RefFSContextFactory");
//设置JNDI文件路径

		env.put(Context.PROVIDER_URL, "file:/c:/"); // 操作相对程序运行的盘的根目录
		try {
			Context ctx = new InitialContext(env);
//初始化上下文

			NamingEnumeration list = ctx.list("Program Files");
			while (list.hasMore()) {
				NameClassPair ne = (NameClassPair) list.next();
				System.out.println(ne);
			}
			ctx.close();
		} catch (NamingException e) {
			System.err.println("List failed: " + e);
		}
	}
}

2.查找文件并读取内容:
命令行参数作为名字来查找一个对象
使用文件系统的服务提供者,用户向程序提供的名字必须是一个文件名
用户不了解服务提供者的细节
步骤
   1.引入JNDI类 Context、InitialContext、NamingException
   2.创建初始上下文空间
   3.通过上下文查找对象 Object obj=ctx.lookup()
   4.捕获异常

package liu;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NameClassPair;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;

public class TestDB {

	public static void main(String[] args) throws IOException {
		try {
			Hashtable env = new Hashtable();
			// 设置JNDI工厂类,指明Service provider是文件系统.
			env.put(Context.INITIAL_CONTEXT_FACTORY,
					"com.sun.jndi.fscontext.RefFSContextFactory");
			// 设置JNDI文件路径
			env.put(Context.PROVIDER_URL, "file:/c:/");
			// 初始化上下文
			Context ctx = new InitialContext(env);
			// 循环显示在JNDI中的所有资源名与类型
			NamingEnumeration list = ctx.list("/");
			while (list.hasMore()) {
				NameClassPair nc = (NameClassPair) list.next();
				System.out.println(nc);
			}
			// 查找文件
			File file = (File) ctx.lookup("aaa.txt");
			// 读取文件
			BufferedReader bw = new BufferedReader(new FileReader(file));
			String line = bw.readLine();
			while (line != null) {
				System.out.println(line);
				line = bw.readLine();
			}

		} catch (NamingException e) {
			e.printStackTrace();
		}
	}

}


3.创建文件:
package liu;

import java.util.Hashtable;
import java.io.File;
import javax.naming.*;

public class Create {
	public static void main(String[] args) {
		Hashtable env = new Hashtable(11);
		env.put(Context.INITIAL_CONTEXT_FACTORY,
				"com.sun.jndi.fscontext.RefFSContextFactory");
		env.put(Context.PROVIDER_URL, "file:/c:/");
		try {
			Context ctx = new InitialContext(env);
			Context result = ctx.createSubcontext("new1");
			NamingEnumeration list = ctx.list("");
			while (list.hasMore()) {
				NameClassPair ne = (NameClassPair) list.next();
				System.out.println(ne);
			}
			ctx.close();
		} catch (NamingException e) {
			System.err.println("List failed: " + e);
		}
	}
}

4.撤销文件:
package liu;

import java.util.Hashtable;
import java.io.File;
import javax.naming.*;

public class Destroy {
	public static void main(String[] args) {
		Hashtable env = new Hashtable(11);
		env.put(Context.INITIAL_CONTEXT_FACTORY,
				"com.sun.jndi.fscontext.RefFSContextFactory");
		env.put(Context.PROVIDER_URL, "file:/c:/");
		try {
			Context ctx = new InitialContext(env);
			ctx.destroySubcontext("new1");
			ctx.close();
		} catch (NamingException e) {
			System.err.println("List failed: " + e);
		}
	}
}
分享到:
评论

相关推荐

    J2EE全实例教程 doc格式

    **J2EE全实例教程——探索企业级Java开发** 在IT行业中,J2EE(Java 2 Platform, Enterprise Edition)是用于构建企业级分布式应用程序的标准框架。本全实例教程是针对那些希望深入理解和掌握J2EE技术的开发者设计...

    Ioc模式和微容器——j道

    #### Ioc模式概述 Ioc(Inversion of Control,控制反转)是一种软件设计模式,其核心理念在于通过将组件之间的依赖关系进行解耦,从而实现更为灵活、可扩展的系统架构。在传统的程序设计中,对象之间的依赖关系...

    Spring.3.x企业应用开发实战(完整版).part2

    2.1 实例功能概述 2.1.1 比Hello World更适用的实例 2.1.2 实例功能简介 2.2 环境准备 2.2.1 创建库表 2.2.2 建立工程 2.2.3 类包及Spring配置文件规划 2.3 持久层 2.3.1 建立领域对象 2.3.2 UserDao 2.3.3 ...

    Spring3.x企业应用开发实战(完整版) part1

    2.1 实例功能概述 2.1.1 比Hello World更适用的实例 2.1.2 实例功能简介 2.2 环境准备 2.2.1 创建库表 2.2.2 建立工程 2.2.3 类包及Spring配置文件规划 2.3 持久层 2.3.1 建立领域对象 2.3.2 UserDao 2.3.3 ...

    iBATIS_DAO事务管理实现

    与JDBC事务管理相似,也是通过检索JNDI目录来获取DataSource,并允许用户控制UserTransaction实例。 5. **SQLMap**: 基于iBATIS SQLMap框架平台的事务管理。iBATIS DAO事务管理主要起中介作用,将事务处理交给...

    Java RMI 用于远程调用 进行分布式开发

    书中介绍了如何实现这一功能,并解释了动态类下载的作用——即远程客户端可以从远程服务器上下载新版本的类文件,从而实现动态更新。 #### HTTP隧道与分布式垃圾回收 在某些情况下,由于防火墙的限制,直接的套接...

    jboss集群技术介绍

    - **子分区**:为了解决大规模集群的问题,可以在分区内部划分出更小的逻辑单元——子分区,以实现更细粒度的管理和负载均衡。 **2. 智能代理(Smart Proxies)** - 智能代理的作用是将客户端请求转发到正确的后端...

    JSP学生学籍管理系统设计与实现(源代码+论文+开题报告+外文翻译+答辩PPT)

    JavaEE是企业级应用开发的标准,提供了丰富的组件和服务,如Servlet、JDBC、JNDI、EJB等。在这个学籍管理系统中,可能使用了Servlet进行业务逻辑处理,JDBC进行数据库交互,以及其他JavaEE组件来构建服务层和表示层...

    Hibernate_reference

    ### Hibernate——关系型持久化框架的Java典范 #### Hibernate概述 Hibernate是一种开源的对象关系映射(ORM)框架,它为Java应用提供了一种将对象模型与关系数据库之间的转换机制。通过Hibernate,开发人员可以将...

    hiberante 参考手册 最新版 中文版 3.6.8

    - **JNDI绑定的SessionFactory**: 将SessionFactory绑定到JNDI环境中。 - **在JTA环境下使用CurrentSessioncontext管理**: 配合JTA事务管理器使用Hibernate。 #### 四、持久化类(Persistent Classes) - **4.1 ...

    J2EE中文教材

    **J2EE中文教材概述** J2EE,全称为Java 2 Enterprise Edition,是一个由Sun Microsystems(现已被Oracle收购)开发的用于构建企业级分布式应用的开放标准框架。J2EE旨在提供一个可扩展且安全的平台,允许开发人员...

    Hibernate中文参考文档

    - **3.8.2 JNDI 绑定的 SessionFactory**:通过 JNDI 查找 `SessionFactory`。 - **3.8.3 在 JTA 环境下使用 CurrentSessionContext 管理**:配置 JTA 会话管理。 - **3.8.4 JMX 部署**:使用 JMX 部署 Hibernate...

    [应用开发及迁移][客户端编程接口]JDBC指南.pdf

    - **使用JNDI**的情况下,则需要先配置上下文环境,然后通过`InitialContext`获取`DataSource`实例。 - **连接池**: - 使用连接池可以显著提高数据库访问效率。连接池预先创建并维护了一组数据库连接,当应用...

    长春工程学院EJB和J2EE基础课件

    【EJB和J2EE基础课程概述】 EJB(Enterprise JavaBeans)是Java平台企业版(J2EE,现在称为Java EE)中的核心组件之一,主要用于构建可扩展、分布式的后端企业应用。EJB规范定义了服务器端的组件模型,提供了一种...

    openJMS Jar

    2. 创建ConnectionFactory:这是连接到消息代理的入口,可以通过JNDI查找或者直接实例化。 3. 创建Destination:根据需求创建Queue或Topic对象,定义消息的发送和接收目标。 4. 生产者与消费者:创建MessageProducer...

Global site tag (gtag.js) - Google Analytics