`
ginge
  • 浏览: 212087 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

从实例看JNDI设计

阅读更多

介绍

JNDIJava Naming and Directory Interface的缩写),Java的命名和目录服务的接口。使用Java编写的应用程序得以利用其提供的命名和目录功能。JNDI被设计为独立于任意的目录服务的实现,因此各种的目录服务都可以以统一的方式访问。

 

 

JNDI的架构包括API和服务提供接口(SPI)Java应用使用JNDI API来访问各种命名和目录服务。SPI使得各种命名和目录都可以无缝的接入进来。

 

 

 

例子

这里提供了一个基于RMI注册服务的例子。我们先执行com.candyshop. JndiRMIRegistry创建一个注册点,然后执行com.candyshop.BindMain绑定对象上去,最后执行com.candyshop.LookupMain来查找。

 

1com.candyshop. JndiRMIRegistry打印了以下消息:

Creating Registry at port 9999.

 

2com.candyshop. BindMain打印了以下消息:

Binding [上海] with name [city]

Bound successfully.

 

3com.candyshop.LookupMain,打印了以下消息:

Looking up [city].

Lookup successfully, obj [上海].

10

 

注意到多出来了一个10吧,那是因为查找出对象后还调用了该对象的加法方法。

 

 

 例子说明

使用RMI作为命名和目录的SPI实现。整个例子总共有5个类。

1)  com.candyshop. NamingManager

命名管理的入口,提供了创建InitialContext,绑定和查找命名的方法

 

2)  com.candyshop. JndiRMIRegistry

创建了一个RMI注册点

 

3)  com.candyshop. BindMain

用来作实际的绑定,调用com.candyshop. NamingManager

 

4)  com.candyshop.LookupMain

用来作实际的查找,调用com.candyshop. NamingManager

 

5)  com.candyshop. BindObject

被绑定的类

 

 

 

对于JNDI应用来说,绑定和查找都是统一的API,还是把精力放到NamingManager创建InitialContext的代码上吧

 

private InitialContext getInitialContext()
	{
		Hashtable env = new Hashtable();
		env.put(Context.INITIAL_CONTEXT_FACTORY,
	    "com.sun.jndi.rmi.registry.RegistryContextFactory");
		env.put(Context.PROVIDER_URL, "rmi://localhost:9999");

		InitialContext ctx = null;

		try
		{

			ctx = new InitialContext(env);
		} catch (NamingException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return ctx;
	}

 

Context.INITIAL_CONTEXT_FACTORY这个系统属性指明了用来实例化Initial Context Factory的SPI实现

Context.PROVIDER_URL                这个系统属性指明了SPI存储命名的地点

 

完整的例子代码在附件在jndi.zip中

 

 

资料

  • 大小: 51.9 KB
5
1
分享到:
评论

相关推荐

    Jndi.pdf

    - **`InitialContext` 类**:用于初始化上下文环境,创建 `Context` 实例。 - **`Name` 接口**:定义了名称的基本操作。 - **绑定与解绑**:允许将名称与对象关联或取消关联。 - **引用**:用于存储对象的描述...

    javaJNDI连接数据库

    JNDI的一个主要优势是它提供了一个统一的接口来访问不同的命名和目录服务,从而简化了应用程序的设计与实现。 #### 使用JNDI连接数据库 本节将详细介绍如何使用JNDI在Java应用中配置并连接到数据库。 ##### 配置...

    JNDI连接池+单例模式+文件上传

    单例模式则是一种设计模式,确保一个类只有一个实例并提供全局访问点,常用于控制共享资源的访问,如连接池。 首先,让我们详细了解一下JNDI连接池。JNDI主要负责将逻辑名称映射到物理资源,如数据库连接。在Web...

    JNDI培训资料(经典).pdf

    4. **JNDI SPI 管理器**: 负责管理 SPI 的实例化和服务调用,以及处理上下文环境。 **优点** - **灵活性**: 支持多种命名和目录服务。 - **可移植性**: 应用程序可以在不同的目录服务之间切换而无需重新编码。 - *...

    jndi.rar_jndi_site:www.pudn.com

    - **jndi.ppt**:这可能是一个PowerPoint演示文稿,详细介绍了JNDI的基本概念、API使用方法以及实例教程,是学习JNDI的好资料。通常,它会包含JNDI的工作原理、如何创建和查找上下文、绑定和解绑对象等内容。 - **...

    jndi.zip_java ldap_jndi_jndi ldap_ldap_ldap java

    在本案例中,我们关注的是JNDI与Lightweight Directory Access Protocol (LDAP) 的结合使用,这是一个广泛应用于分布式环境中的目录服务协议。通过JNDI,Java开发者可以方便地与LDAP服务器进行交互,实现诸如连接、...

    JSP+Serlet+JNDI实现酒店管理系统

    6. **系统架构**:基于JSP+Servlet+JNDI的架构设计,具有良好的分层结构,包括表现层(JSP)、业务逻辑层(Servlet)和数据访问层(JNDI)。这种架构有利于代码的复用、维护和扩展。 7. **源码分析**:压缩包中的...

    基于Java的实例源码-EJB中JNDI的使用源码例子.zip

    在这个实例源码中,我们将深入探讨如何在Java EE应用中使用JNDI(Java Naming and Directory Interface)来查找和绑定EJB组件。 JNDI是Java平台提供的一种接口,它允许应用程序查找和绑定各种命名和目录服务,如...

    基于Java的实例开发源码-EJB中JNDI的使用源码例子.zip

    本实例将通过源代码的形式,深入解析EJB中JNDI的使用方法。 JNDI是一个接口,它允许Java应用程序查找和访问命名和目录服务。在EJB环境中,JNDI主要用于查找Enterprise JavaBeans(EJBs),以及相关的JDBC数据源、...

    技术专栏 _ 深入理解JNDI注入与Java反序列化漏洞利用.pdf

    文章中提到了JdbcRowSetImpl利用链和FastJson反序列化漏洞,这些是JNDI注入攻击利用的实例。JdbcRowSetImpl是Java的一个类,它允许通过JNDI进行远程调用。FastJson是一个广泛使用的Java库,用于对象到JSON的序列化与...

    comcat配置jndi

    Comcat虽然看起来像是拼写错误,但从上下文判断这里应该是指Tomcat或类似的Java应用服务器。因此,我们假设此处指的是Tomcat。Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,主要用于运行Java...

    EJB中JNDI的使用源码例子

    这个过程会返回一个EJB的引用,而不是实际的EJB实例。 2. **创建EJB连接**: 有了EJB引用后,应用程序可以通过调用其方法来与EJB通信。这个过程通常涉及一个由应用服务器管理的代理对象,它负责处理请求的转发和结果...

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

    本资料集是关于"JNDI在J2SE应用编程中的使用实例",它提供了深入理解JNDI的关键概念和实践操作的教程。通过这些例子,你可以学习如何在Java程序中有效地利用JNDI服务。 1. **JNDI的基本概念** - **Naming Service*...

    jdbc连接数据库(jndi连接池)

    5. 简单工厂模式:这是一种设计模式,用于创建对象的实例,客户端通过向工厂发送请求来获取所需的对象,而无需知道具体创建的对象类型。在本例中,简单工厂模式可能用于根据数据库类型(如oracle10g,mysql,sql...

    基于Java的源码-EJB中JNDI的使用源码例子.zip

    JNDI查找通常分为两个步骤:查找EJB的引用(lookup)和创建实际的EJB实例(create或activate)。 1. JNDI查找过程: - 定义JNDI名称:在EJB部署描述符(ejb-jar.xml或web.xml)中,开发者会为每个EJB组件指定一个...

    Java源码包100个设计实例.zip

    Java源码包100个设计实例, 大量 实例,可以作为你的学习设计参考。 实例如下: Applet钢琴模拟程序java源码 Calendar万年历 copass源代码.rar DataBuffer在Java中使用ADO.NET.rar EJB 模拟银行ATM流程及操作源代码 ...

    《JSP程序设计精彩实例》.zip

    《JSP程序设计精彩实例》这本书很可能包含以上这些知识点的实战应用,通过案例分析和代码示例,帮助读者更好地掌握JSP的精髓。"webasp.net.txt"可能是书中提到的一个对比ASP.NET与JSP的讨论,或者是一个转换ASP.NET...

    J2EE经典案例设计与实现素材

    《J2EE经典案例设计与实现素材》是一个深入探讨J2EE应用开发的资源集合,主要聚焦于实际项目中的设计模式和实现策略。这个压缩包包含一个名为"buyFlowers"的子文件,可能是一个模拟花卉销售系统的示例应用。在深入...

Global site tag (gtag.js) - Google Analytics