`
lance2002
  • 浏览: 7382 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

RMI与JNDI集成服务实例

 
阅读更多

     下午和莉莉讨论JNDI,感觉网上好多资料都写到太过于高深莫测了,具体了解了之后,发现JNDI的使用目的,最根本的就是java应用通过一个名字获取其他JVM中的数据。而在提供JNDI服务的服务端应用中,建立了一个类似键值对的形式,存储JNDI的名字和数据的绑定。这就类似于数据库的连接池,不必每次去连接数据库都重新建立一个连接,而是直接从连接池中获取已有连接拿来使用即可,节省了内存同时也优化了效率。

     网上大多数文章都是在讨论J2EE中如何使用JNDI获取数据源,确实很方便,但是作为理解JNDI的实例,稍显麻烦,下面将通过一个RMI与JNDI的集成服务端和客户端简单分析下RMI的使用和JNDI的原理。

 

java version "1.7.0_40"

 

RMI服务端接口

 

package com.jxl.rmi.server;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface RmiSimple extends Remote {
	public String sayHello() throws RemoteException;
}

 

 

RMI服务端接口的实现

 

package com.jxl.rmi.server;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
 
public class RmiSimpleImpl extends UnicastRemoteObject implements RmiSimple {
    private static final long serialVersionUID = 1L;
 
    protected RmiSimpleImpl() throws RemoteException {
        super();
    }
 
    public String sayHello() throws RemoteException {
        return "hello lili!!";
    }
}

 

 

RMI服务的实现

package com.jxl.rmi.server;

import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.util.Properties;
 
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
 
public class RmiJndiSever {
    public static void main(String[] args) {
        try {
        	//注册RMI服务器端口
            LocateRegistry.createRegistry(8080);
            //建立RMI服务端接口实现对象
            RmiSimple server = new RmiSimpleImpl();
            //设置JNDI属性
            Properties properties = new Properties();
            //RMI的JNDI工厂类
            properties.setProperty(Context.INITIAL_CONTEXT_FACTORY , "com.sun.jndi.rmi.registry.RegistryContextFactory");
            //RMI服务端的访问地址
            properties.setProperty(Context.PROVIDER_URL, "rmi://localhost:8080");
            //根据JNDI属性,创建上下文
            InitialContext ctx = new InitialContext(properties);
            //将服务端接口实现对象与JNDI命名绑定,这个地方写的并不是很规范
            //如果在J2EE开发中,规范的写法是,绑定的名字要以java:comp/env/开头
            ctx.bind("RmiSimple", server);
            System.out.println("RMI与JNDI集成服务启动.等待客户端调用...");
        } catch (RemoteException e) {
            e.printStackTrace();
        } catch (NamingException e) {
            e.printStackTrace();
        }
    }
}

 

 

RMI客户端的实现,使用JNDI去查找并调用RMI方法

package com.jxl.rmi.client;

import java.rmi.RemoteException;
import java.util.Properties;
 

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import com.jxl.rmi.server.RmiSimple;

public class JndiRmiClient {
    public static void main(String[] args) {
    	//设置JNDI属性
        Properties properties = new Properties();
        //RMI的JNDI工厂类
        properties.setProperty(Context.INITIAL_CONTEXT_FACTORY , "com.sun.jndi.rmi.registry.RegistryContextFactory");
        //RMI服务端的访问地址
        properties.setProperty(Context.PROVIDER_URL, "rmi://localhost:8080");
        try {
        	//根据JNDI属性,创建上下文
            InitialContext ctx = new InitialContext(properties);
            //根据JNDI上下文,查找并获取到远程的RMI对象
            RmiSimple remote = (RmiSimple) ctx.lookup("RmiSimple");
            System.out.println(remote.sayHello());
        } catch (NamingException e) {
            e.printStackTrace();
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
}

 

 

 

服务端运行时,会建立一个监听,等待客户端的命令,运行结果:

RMI与JNDI集成服务启动.等待客户端调用...

 

客户端运行时,会成功调用到服务端的方法,并进行打印输出:

hello lili!!

 

以上如果有理解错误,请各位不吝批评指正!

 

参考:RMI 与 JNDI集成 http://bbs.csdn.net/topics/340060074

参考:对java:comp/env的研究  http://f543711700.iteye.com/blog/1173618

 

分享到:
评论

相关推荐

    rmi实例(Spring整合)

    Spring框架作为Java企业级应用的基石,它提供了与RMI集成的能力,使得开发者可以方便地利用RMI来构建高可扩展性的系统。本文将深入探讨Spring整合RMI的相关知识点。 首先,理解RMI的基本概念是关键。RMI允许一个...

    jndi使用实例

    6. **JNDI与LDAP集成**: JNDI也可以与LDAP服务器进行交互。开发者可以使用JNDI API来执行搜索、添加、删除和修改LDAP目录中的条目。 总的来说,JNDI是Java开发中一个强大的工具,它提供了对各种命名和目录服务的...

    spring中使用RMI

    总的来说,Spring集成RMI提供了一种简单、可管理的方式来创建和使用分布式服务。通过Spring的配置,我们可以轻松地在客户端和服务器之间建立连接,实现远程方法调用,提高应用的可扩展性和灵活性。理解并熟练运用...

    JNDI 和目录服务初步教学课件.zip

    2. **目录服务集成**:JNDI支持多种不同的目录服务协议,如LDAP,开发者可以通过统一的API来操作不同的目录服务,而无需关心底层实现细节。 3. **层次结构**:JNDI中的命名是基于树状层次结构的,这使得数据的组织...

    jndi.rar_jndi_site:www.pudn.com

    这意味着JNDI可以与 LDAP、DNS、RMI 等多种服务无缝集成。 5. **应用示例**:在企业级Java应用中,JNDI 常用于管理数据源,通过 JNDI 查找数据库连接池,从而实现数据库连接的透明管理。此外,还可以用来查找 EJB ...

    rmi.rar_rmi

    RMI(Remote Method Invocation,远程方法调用)是Java平台上的一个重要特性,它允许...不过,实际应用中,还应关注RMI与其他技术(如EJB、JMS、JNDI等)的集成,以及现代Java框架(如Spring)中对RMI的支持和扩展。

    RMI测试_azure

    **RMI与Azure服务的集成** 1. **Azure虚拟机**:可以在虚拟机上部署RMI服务器,通过开放合适的端口和配置网络安全规则,使外部可以访问RMI服务。 2. **Azure App Service**:虽然App Service不直接支持RMI,但可以...

    java项目使用spring rmi所涉及到的包

    - `org.springframework.jndi`: 用于JNDI(Java Naming and Directory Interface)操作,RMI服务通常会在JNDI注册表中注册。这个包中的工具类可以帮助我们查找和绑定RMI服务。 配置Spring RMI的基本步骤如下: 1. ...

    Java RMI 用于远程调用 进行分布式开发

    此外,还提到了如何将RMI与CORBA(Common Object Request Broker Architecture)集成起来,以实现更广泛的服务互操作性。 #### 实战案例分析 为了帮助读者更好地理解Java RMI的实际应用场景,本书提供了多个实战...

    java源码:EJB中JNDI的使用源码例子.zip

    JNDI通过目录服务(如LDAP)或命名服务(如RMI注册表)提供服务。 2. **EJB与JNDI的结合**: 在EJB中,JNDI主要用于查找EJB的引用。客户端首先通过JNDI查找EJB的Home接口,然后通过Home接口创建远程或本地的...

    Java RMI demo

    - **JNDI和命名服务**:RMI可以与Java Naming and Directory Interface (JNDI)集成,提供更复杂的服务发现功能。 - **安全性**:RMI支持SSL/TLS加密和认证,以确保通信安全。 5. **示例代码解析** - 服务器端...

    h_JAVA 2应用编程150例.rar

    实例117 C/S结构的RMI-IIOP应用 414 实例118 使用JTA与JTS 417 实例119 Request-Reply模式的JMS应用 421 实例120 使用Java IDL 426 实例121 EJB与CORBA的交互 430 实例122 基于EJB的真实世界模型 433 实例123 EJB的...

    在jboss同时启动两个实例

    ### 如何在JBoss上同时启动两个实例 在企业级应用服务器JBoss中,有时我们需要在同一台物理机器上运行多个独立的JBoss实例。这在测试环境或开发环境中非常常见,...希望本文能帮助你在JBoss中实现多实例的配置与管理。

    基于RMI的Java远程调用.zip

    它可能会涵盖常见问题,如处理异常、优化性能、使用RMI-IIOP(RMI over IIOP,一种在CORBA基础设施上运行RMI的方式)以及与Java Naming and Directory Interface (JNDI)的集成。 总的来说,RMI是Java平台上的一个...

    吉林大学软件学院服务计算概论第二次作业

    `javax.naming.Context` 是 JNDI(Java Naming and Directory Interface)的一部分,从 JDK 1.3 开始,RMI 的命名服务被集成到了 JNDI 中,`Context` 类提供了更高级的命名和目录服务,可以用来注册、查找和注销对象...

    EJB实例工程代码

    这些服务确保EJB组件能够以声明式的方式集成到复杂的分布式环境中。 7. **调用原理**:客户端通常通过EJB的远程接口进行调用。调用过程涉及了远程方法调用(RMI,Remote Method Invocation)、EJB容器的拦截器...

    j2ee ejb编程实例

    - **远程调用**:通过RMI-IIOP或JNDI查找并调用EJB。 - **集成测试**:使用JUnit或Arquillian等工具进行EJB的单元测试和集成测试。 通过实践这些J2EE EJB编程实例,开发者可以更深入地了解EJB的工作原理和使用...

    java应用软件程序设计

    397 实例113 使用B/S结构的EJB 402 实例114 使用C/S结构的EJB组件服务 405 实例115 与时间有关的函数 407 实例116 EJB与UML的对应关系 412 实例117 C/S结构的RMI-IIOP应用 414 实例118 使用JTA与...

    系统分析员考试复习 DOC

    系统分析员考试复习主要涉及了多个IT领域的知识点,包括JavaBean、Enterprise JavaBean(EJB)、JSP、企业计算的基本服务、J2EE组件、RMI与RPC的区别、XML与HTML的区别以及XML与JSP的集成。以下是这些知识点的详细...

Global site tag (gtag.js) - Google Analytics