JNDI基础

来源:互联网 发布:vscode 开发go 编辑:程序博客网 时间:2024/05/22 05:02

1.简介:

1>JNDI(Java Naming and Directory Interface)Java命名和目录接口,J2EE的核心技术,把命名和目录服务把标识和资源关联起来在内存形成一颗JNDI树(如下图所示)

(其中C代表Context 或者SubContext,O代表Object,其主要作用就是将Object绑定到不同的Context上)

2>产生原因:随着分布式应用的发展,远程访问对象成为常用的方法,通过Socket编程等手段可以实现远程通信,但仍有一定的局限性,JNDI技术用于查找远程或本地对象

3>架构和实现:

.

JNDI的架构与JDBC架构类似,JNDI提供了一组标准命名系统的API.这些API构建在SPI基础上,这个API提供了如下五个包:

JNDI API提供了访问不同JNDI服务的一个标准的统一实现。-------如上图所示的第一层

JNDI服务的具体实现由不同的ServiceProvicer来完成。------如上图所示的最下层

常用的SPI主要有以下几种:

LDAP(LightWeight Directory Access Protocal)轻量级目录访问协议

CORBA COS(Common  Object Request Broker  Archieture Common  Object Service)公共对象代理体系结构 公共对象服务

RMI(JAVA Romote Method Invocation)远程方法调用

DNS(Domain Name System)域名系统

FSSP(File System Service Provider)文件系统服务提供者

其他服务提供者

       服务管理层----中间层,其功能能JNDI SPI来完成

4>JNDI是一种查找服务,用于查找以下内容

a.WEB应用环境变量

b.EJB和它的环境变量

c.通过DataSource的数据库连接池

d.JMS目标和连接工厂

e.其他服务

5>JNDI树:InitialContext是JNDI树所有搜索的起点

6>创建InitialContext的三种方式
a.从服务器端对象连接到JNDI

Context context=new InitialContext();

b.从任何一个地方连接到JNDI(WebLogic)

创建environment对象

webLogic.jndi.Environment environment=new webLogic.jndi.Environment();

填写environment信息

environment.setProviderurl("t3:127.0.0.1:7001");//webLogic的Server地址

environment.setSecurityPricipal("system"); //安全信息

environment.setSecurityCredentials("password");

使用environment对象创建initialContext

Context context=environment.getInitialContext();

Context subContext=context.createSubContext("createSubContext"); //创建SubContext,

subContext.rebind("rebindObject",object); //在subContext绑定object对象

subContext.close();  //访问结束时经常关闭资源

context.close();

c.基于HashTable连接到JNDI

Hashtable<String, String> env=new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "");
env.put(Context.PROVIDER_URL, "");
env.put(Context.SECURITY_PRINCIPAL, "");
env.put(Context.SECURITY_CREDENTIALS, "");
Context context=new InitialContext(env);

d.使用Properties连接到JNDI:Properties env=new Properties();
env.setProperty("java.naming.factory.initial", "");
env.setProperty("java.naming.provider.url", "");
env.setProperty("java.naming.security.principal", "");
env.setProperty("java.naming.security.credentials", "");
Context context=new InitialContext(env);
6>JNDI环境属性:

7>为JNDI设置默认属性:jndi.properties

a.jndi.properties的搜索顺序:

首先是CLASSPATH

其次是$JAVA_HOME/lib

b.jndi.properties的默认示例

使用这些默认值

Context context=new InitialContext();

8>JNDI中查找对象:

a.LookUp()---从JNDI树中查找对象

b.通过lookUp()返回对象必须映射到它们合适的类型

9>远程绑定对象:

绑定到远程命名服务的对象必须是序列化的对象

访问命名服务时,对象采用的是复制机制

10>目录(Directory) 可看作是命名(Naming)的一个扩充,一个目录不仅像命名一样,还提供了对属性的操作

原创粉丝点击