当前位置: 首页 > news >正文

J2EE之JNDI

Java命名和目录服务接口(JNDI,Java Naming and Directory Interface)是J2EE的核心构成之一,它是命名服务或目录服务抽象接口的集合提供了企业级应用所需要的系统注册、存储以及获取组件等功能。Java平台与商业信息之间,JNDI提供了统一、无缝的标准化连接。通过使用JNDI,程序员可以在企业多命名与目录服务之间传送Java应用程序

命名服务是服务器中最基本的服务之一,JAVA最常使用的命名服务是RMI。命名服务将名称(names)与对象(objects)绑定(binding)在一起,使用者可以通过描述名称的字符串,来存取欲操作的对象,也就是说对名称的引用可以返回一个特定的对象,获得对象后,就可以对对象进行操作。它的作用类似于:DNSDomain Name System)将主机名称对应到IP地址,以方便使用者记忆。

目录服务与命名服务有着同样的要求和结构,可视为对命名服务的扩充,让对象拥有属性(attributes)以记录额外的信息。

JNDI架构:JNDI包含一组API和一组SPI(Service Provider Interface)JAVA程序透过JNDI API存取各种namingdirectory服务;JNDI SPI则使得各种namingdirectory服务透明化,允许JAVA程序透过JNDI API来存取这些服务。

JNDI类和接口:

JNDI由三个包组成:javax.naming,javax.naming.directory,javax.naming.spi

Javax.naming包括命名服务的类别(classes)和存取接口(interfaces for accessing)。其中Context api让使用者可以定义对象在名称空间(namespaces)中的相对位置。命名服务便以context为接口,提供查看、绑定、对象重命名(renaming objects)等功能。InitialContext api提供namingdirectory服务的一个起始位置。因为在JNDI的世界中没有绝对的root观念,所有的动作都建立在context上。有了起始位置,使用者才能通过它对其context上的对象进行存取。NamingException api则为JNDI定义了一组类别,负责侦测(catch)所有发生在命名服务或目录服务里的例外状况(exceptions)

Javax.naming.directory:这个包是由javax.naming扩充而来的,建立在命名服务上,提供存取目录服务的功能,增加对directory中对象检索其属性和通过制定属性为条件来搜索(search)等功能。DirContext api提供对象在目录内context的接口,与Context api的运作方式类似,但更进一步定义了查询和更新directory对象属性的方法。

Javax.naming.spi让系统开发者为特定的命名服务或目录服务系统来撰写使用JNDI的应用程序,例如在Plugins,Java Object Support以及Multiple Naming Systems(Federation)等方面的应用。

 

如何使用JNDI?

(1)连接JDBC资源

连接一个JDBC资源的步骤如下:

1)  创建一个InitialContext对象

2)  使用lookup方法返回一个DataSource对象,调用lookup方法时,需要给出数据源的JNDI名称“jdbc/xxx”。JNDI名称必须与在deploymeng descriptory文件或WEB应用程序环境定义文件中定义一致。下面是一个连接JNDI名称为“jdbc/db 1 JDBC资源的实例:

javax.sql.DataSource ds=NULL;

try{

    InitialContext ctx=new InitialContext() ;

    ds=(javax.sql.DataSource)ctx.lookup(“jdbc/db 1” );

}catch(namingException ex){}

(2)连接JMS资源

连接一个JMS资源的步骤如下:

1)              创建一个InitialContext对象

2)              使用lookup方法返回一个javax.jms.TopicConnectionFactory对象或一个javax.jms.queueConnectinFactory对象,调用lookup方法时,需要给出数据源的JNDI名称“jms/xxx”,JNDI名称必须与在deployment descriptory文件或WEB应用程序环境定义文件中定义一致。下面是一个连接JNDI名称为“jms/Topic”的JMS资源的实例:

javax.jms.Topic topic=NULL;

try{

    InitialContext ctx=new InitialContext();

    Topic=(javax.jms.Topic)ctx.lookup(“jms/Topic”);

}catch(namingException ex){}

(3)连接JavaMail资源

连接一个JavaMail资源的步骤如下:

1)  创建一个InitialContext对象

2)  使用lookup方法返回一个javax.mail.Session对象,调用lookup方法时,需要给出数据源的JNDI名称“mail/xxx”;JNDI名称必须与在deploymeng descriptory文件或WEB应用程序环境定义文件中定义一致。下面是一个连接JDNI名称为“mail/MailSession”的JavaMail资源的实例:

javax.mail.Session session=NULL;

try{

InitialContext ctx=new InitialContext() ;

Session=(javax.mail.Session)ctx.lookup(mail/MailSession ) ;

}catch(namingException ex){}

 

其它服务器资源的连接方式类似,URL资源的JNDI名称为“URL/XXX”,连接接口类的名称为java.net.URL;Connector资源的JNDI名称为 ejs/xxx,连接接口类的名称为javax.resource.ccj;EJB/CosNaming资源的JNDI名称为”ejb/xxx”,连接接口类的名称为宿主类名。

 

相关文章:

  • redis 设置密码
  • J2EE之JBOSS配置数据库连接池
  • xdotool xdotool模拟击键和鼠标移动--CutyCapt是一个截图工具,xvfb-run
  • J2EE之XML
  • IE8提示console未定义
  • 金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-(一千零一拾一元整)输出。
  • oracle11g中SQL优化(SQL TUNING)新特性之Adaptive Cursor Sharing (ACS)
  • 浅析JAVA内部类
  • 将字符串按照单词完全反转---公司面试题
  • UI教程
  • 我想要的是什么,我真的清楚吗?
  • Java数据类型(2)------自动封装拆箱
  • Java实现排序算法(一)
  • JMS 之 Active MQ 的spring整合
  • Java实现排序算法(二)
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 2017前端实习生面试总结
  • java8 Stream Pipelines 浅析
  • javascript 哈希表
  • JavaScript新鲜事·第5期
  • leetcode-27. Remove Element
  • Linux链接文件
  • Magento 1.x 中文订单打印乱码
  • oldjun 检测网站的经验
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Sublime Text 2/3 绑定Eclipse快捷键
  • use Google search engine
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 记录一下第一次使用npm
  • 简单实现一个textarea自适应高度
  • 精彩代码 vue.js
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 前端存储 - localStorage
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 在Unity中实现一个简单的消息管理器
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # 数论-逆元
  • #NOIP 2014#Day.2 T3 解方程
  • (3)llvm ir转换过程
  • (Python) SOAP Web Service (HTTP POST)
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (九)信息融合方式简介
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)appium-desktop定位元素原理
  • (转载)虚函数剖析
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .NET 5种线程安全集合
  • .Net Web项目创建比较不错的参考文章