`
Ordier
  • 浏览: 61555 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论
阅读更多
jndi api java命名/目录服务接口 jdk中自带的3中实现
1. Lightweight Directory Access Protocol (LDAP)
2. Common Object Request Broker Architecture (CORBA) Common Object Services (COS) name service
3. Java Remote Method Invocation (RMI) Registry

和多数java服务一样,SUN对JNDI也只提供接口,使用JNDI只需要用到JNDI接口而不必关心具体实现:

private static Object jndiLookup() throws Exception {
  InitialContext ctx = new InitialContext();
  return ctx.lookup("java:comp/env/systemStartTime");
}

这样的代码在j2ee环境下能很好的工作,
但是如果是客户端程序,或者main函数的方式就会报错:NoInitialContextException
这是因为在j2ee环境下 当server启动的时候对jndi的env进行了初始化的配置。
其实之所以有NoInitialContextException是因为无法从System.properties中获得必要的JNDI参数,在服务器环境下,服务器启动时就把这些参数放到System.properties中了,于是直接new InitialContext()就搞定了,不要搞env那么麻烦,搞了env你的代码还无法移植,弄不好管理员设置服务器用的不是标准端口还照样抛异常。
但是在单机环境下,可没有JNDI服务在运行,那就手动启动一个JNDI服务。我在JDK 5的rt.jar中一共找到了4种SUN自带的JNDI实现:

LDAP,CORBA,RMI,DNS。

这4种JNDI要正常运行还需要底层的相应服务。一般我们没有LDAP或CORBA服务器,也就无法启动这两种JNDI服务,DNS用于查域名的,以后再研究,唯一可以在main()中启动的就是基于RMI的JNDI服务。

现在我们就在main()中启动基于RMI的JNDI服务并且绑一个Date对象到JNDI上:

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中绑JNDI的限制是,绑定的对象必须是Remote类型,所以就自己扩展一个。

其实JNDI还有两个Context.SECURITY_PRINCIPAL和Context.SECURITY_CREDENTIAL,如果访问JNDI需要用户名和口令,这两个也要提供,不过一般用不上。



分享到:
评论

相关推荐

    JNDI学习资料,有关使用和配置

    Java Naming and Directory Interface (JNDI) 是Java平台中用于访问命名和目录服务的API,它提供了一种标准的方法来查找和绑定各种类型的名字。在IT领域,JNDI主要被用来管理和查找数据源(DataSource),特别是在...

    JNDI学习总结(一)——JNDI数据源的配置.html

    JNDI学习总结,JNDI配置数据源,资料详细,适合初学者

    jndi学习经典

    javaEE学习EJB的jndi,一个小代码,易于理解

    JNDI学习文档.doc

    **Java Naming and Directory Interface (JNDI) 是Java平台中用于访问命名和目录服务的一组API。它提供了一个统一的接口来查找、访问和管理分布式系统中的资源,如数据库连接池、邮件服务器、对象服务等。JNDI的核心...

    JNDI介绍和学习资料

    关于JNDI的介绍和个人总结 还请多多指教 大家来分享学习 共同进步 谢谢

    JNDI学习总结.docx

    java - 访问数据库学习 在Java开发中,使用JDBC操作数据库的步骤 数据源由来、数据源配置

    DBCP 数据库连接池JNDI连接 学习笔记

    这篇“DBCP 数据库连接池JNDI连接 学习笔记”主要探讨了如何结合JNDI(Java Naming and Directory Interface)来使用DBCP进行数据库连接管理。JNDI提供了一种标准的方式来查找和绑定资源,如数据源,在企业级应用中...

    JNDIDemo 以及相关文档

    通过学习这些文档和实践`JNDIDemo`,你可以掌握JNDI的基本用法,理解其在企业级应用中的重要性,以及如何在实际项目中利用JNDI进行资源管理。这将有助于提升你的Java编程技能,特别是对于处理分布式系统和企业级Java...

    JNDI示例整合SSH

    **标题:“JNDI示例整合SSH”** 在IT领域,`JNDI`(Java Naming and Directory Interface)是...为了深入学习和实践,你可以解压并研究这些文件,结合文章链接中提供的详细教程,进一步理解JNDI在SSH框架中的应用。

    JNDI基础教程课件

    jndi入门学习资料,介绍jndi基本原理,安装和使用,基本配置

    JNDI简单应用示例

    通过阅读和学习这个示例,你可以掌握如何在实际项目中利用JNDI来管理和查找资源,提高代码的可维护性和可扩展性。对于那些处理复杂企业级应用,尤其是需要频繁交互各种服务的开发者来说,理解并熟练使用JNDI是非常有...

    JNDI初步学习资料

    JNDI(Java Naming and Directory Interface)是Java平台中用于访问命名和目录服务的API,它为Java应用程序提供了一种标准的方式来查找、管理和组织资源。JNDI与具体的命名或目录服务实现无关,这意味着开发者可以...

    JNDI注入学习1

    **JNDI注入详解** Java Naming and Directory Interface (JNDI) 是Java应用程序用来查找和管理网络资源的接口。它不依赖于特定的目录服务,而是通过服务提供者接口(SPI)来支持多种不同的目录服务,如LDAP、DNS等...

    JNDI.rar_JINI jndi_JNDI相关书籍_jndi

    **在学习JNDI时,你可能会遇到的几个关键知识点:** 1. **Naming Contexts**:命名上下文是JNDI的核心,它代表了一个命名空间,可以包含其他上下文和对象。 2. **Lookup操作**:通过指定的名字在命名上下文中查找...

    JNDI配置原理详解.doc

    通过本文的学习,我们了解了JNDI的基本原理及其在不同环境下的配置方法。特别地,对于非服务器环境,我们探讨了如何通过启动本地RMI服务来模拟JNDI行为。此外,还简要介绍了JNDI的安全性配置选项。掌握这些知识将有...

    JNDI使用

    - **学习曲线**:JNDI API相对复杂,需要花费时间学习。 - **性能**:相比于直接访问服务,通过JNDI进行查找可能稍慢。 通过上述介绍,我们可以看出JNDI在Java应用程序中起着至关重要的作用,尤其是在企业级应用中...

    jndi测试小项目,初学者

    **学习JNDI的关键点**: 1. **理解Naming和Directory的区别**:Naming服务主要是用来管理简单的名字到对象的映射,而Directory服务则可以存储和检索更复杂的对象,包括属性和层次结构。 2. **JNDI API的使用**:熟悉...

    JNDI数据链接池示例

    **JNDI(Java Naming and Directory Interface)**是Java平台中的一个重要组件,它提供了一种标准的方法来查找和访问...TestJNDI文件提供了实践这一概念的实际代码,对学习和掌握JNDI数据链接池有着重要的指导作用。

    JNDI-Injection-Exploit-1.0-SNAPSHOT-all.zip

    Java Naming and Directory Interface (JNDI) 是Java平台中用于访问命名和目录服务的API,它允许程序查找和操作各种...通过学习和理解这个工具包,开发人员和安全专家能够增强他们的系统安全性,防止这类威胁的发生。

Global site tag (gtag.js) - Google Analytics