`
zengbo0710
  • 浏览: 414974 次
社区版块
存档分类
最新评论
阅读更多
JNDI是J2EE中很重要的一个技术标准接口,但我们在平时的使用上却没有太注意,我们在编程时使用到它的比较多的地方 是在查找容器提供DataSource和EJB的home接口的查找上,在这些地方都要用到服务器提供的容器,如jboss,当然在数据源这块我们可以不 用容器提供的数据源,而用一些开源项目,如DBCP,即可以用代码直接new出,也可以用Spring,Hibernate等框架的配置文件来设定。

       JNDI与JDBC很相似,它在三层提供了一些API给我们使用,但需要有具体的SPI,即实现者,一般J2EE服务器都有实现,但我们直接使用的话虽然很方便但是必须编写J2EE程序才能使用,这不适合于普通的Java应用程序,例如下面的代码

  InitialContext ctx = new InitialContext();
  return ctx.lookup("java:.......");

在服务器环境下的J2EE程序中没有问题,但在普通的应用程序中就会抛出NoInitialContextException,原因很简单因为你没有JNDI的SPI。在应用程序中可以有两种方式来使用JNDI,当然在这其中都需要具体SPI的jar包。

第一种是在创建InitialContext的时候还要传一个Hashtable或者Properties,如下以用weblogic的SPI为例

 

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);

如果是在jboss下用代码来调用,则factory要用jboss的了。

另 一种方式是对System对象setProperty一些JNDI参数,实际上我们用服务器提供的JNDI也是这样,在服务器环境下,服务器启动时就把这 些参数放到System.properties中了,于是直接new InitialContext()就搞定了,不要搞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();

注意,我们直接把JNDI的相关参数放入了System.properties中,这样,后面的代码如果要查JNDI,直接new InitialContext()就可以了。

另外我们还可以用File System做为naming service。以下为例子:

String name = "C:/aaa.txt"; 

env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.fscontext.RefFSContextFactory"); 

 Context ctx = new InitialContext(env);

Object obj = ctx.lookup(name);

 

分享到:
评论

相关推荐

    JNDI.rar_JINI jndi_JNDI相关书籍_jndi

    **Java Naming and Directory Interface (JNDI) 是Java平台中用于访问命名和目录服务的一组API,它为各种服务提供了...通过阅读相关书籍和实践,你可以更深入地探索这个强大的工具,从而在复杂的分布式环境中游刃有余。

    JNDI Explorer for Eclipse插件

    JNDI(Java Naming and Directory Interface)探险者是Eclipse集成开发环境中的一个插件,专门用于帮助开发者探索和管理JNDI服务。这个插件名为"JNDI Explorer for Eclipse",它极大地简化了在开发过程中对JNDI资源...

    探索高版本 JDK 下 JNDI 漏洞的利用方法 - 跳跳糖1

    探索高版本 JDK 下 JNDI 漏洞的利用方法 - 跳跳糖1

    jndi指南.zip

    2. **trailmap.html** - 可能是一个学习路径图或指南的路线图,指导用户按照特定顺序或主题探索JNDI的相关知识。 3. **index.html** - 主页或索引文件,通常包含了对整个文档集的介绍和链接到各个主题的入口。 4. ...

    JNDI and OpenLDAP

    JNDI(Java Naming and Directory Interface)是Java平台上的一个标准接口,用于访问各种命名和目录服务,包括但不限于...通过本教程,你将能够开始使用JNDI API来访问OpenLDAP服务器,并进一步探索其更高级的功能。

    JNDI.J2SE.application.programming.examples.rar_java programming

    Java Naming and Directory Interface (JNDI) 是Java平台中用于访问命名和目录服务的API,它为各种服务提供了一个统一的接口,使得开发者可以轻松地查找、绑定和...记得在实践中不断探索和总结,以加深对JNDI的理解。

    JNDI Warrior-开源

    安装后的程序将提供一个直观的界面,引导用户探索和管理JNDI环境。 总的来说,JNDI Warrior是一个强大的辅助工具,尤其对于那些在Java EE世界中应对复杂部署和调试任务的开发者。借助Groovy和Griffon的灵活性,它...

    晾晾多年珍藏 J2EE探索者.chm

    《J2EE探索者》是一本深入探讨Java企业级应用开发的宝贵资源,其.chm格式的文件是Windows操作系统中的帮助文档,通常包含了丰富的文本、图片、代码示例等信息。这本书籍着重于J2EE(Java 2 Platform, Enterprise ...

    J2EE探索者.rar

    除了这些基础组件,J2EE还包含其他关键组件,如JNDI(Java Naming and Directory Interface)用于查找和绑定资源,JCA(Java Connector Architecture)用于集成企业系统,以及JSF(JavaServer Faces)用于构建用户...

    JAVAEE——基于ECLIPSE和WEBLOGIC

    JavaEE是Java企业版的简称,它是一种用于构建企业级应用程序的框架,涵盖了服务器端的开发技术,包括Servlet、JSP、EJB、JMS、JNDI等。...在实践中不断探索和学习,你将能够熟练地应对各种JavaEE开发挑战。

    JSPDemo

    **JSP(Java Server Pages)技术详解** JSP(Java Server Pages)是Java...myTest可能是这个示例项目的一部分,具体可能包含JSP页面、配置文件或其他相关资源,进一步探索这些内容将有助于深入理解JSP和其工作环境。

    RMI基础代码小程序

    Java RMI(Remote Method Invocation,...学习这个RMI基础代码小程序,可以帮助理解RMI的基本工作原理,为进一步探索Java的分布式计算打下基础。此外,理解并掌握RMI有助于开发跨JVM的应用,例如分布式系统、云服务等。

    Spring framework deserialization RCE漏洞分析以及利用1

    在2021年初,Java反序列化漏洞引起广泛关注,研究人员不断探索其利用技巧。近期,安全研究员zerothoughts在Spring框架中发现了一个与Apache Commons Collection组件无关的反序列化漏洞,这促使我们深入探讨Spring...

    探索Java EE的企业心脏:EJB的深度解析

    # 探索Java EE的企业心脏:EJB的深度解析 Java是一种广泛应用的编程语言,它由Sun Microsystems公司在1995年首次推出,后被Oracle公司收购。Java的设计初衷是面向对象,具备跨平台性、网络编程能力、健壮性、安全性...

    datasource-explorer:由于 weblogic 上的数据源而探索数据库的应用程序

    【标题】"datasource-explorer" 是一个专用于在 WebLogic 服务器上探索数据库的应用程序。WebLogic 是甲骨文公司提供的一个企业级 Java 应用服务器,它提供了管理和部署 Java 应用程序的能力,同时也支持多种数据源...

    J2EE全实例教程 doc格式

    **J2EE全实例教程——探索企业级Java开发** 在IT行业中,J2EE(Java 2 Platform, Enterprise Edition)是用于构建企业级分布式应用程序的标准框架。本全实例教程是针对那些希望深入理解和掌握J2EE技术的开发者设计...

    openldap 2.4.42

    OpenLDAP 2.4.42 是一个广泛使用的开源轻量级目录访问协议(Lightweight Directory Access Protocol,LDAP)服务器实现。它为组织提供了一个中央...对于初学者来说,理解上述知识点是开始探索OpenLDAP世界的关键步骤。

    J2EE.rar_J2EE

    **J2EE技术概览** Java 2 Platform, Enterprise Edition(J2EE)是Oracle公司(原Sun Microsystems)推出的企业级应用开发平台,...通过阅读提供的文档和探索更多相关资源,你可以逐步掌握这一复杂但强大的开发框架。

    JBoss3.0快速入门指导

    - **集群 JNDI**:掌握如何在集群环境中配置 JNDI 条目,使它们在所有节点间可见。 - **故障排除**:学习如何诊断和解决集群配置中常见的问题。 #### 写入和部署 EJB 了解如何创建、编译和部署 Enterprise ...

    LDAP java 操作

    **LDAP (轻量级目录访问协议) 是一种用于访问和管理分布式目录服务的标准协议,广泛应用于企业环境中的用户身份验证和授权。在Java中,我们可以使用JNDI...不断探索和实践,可以进一步提升在Java LDAP编程领域的技能。

Global site tag (gtag.js) - Google Analytics