开发者社区> codyl> 正文

JavaEE规范学习(一)--- JNDI

简介: JNDI(JavaNaming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服务供应接口(SPI)的实现,由管理者将JNDI API映射为特定的命名服务和目录
+关注继续查看

 概述

 

   JNDI(JavaNaming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服务供应接口(SPI)的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。目录服务是命名服务的一种自然扩展。两者之间的关键差别是目录服务中对象不但可以有名称还可以有属性(例如,用户有email地址),而命名服务中对象没有属性。

 

   集群JNDI实现了高可靠性JNDI,通过服务器的集群,保证了JNDI的负载平衡和错误恢复。在全局共享的方式下,集群中的一个应用服务器保证本地JNDI树的独立性,并拥有全局的JNDI树。每个应用服务器在把部署的服务对象绑定到自己本地的JNDI树的同时,还绑定到一个共享的全局JNDI树,实现全局JNDI和自身JNDI的联系。

 

   JNDI(JavaNaming and Directory Interface)是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC都是构建在抽象层上。现在JNDI已经成为J2EE的标准之一,所有的J2EE容器都必须提供一个JNDI的服务。

 

   JNDI可访问的现有的目录及服务有:

 

   DNS、XNam 、Novell目录服务、LDAP(Lightweight Directory Access Protocol轻型目录访问协议)、 CORBA对象服务、文件系统、Windows XP/2000/NT/Me/9x的注册表、RMI、DSML v1&v2、NIS。

 

   何时使用JNDI

 

   JNDI是一种查找服务,用于查找:


   Web应用环境变量

   EJBs和他们的环境变量

   通过DataSources的数据库连接池

   JMS目标和连接工厂

 

   备注:不要讲JNDI当做数据库使用,因为JDNI对象存储在内存中,访问JDNI对象与网络性能有关(网络好的时候查找性能高)。

 

   JNDI必备知识

 

   JNDI树


   JNDI环境属性

 

   在EJB中使用properties文件使用JNDI

 

   jndi.properties文件内容

[plain] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory  
  2. java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces  
  3. java.naming.provider.url=localhost  

   备注:jndi.properties文件为所有的InitialContexts设置默认的属性,jndi.properties文件的搜索次序

·CLASSPATH

·$JAVA_HOME/lib

 

 

   从JNDI查找


   ·Lookup()从JNDI树获取对象

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. //实例化一个InitialContext对象  
  2. InitialContext ctx = new InitialContext();   
  3. //在JNDI树上查找“UserManagerBean对象  
  4. UserManager userManager =(UserManager)ctx.lookup("UserManagerBean/remote");  
  5. User user = new User();  
  6. user.setUserName("cody");  
  7. user.setPossword("0909");  
  8. //使用查找到对象的方法  
  9. userManager.addUser(user);  
  10. //连接完成之后关闭访问资源  
  11. ctx.close();  


   谈谈远程绑定对象

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

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

 

   EJB是如何绑定远程访问对象的?

 

   EJB通过@Remote注解将对象绑定到JNDI树上

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. @Stateless  
  2. @Remote(UserManager.class)  
  3. public classUserManagerBean implements UserManager {  
  4.    
  5.    @Override  
  6.    public void addUser(User user) {  
  7.        
  8.       System.out.println("User[userName="+user.getUserName()+"]已经被成功保存");  
  9.       user.setId(10);  
  10.    }  
  11.    
  12. }  


 

   JNDI可能出现的异常

 

   ·AuthenticationException

没有提供认证信息,或者提供的认证信息有误

   ·CommunicationException

通信异常

   ·InvalidNameException

非法命名之类的异常

   ·NameNotFoundException

没有找到相应名称的资源

   ·NoInitialContextException

没有初始化InitialContext对象

 

   总结

 

   J2EE规范要求所有 J2EE 容器都要提供 JNDI 规范的实现。JNDI 在 J2EE 中的角色就是“交换机” —— J2EE 组件在运行时间接地查找其他组件、资源或服务的通用机制。在多数情况下,提供 JNDI 供应者的容器可以充当有限的数据存储,这样管理员就可以设置应用程序的执行属性,并让其他应用程序引用这些属性(Java 管理扩展(Java ManagementExtensions,JMX)也可以用作这个目的)。JNDI 在 J2EE 应用程序中的主要角色就是提供间接层,这样组件就可以发现所需要的资源,而不用了解这些间接性。

 

   在 J2EE 中,JNDI 是把 J2EE 应用程序合在一起的粘合剂,JNDI 提供的间接寻址允许跨企业交付可伸缩的、功能强大且很灵活的应用程序。这是 J2EE 的承诺,而且经过一些计划和预先考虑,这个承诺是完全可以实现的。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
JDBC之代码规范化|学习笔记
快速学习JDBC之代码规范化
45 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
9106 0
【STM32 .Net MF开发板学习-04】TinyGUI位图显示
上一篇博文《TinyGUI绘图示例》介绍了TinyGUI库的绘图函数,接下来就要介绍位图显示了,由于Cortex-M3开发板的RAM比较小,比如EM-STM3210E仅128K,所以显示位图是个比较棘手的事,如320*240 16位的位图大小就为150K,由于官方的WPF以一个BMP位图为本底进行绘图,所以RAM内存需求至少大于150K。
774 0
Linux 学习规划
入门类 一直认为,在一个系统上学习开发之前,首先需要熟悉这个系统的使用。鉴于天朝的国情,绝大部分人第一个接触的操作系统就是Windows,因此对于这绝大部分人来说,如果要学习Linux开发,学会使用这个系统都是必不可少的一个环节。
1245 0
Java 类引入 学习记录规整
之前觉得声明一个类,再把另一个包内的声明数值用第一个类打印出来就可以了(加入引入包类) 结果发现是不对的 看了看demo  得出正确结果    ImportTest 被运行 引入下面的Import类 package com.
793 0
CV:基于深度学习实现目标检测之GUI界面产品设计并实现图片识别、视频识别、摄像头识别(准确度非常高)
CV:基于深度学习实现目标检测之GUI界面产品设计并实现图片识别、视频识别、摄像头识别(准确度非常高)
71 0
【STM32 .Net MF开发板学习-03】TinyGUI绘图示例
  【低价开发板】http://item.taobao.com/item.htm?id=7117999726    源码下载:http://www.
535 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
19746 0
机器学习43条军规:解密谷歌机器学习工程最佳实践(上)
本文译者张相於,首发于微信公号ResysChina(resyschina),「AI早餐汇」经授权转载。以下为注解和编译的内容: 本文是对<Rules of Machine Learning: Best Practices for ML Engineering>一文的翻译+解读。
1982 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
18010 0
+关注
codyl
make it possible
86
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载