JNDI配置原理详解.doc

### JNDI配置原理详解 #### 一、引言 JNDI(Java Naming and Directory Interface)是Java平台的一部分,它允许开发人员访问命名服务,从而可以存储和检索应用程序组件名称和服务之间的映射关系。本文将详细介绍JNDI配置原理,并通过具体的示例帮助读者更好地理解和应用JNDI。 #### 二、JNDI基本概念 JNDI提供了一个通用的API,用于查找和管理分布式环境中各种命名和目录服务。这些服务包括但不限于DNS、LDAP、NIS等。使用JNDI的主要优势在于其与平台无关性——开发人员可以使用相同的代码来访问不同类型的命名服务,而无需了解底层实现细节。 #### 三、JNDI配置问题及解决方案 在开发过程中,尤其是在非服务器环境下的独立应用程序中使用JNDI时,开发者经常会遇到`NoInitialContextException`异常。这是因为初始化上下文时缺少必要的配置信息。通常情况下,服务器环境会在启动时自动设置这些配置,而在单独的应用程序中,则需要手动配置。 ##### 3.1 示例代码解析 以下是一段用于在JNDI中查找特定条目的代码: ```java private static Object jndiLookup() throws Exception { InitialContext ctx = new InitialContext(); return ctx.lookup("java:comp/env/systemStartTime"); } ``` 该代码在服务器环境中运行良好,但在独立应用程序中会抛出`NoInitialContextException`。这是因为`InitialContext`无法从`System.properties`中获取必要的JNDI参数。 为了解决这一问题,可以通过显式设置环境属性来创建`InitialContext`实例: ```java Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); env.put(Context.PROVIDER_URL, "t3://localhost:7001"); InitialContext ctx = new InitialContext(env); ``` 然而,这种方法的问题在于它依赖于特定的应用服务器配置,降低了代码的可移植性。因此,在不同的应用服务器之间切换时可能需要修改这部分代码。 ##### 3.2 使用RMI实现JNDI服务 对于非服务器环境,可以通过启动一个本地的RMI(远程方法调用)服务来实现JNDI功能。以下是创建RMI注册表并绑定对象到JNDI上的示例代码: ```java LocateRegistry.createRegistry(1099); System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory"); System.setProperty(Context.PROVIDER_URL, "rmi://localhost:1099"); InitialContext ctx = new InitialContext(); class RemoteDate extends Date implements Remote {}; ctx.bind("java:comp/env/systemStartTime", new RemoteDate()); ctx.close(); ``` 这段代码首先创建了一个RMI注册表,并设置了`InitialContext`所需的环境变量。然后,定义了一个实现了`Remote`接口的`RemoteDate`类,并将其绑定到了JNDI中。之后可以通过如下方式查询该对象: ```java InitialContext ctx = new InitialContext(); Date startTime = (Date) ctx.lookup("java:comp/env/systemStartTime"); ``` #### 四、安全性考虑 在某些情况下,访问JNDI服务可能需要认证。此时,除了初始化上下文工厂和提供URL之外,还需要设置用户名和密码。可以通过以下代码设置安全属性: ```java env.put(Context.SECURITY_PRINCIPAL, "username"); env.put(Context.SECURITY_CREDENTIALS, "password"); ``` 需要注意的是,在大多数应用场景下并不需要进行这样的安全配置。 #### 五、总结 通过本文的学习,我们了解了JNDI的基本原理及其在不同环境下的配置方法。特别地,对于非服务器环境,我们探讨了如何通过启动本地RMI服务来模拟JNDI行为。此外,还简要介绍了JNDI的安全性配置选项。掌握这些知识将有助于开发者更加灵活地使用JNDI,提高代码的可移植性和健壮性。





























- tulwa1234562013-04-25对于初学者有一定帮助。

- 粉丝: 1
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 电气自动化在工业机械控制中的应用探讨1.docx
- 现代网络信息安全在电力系统的防护应用.docx
- 网络爬虫的设计与实现.doc
- 设备管理的大数据分析和预测模型应用技术.pptx
- 第十章-眺望新的审美星空网络文学的省思与前瞻的论文-社会文化论文.docx
- 网络会计的利弊及发展策略谈.docx
- 单片机实现开关电源设计方案.doc
- 全国数控技能大赛计算机程序设计员数字化设计与制造.doc
- 上半年数据库系统工程师上午真题及标准答案.docx
- 信息化背景下初中数学云课堂教学策略.docx
- 三峡船闸项目管理实践.docx
- 大学生网络安全现状分析及政策建议.docx
- 项目管理的七原则.docx
- 大数据对电视新闻采编的影响及发展思路.docx
- FIR数字滤波器设计方案与软件实现.doc
- VC1015数据挖掘中关联规则算法的应用分析研究230539.doc


