JNDI File System Service Provider

JNDI(Java Naming and Directory Interface)现在使用的越来越频繁,在J2EE平台上,更是一刻也离开不了。JNDI提供访问名称和目录服务的统一API接口,可以通过JNDI来获取共享的组件和资源,JNDI将名称与位置、服务、信息和资源关联起来。JNDI现在的最新版本已经发展到了1.2。

在JNDI中一个很重要的部分就是 JNDI Service Provider Interface (SPI) ,见下图:

spi

Service Providers就是JNDI能提供的服务类型,访问http://java.sun.com/products/jndi/serviceproviders.html,就可以了解JNDI Service Providers的详细情况。

在这些Service Providers中,我要在下面提到是其中一种:File System Service Provider。感觉FS这种类型很少用到,因为JNDI一般要么与Appliation Server,要么与LDAP结合来用。但是使用FS也有好处,那就是你可以单独使用JNDI,不需要其它东西的配合。

如果使用FS则必须创建JNDI的一个.bindings文件,在该文件中绑定了各种组件、服务等信息。

使用FS,相当简单。

1、下载fscontext.jar和providerutil.jar两个库文件,当然,jndi.jar肯定也是需要的。

2、要使用JNDI,常见的用法:

Hashtable env = new Hashtable(11);
env.put(Context.INITIAL_CONTEXT_FACTORY,
        "com.sun.jndi.fscontext.RefFSContextFactory"); //part1
env.put(Context.PROVIDER_URL,
        "file:/E:/$TEMP$/JNDI"); //part2
Context initCtx = new InitialContext(env);

因为JNDI提供了统一的接口,访问方式是统一的。只要在part1处指定INITIAL_CONTEXT_FACTORY为com.sun.jndi.fscontext.RefFSContextFactory;在part2处指定PROVIDER_URL为JNDI binding文件的路径,例如:file:/E:/$TEMP$/JNDI,此时,该目录中必须存在一个.bindings文件。

3、.bindings文件内容还算简单,有点类似于值-对的properties文件。看下面一个简单的例子,这时我在调用MQseries for java时,使用JMSAdmin创建的一个.bindings文件。
EXAMPLEQL/RefAddr/5/Type=CCS
EXAMPLEQL/RefAddr/8/Content=default
EXAMPLEQL/RefAddr/6/Content=0
EXAMPLEQL/RefAddr/6/Type=TC
EXAMPLEQL/RefAddr/4/Content=-2
EXAMPLEQL/RefAddr/0/Type=VER
EXAMPLEQL/RefAddr/1/Encoding=String
EXAMPLEQL/ClassName=com.ibm.mq.jms.MQQueue
EXAMPLEQL/RefAddr/2/Content=-2
EXAMPLEQL/RefAddr/7/Type=ENC
EXAMPLEQL/RefAddr/3/Encoding=String
EXAMPLEQL/RefAddr/0/Content=1
EXAMPLEQL/RefAddr/5/Encoding=String
EXAMPLEQL/RefAddr/1/Type=DESC
EXAMPLEQL/RefAddr/7/Encoding=String
EXAMPLEQL/RefAddr/9/Encoding=String
EXAMPLEQL/RefAddr/8/Type=QU
EXAMPLEQL/RefAddr/2/Type=EXP
EXAMPLEQL/RefAddr/9/Content=QM_zhangdx
EXAMPLEQL/RefAddr/7/Content=273
EXAMPLEQL/RefAddr/9/Type=QMGR
EXAMPLEQL/RefAddr/5/Content=1381
EXAMPLEQL/FactoryName=com.ibm.mq.jms.MQQueueFactory
EXAMPLEQL/RefAddr/3/Type=PRI
EXAMPLEQL/RefAddr/0/Encoding=String
EXAMPLEQL/RefAddr/3/Content=-2
EXAMPLEQL/RefAddr/2/Encoding=String
EXAMPLEQL/RefAddr/1/Content=Local queue
EXAMPLEQL/RefAddr/4/Encoding=String
EXAMPLEQL/RefAddr/4/Type=PER
EXAMPLEQL/RefAddr/6/Encoding=String
EXAMPLEQL/RefAddr/8/Encoding=String

你可以通过Context的bind、rebind和unbind等方法来修改.bindings文件的内容,可以参考下面这个JNDI教程。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值