Javax.naming.NameNotFoundException

在开始使用JNDI之前,需要正确配置它,这样才能保证需要使用命名服务的客户机能正确的定位命名服务并用它查找资源。在使用EJB服务器的时候服务器一般已经配置好JNDI,而且JNDI在EJB服务器启动的时候也会启动,现在需要设置的是客户机如何查找并连接到组件接口的实现。客户机通过环境属性建立与JNDI环境的连接,从而使用JNDI提供的服务。在不同厂商提供的JNDI服务中有一些通用的环境属性,其中最重要的两个属性是java.naming.factory.initial和java.naming.provider.url,客户机需要设置这两个属性才能定位命名服务。java.naming.factory.initial表示初始语境工厂,通过这个语境工厂创建新的InitialContext引用(命名服务跟级别的引用),该属性值应该是所使用得工厂类的完整限制类名称,比如对于weblogicJNDI工厂,该属性设置为java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory。java.naming.provider.url表示环境值的名称,它告诉SPI在何处可以找到JNDI命名服务,它的格式通常为prorocol://host:port,比如对于weblogic,该属性设置为:java.naming.provider.url=t3://localhost:7001。  
   
  要设置JDNI环境属性,可以通过以下几种方法实现:在InitialContext构造函数中设置,使用系统属性和使用资源文件。  
  方法一在InitialContext构造函数中传入一个hashtable,代码为:  
  Hashtable   env=   new   Hashtable   ();  
  env.put(Context.INITIAL_CONTEXT_FACTORY,   "weblogic.jndi.WLInitialContextFactory");  
  env.put(Context.PROVIDER_URL,   "t3://localhost:7001");  
  Context   ctx=new   InitialContext(env);  
  方法二在启动Java应用程序的时候通过系统属性提供JNDI环境属性值,比如使用如下命令来设置JNDI环境属性:java     -Djava.naming.factory.initial=weblogic.jndi.WLInitialContextFactory   -Djava.naming.provider.url=t3://localhost:7001  
  方法三使用资源文件使得设置于应用程序完全分离,便于维护。服务提供者和JNDI类库可以自动定位并使用这些资源文件,因此这种方法最灵活。我们可以编辑一个jndi.properties文件,内容为(对于weblogic):  
  java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory   java.naming.provider.url=t3://localhost:7001  
  然后保证其路径包含在环境变量中(比如放在编译后的classes文件夹下)以保证能够被正确定位。这样不用再在构造函数中提供环境属性就可以创建InitialContext对象,例如Context   ctx=new   InitialContext()。但是对于一些比较敏感的信息比如用户名密码等,则不易包含在这种资源文件中。这种自己编写的资源文件称为应用程序资源文件,另外还有一种资源文件由JNDI服务提供者提供,成为提供者资源文件,在这种资源文件中放置本身服务的特定属性,对于这类资源文件中设置的某个java.naming.factory属性将覆盖其他已经设置的对应的属性。客户机在连接某个JNDI命名服务时,首先如果所有环境属性都使用InitialContext构造函数传递,这些属性就用来初始化语境,其次JNDI环境会添加系统属性,最后添加被包含的资源文件中的环境属性。  
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值