JNDI是如何实现

本文探讨了JNDI的基本概念及其在不同服务器上的实现机制,特别聚焦于通过远程方法调用及序列化技术在Jboss与WebLogic中的应用。

JNDI是J2EE中最基础的部分,Jboss与Jfox的jndi的实现都是通过 Socket 编程 ,使用 serializable 和 MarshalledObject来实现服务的Serilizable。

 

  最简单的一段代码:Object obj = context.lookup("testConnedtionFactory"); 
  该怎么理解这段代码,我说出我的想法: 
1context是一个接口他的真正实现是通过远程方法调用 
2这个obj对象是通过流,读取远程目录服务上序列化过来的对象 
说的在俗点就是远程方法加序列化,这就是我的观点,我这么认为是因为看过了weblogic.jar才感受出来的,我们都知道不同的服务器又有不同的jndi服务实现方式,具体的我没有研究,我只是粗略的理解了一下,只是想破处自己的迷惑而已,但是这不足以充分的解释jndi的实现机制

 

下面是WebLogic的JNDI实现的部分代码,我们可以看到,它确实是使用了序列化

 

 

### JNDI 是什么? JNDIJava Naming and Directory Interface,Java 命名与目录接口)是 Java 平台的一项关键 API,它为应用程序提供了一种统一的方式来访问和操作各种命名和目录服务[^2]。通过 JNDI,开发人员可以在 Java 应用中以一致的方式查找和访问资源,例如数据库连接、EJB 组件等,而无需关心这些资源的具体位置或实现细节。这大大增强了代码的可移植性和可维护性。 JNDI 的核心概念包括: - **命名空间**:是一个对象名字的集合,每个名字唯一标识一个对象,其结构类似于文件系统的目录结构,具有层次关系。 - **上下文**:是 JNDI 操作的核心接口,代表命名空间中的一个节点,可以通过它进行查找、绑定、创建和删除对象。 - **对象绑定**:指的是将对象与某个名字关联并存储在命名或目录服务中,以便后续通过该名字查找该对象。 JNDI 的工作原理可以概括为:应用程序首先创建一个初始上下文对象,作为访问命名和目录服务的入口;然后使用该上下文的方法(如 `lookup()`),通过指定的名字查找对象。JNDI 会根据配置和提供者的实现,在相应的命名或目录服务中查找对象,并将结果返回给应用程序[^2]。 JNDI 的应用场景非常广泛,主要包括: - **资源管理**:在 Java EE 应用中,JNDI 可用于管理数据库连接池、数据源等资源,使得应用可以方便地获取这些资源。 - **EJB 查找**:JNDI 被用来查找和访问 EJB(Enterprise JavaBeans)组件。EJB 容器会将 EJB 组件绑定到 JNDI 命名空间中,应用程序可以通过 JNDI 查找来调用 EJB 的方法。 - **配置管理**:JNDI 还可以用于存储和获取应用程序的配置信息,如数据库连接字符串、服务器地址等,从而简化应用的配置和部署过程。 此外,JNDI 与 LDAP( Lightweight Directory Access Protocol)有密切关系。LDAP 是一种常用的目录访问协议,而 JNDI 可以作为 Java 访问 LDAP 目录的接口,便于操作 LDAP 目录中的数据。与其他命名服务(如 CORBA 的命名服务)相比,JNDI 更专注于 Java 环境,与 Java 应用集成更加紧密,使用也更为方便[^2]。 ### 示例代码:使用 JNDI 查找数据源 以下是一个简单的 JNDI 使用示例,演示如何通过 JNDI 查找数据源(DataSource)并获取数据库连接: ```java import javax.naming.Context; import javax.naming.InitialContext; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; public class JndiExample { public static void main(String[] args) { try { // 创建初始上下文 Context initContext = new InitialContext(); // 查找环境上下文 Context envContext = (Context) initContext.lookup("java:/comp/env"); // 查找数据源 DataSource ds = (DataSource) envContext.lookup("jdbc/MyDB"); // 获取数据库连接 Connection conn = ds.getConnection(); System.out.println("成功获取数据库连接!"); conn.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 上述代码展示了 JNDIJava EE 环境中查找数据源的基本流程,这种机制使得应用程序与底层资源的具体实现解耦,提升了灵活性和可维护性。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值