JNDI总结

1 篇文章 0 订阅
今天不知那根弦动了下,开始咬文嚼字JNDI。之所以说咬文嚼字,实在是浮于表面没有深入。权当作读书笔记。

JNDI这个东西是用来干嘛的啊?EJB,RMI-IIOP都用它来定位对象:先绑定对象到一个名字,然后再那这个名字把那个绑定的对象取出来。(写到这里,我忽然间知道我为何关注JNDI了:我是这几天一直看RMI,RMI-IIOP, EJB, CORBA, IDL这些东西来着。至于我为何看这些我也记不清了为何了。)

就是这样简单啊。好像超市门前的存储箱啊,先把包保存进去,拿到一个记着箱子号的条形码,买完东西那这个条形码一扫,东西就取出来了。我这里写的很不准确,因为忽略了细节:我拿到的包是我放进去的那个包(返回reference),还是那个包的克隆品(序列化),还是一个看起来像包的什么东西(返回的是本地构造的stub)。[b]这里取到的东西应该是provider相关的[/b]。实际上在RMI-IIOP的场景,返回的是本地的stub的实例。

我今天所要说的是。什么是JNDI?它其实就一个API。有两部分组成,一部分是JNDI API(Java Naming and Directory Interface
Application Programming Interface),一部分是JNDI SPI(Java Naming and Directory Interface
Service Provider Interface)。前者是外观,后者是具体实现。看到provider,我想很多人就明白了十之七八。这就是plugin啊,看来JNDI是支持不同的服务的。

[url='http://docs.oracle.com/javase/7/docs/technotes/guides/jndi/index.html']从这里[/url]可以看到,从jdk1.4之后,JNDI SPI包含了下面四个provider:
The LDAP Service Provider
The COS Naming Service Provider
The RMI Registry Service Provider
The DNS Service Provider

所以我们平时用JNDI的时候,都这么用的。
Hashtable<String,String> props = new Hashtable<String,String>();
props.put("java.naming.factory.initial", "com.sun.jndi.cosnaming.CNCtxFactory");
props.put("java.naming.provider.url", "iiop://localhost:1050");
Context context = new InitialContext(props);
context.lookup("some service");

我们会用一系列的参数来初始化InitialContext。其实这里无疑是一个工厂模式:根据传入的java.naming.factory.initial创建不同的provider。

从一定程度上说,EJB容器也是一个JNDI service provider。只有这样我才可以通过JNDI来定位EJB啊。

总结一下:JNDI是由两部分组成的:应用程序API和provider API。前者是调用接口,后者包装了不同的服务提供者。这里再补充一句,那也得服务程序启动之后,您才能去施展JNDI啊。那服务程序是什么?就是LDAP,COS,RMI,DNS啊。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值