`

RMI学习笔记

    博客分类:
  • RMI
阅读更多

失业在家,学习RMI一例,以做记录。

创建RMI应用程序分四步。自JDK1.5之后不再需要创建存根与基干。

(1)定义和实现远端接口中的参数

(2) 定义和实现远端接口

(3) 编写服务端代码

(4) 编写客户端代码

(5) 启动rmiregistry , 并将服务注册到rmiregistry.



定义和实现远端接口中的参数

这里定义一个学生实体


Code
package rmi;
import java.io.Serializable;

public class Student implements Serializable{
   private String name;
   private int age;
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public int getAge() {
    return age;
}
public void setAge(int age) {
    this.age = age;
}
}



这里student定义为可序列化,这是因为客户端与服务传递参数都是byte stream的形式。然后通过反序列化成对像,才能调用方法。

定义和实现远端接口

1.定义远程接口

Code
package rmi;

import java.rmi.Remote;



public interface InfoConsult extends Remote{

    public int getAge(String name);

}

远端接口必须从java.rmi.Remote继承;远端接口中的方法如果要throws异常,这个异常必须是java.rmi.RemoteException(或java.rmi.RemoteException的子类),否则,这个异常就不能被返回到客户端 .

2.实现远程接口

package rmi;



import java.rmi.RemoteException;

import java.rmi.server.UnicastRemoteObject;

import java.util.List;



public class InfoConsultImpl extends UnicastRemoteObject implements InfoConsult{

  

    private List<Student> students;

   

    protected InfoConsultImpl(List<Student> students) throws RemoteException {

       super();

       this.students = students;

    }

    private static final long serialVersionUID = -3359466943165065842L;

    public int getAge(String name) throws RemoteException{

       for(Student stu:students){

           if(stu.getName().equals(name)){

              return stu.getAge();

           }

       }

       return -1;

    }

}



编写服务代码


Code
package rmi;



import java.net.MalformedURLException;

import java.rmi.Naming;

import java.rmi.RemoteException;

import java.util.ArrayList;

import java.util.List;



public class InfoServer {

    public static void main(String args[]) throws RemoteException, MalformedURLException{

    InfoServer server = new InfoServer();

    InfoConsult consult = new InfoConsultImpl(server.getMockData());

    Naming.rebind("rmi://localhost:8888/InfoConsult", consult);

   

    }

   

    public List<Student> getMockData(){

    List<Student> lst = new ArrayList<Student>();

    lst.add(new Student("guo",26));

    lst.add(new Student("zhang",24));

    lst.add(new Student("baby",1));

    return lst;

    }

}



编写客户端代码


Code
package rmi;

import java.net.MalformedURLException;

import java.rmi.Naming;

import java.rmi.NotBoundException;

import java.rmi.RemoteException;



public class School {

     public static void main(String args[]){

     try {

           InfoConsult consult = (InfoConsult) Naming.lookup("rmi://localhost:8888/InfoConsult");

           System.out.println(consult.getAge("baby"));

       } catch (MalformedURLException e) {

           e.printStackTrace();

       } catch (RemoteException e) {

           e.printStackTrace();

       } catch (NotBoundException e) {

           e.printStackTrace();

       }

     }

}



启动rmiregistry , 并将服务注册到rmiregistry

在服务程序目录下启动rmiregistry 8888或者将classpath设定为服务器程序所在目录。

运行服务端程序,运行客户端程序。可以看到输出1。



这里没有产生存根与基干程序。JDK1.5的RMIC命令默认情况下不再产生基干程序,仅产生存根程序。

那什么时候用到存根程序呢,我做了试验,当服务端有存根程序存在时,而客户端没有存根程序,这里客户端就会报错,说没有找到CLASSNAME_STUB。具体原因还不明,有知道的可留言,谨谢.

 

分享到:
评论

相关推荐

    j2ee精华学习笔记

    **J2EE精华学习笔记** J2EE,全称为Java 2 Platform, Enterprise Edition,是Java平台上用于构建企业级分布式应用程序的框架。本学习笔记旨在深入解析J2EE的核心概念和技术,帮助读者全面掌握J2EE开发的关键知识。 ...

    jdk6.0学习笔记

    ### JDK 6.0 学习笔记精要 #### 一、Java 概览 - **Java 的起源与发展** - Java 最初是由 Sun Microsystems 的 Green Project 开发出来的,最初是为了设计 Star7 应用程序而创建的一种编程语言。 - 名称由来:...

    递归调用学习笔记

    在编程领域,递归是一种强大的概念,它是指一个函数或过程在其定义中调用自身的行为。递归在解决复杂问题时特别有用,因为它允许我们用更简洁的方式表达问题的解决方案。这里我们将深入探讨两个经典的递归示例:计算...

    SCJP学习笔记.doc

    以下是从给定的学习笔记中提炼出的一些关键知识点: 1. **java.util.Properties的使用** `Properties` 类是Java中用于处理配置文件的关键工具,它继承自`Hashtable`。在示例中,`Properties` 对象`pp`加载了名为...

    JAVA RIM接口学习笔记 带有实例

    非常详细java RMI接口编程笔记,实例 且带有详细的说明。

    EJB工作原理学习笔记.pdf

    - **RMI**:RMI简化了远程对象的调用,使得开发者可以通过简单的接口调用来访问远程对象,而不需要了解底层通信的细节。 - **容器管理**:EJB容器负责管理组件的生命周期,包括事务管理、安全性和并发控制等,这大大...

    分布式技术相关知识学习笔记

    【分布式技术相关知识学习笔记】 分布式技术是现代软件开发中的重要组成部分,它涉及多种技术手段,如CORBA、ORB、RPC、RMI以及中间件等,旨在解决大型系统中复杂度、扩展性和高可用性的问题。本笔记将重点讨论EJB...

    Web安全学习笔记.pdf

    《Web安全学习笔记》是一份全面介绍Web安全的资料,涵盖了从基础知识到深入技术的多个层面。本笔记首先概述了Web技术的演进历程及其安全挑战的发展,强调了网络安全的重要性。接下来,它深入探讨了计算机网络的基础...

    SCA学习笔记

    SCA学习笔记 本文档为SCA学习笔记,主要介绍了SCA(Service Component Architecture)的概念、实现和应用,特别是与Web 2.0技术的结合。SCA是一种SOA(Service-Oriented Architecture)编程模型,能够帮助企业级...

    hibernate 学习笔记1

    ### 对象持久化与Hibernate学习笔记 #### 一、对象持久化的概念与重要性 - **定义**: 对象持久化是指将程序中的对象状态存储到持久化存储设备上的过程,以便在程序结束运行后仍然可以保留这些数据。 - **必要性**:...

    JAVA学习笔记1

    ### JAVA学习笔记1:深入解析J2EE框架与关键技术 #### J2EE模式与Value Object概念 在JAVA学习之旅中,深入理解J2EE(Java 2 Platform, Enterprise Edition)框架是至关重要的一步。J2EE是专为开发企业级应用而...

    学习笔记:JAVA RMI远程方法调用简单实例

    RMI的概念  RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制。使用这种机制,某一台计算机上的对象可以调用另外一台计算机上的对象来获取远程数据。...

Global site tag (gtag.js) - Google Analytics