JNDI

 1  import  java.util.Hashtable;
 2 
 3  import  javax.naming.Context;
 4  import  javax.naming.InitialContext;
 5 
 6  public   class  TestBinding {
 7 
 8       private  String bindName  =   " ssss " ;
 9 
10       public  TestBinding() {
11          Hashtable env  =   new  Hashtable();
12          env.put(Context.INITIAL_CONTEXT_FACTORY,
13                   " com.sun.jndi.fscontext.RefFSContextFactory " );
14          env.put(javax.naming.Context.PROVIDER_URL,  " file:d:\\ " );
15           try  {
16              Context ctx  =   new  InitialContext(env);
17              ctx.bind(bindName,  " aa.txt " );
18              String ds2  =  (String) ctx.lookup( " ssss " );
19              System.out.println( " --------- "   +  ds2);
20              ctx.close();
21          }  catch  (Exception e) {
22              System.err.println(e.getMessage());
23          }
24      }
25 
26       public   static   void  main(String[] args) {
27          TestBinding test  =   new  TestBinding();
28      }
29 
30  }

是这样的,
1.命名服务是名字的映射吗,,例如一个名字对应一个相应的入口,而目录不也是这样的映射吗》我不懂有什么区别,每次看JNDI书,就把这两个名词相混淆,
2.文件系统和DNS还有LDAP服务器,区别是什么,我为什么只能在文件系统中进行lookup查询命名就好用,一用bind就报错啊,(得导入文件的两个jar包---前提是我lookup好用啊)
例子如上

 

-----------------------------------------

请教使用jndi的文件spi进行文件系统操作的问题。
程序是得到指定目录下一个文件的句柄,重命名文件后重绑定该文件。

fscontext.jar,providerutil.jar和jndi.jar已经正确设置,java.naming.factory.initial设置为com.sun.jndi.fscontext.RefFSContextFactory,java.naming.provider.url设置为本机的file:/C:/J2EEcode目录。程序里的Context初始化,lookup,rename都已经可以正常操作,可是在rebind函数出现了:
javax.naming.OperationNotSupportedException:   Can   only   bind   References   or   Referenceable   objects   错误

源程序主要部分如下:

//java.naming.factory.initial和java.naming.provider.url由
//propertiesFileName指定的文件提供
Properties   props   =   new   Properties();
props.setProperty(   "java.naming.factory.initial ",     "com.sun.jndi.fscontext.RefFSContextFactory "   );
props.setProperty(   "java.naming.provider.url ",   "file:/C:/J2EEcode "   );

Context   context   =   new   InitialContext(   props   );
NamingEnumeration   namesList   =   context.list(   " "   );
if   (   namesList   ==   null   ){
System.out.println(   target   +   "   contains   no   names   "   );
}
else{
while(   namesList.hasMore()   ){
System.out.println(   namesList.next()   );
}
}

java.lang.Object   obj   =   ontext.lookup(   "global.properties "   );
context.rename(   "global.properties ",   "newObj "   );

//这儿会出错,javax.naming.OperationNotSupportedException:   Can
//   only   bind   References   or   Referenceable   objects context.rebind(   "global.properties ",   obj   );

有点想不通,既然obj文件是从context中取得的。那么肯定是应该实现了Referenceable接口的,那么重新rebind回去为什么会出错呢?

转载于:https://www.cnblogs.com/kelin1314/archive/2011/02/27/1966315.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值