「javarmi工具」JAVA的开发工具

博主:adminadmin 2022-11-26 18:02:09 61

今天给各位分享javarmi工具的知识,其中也会对JAVA的开发工具进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

Java Rmi如何实现两个客户端之间的通信 求说的具体点

RMI的开发步骤

先创建远程接口及声明远程方法,注意这是实现双方通讯的接口,需要继承Remote

开发一个类来实现远程接口及远程方法,值得注意的是实现类需要继承UnicastRemoteObject

通过javac命令编译文件,通过java -server 命令注册服务,启动远程对象

最后客户端查找远程对象,并调用远程方法

首先为服务建立一个Model层,注意因为此对象需要现实进行远程传输,所以必须继承Serializable

代码 

package rmi.model;

import java.io.Serializable;

//注意对象必须继承Serializable

publicclass PersonEntity implements Serializable {

    privateint id;

    private String name;

    privateint age;

    publicvoid setId(int id) {

        this.id = id;

    }

    publicint getId() {

        return id;

    }

    publicvoid setName(String name) {

        this.name = name;

    }

    public String getName() {

        return name;

    }

    publicvoid setAge(int age) {

        this.age = age;

    }

    publicint getAge() {

        return age;

    }

}

创建远程接口PersonService,注意远程接口需要继承Remote

代码

package rmi.service;

import java.rmi.Remote;

import java.rmi.RemoteException;

import java.util.List;

import rmi.model.*;

//此为远程对象调用的接口,必须继承Remote类

publicinterface PersonService extends Remote {

    public ListPersonEntity GetList() throws RemoteException;

}

建立PersonServiceImpl实现远程接口,注意此为远程对象实现类,需要继承UnicastRemoteObject

代码

package rmi.serviceImpl;

import java.rmi.RemoteException;

import java.rmi.server.UnicastRemoteObject;

import java.util.LinkedList;

import java.util.List;

import rmi.model.PersonEntity;

import rmi.service.*;

//此为远程对象的实现类,须继承UnicastRemoteObject

publicclass PersonServiceImpl extends UnicastRemoteObject implements PersonService {

    public PersonServiceImpl() throws RemoteException {

        super();

        // TODO Auto-generated constructor stub

    }

    @Override

    public ListPersonEntity GetList() throws RemoteException {

        // TODO Auto-generated method stub

        System.out.println("Get Person Start!");

        ListPersonEntity personList=new LinkedListPersonEntity();

        

        PersonEntity person1=new PersonEntity();

        person1.setAge(25);

        person1.setId(0);

        person1.setName("Leslie");

        personList.add(person1);

        

        PersonEntity person2=new PersonEntity();

        person2.setAge(25);

        person2.setId(1);

        person2.setName("Rose");

        personList.add(person2);

        

        return personList;

    }    

}

建立服务器端,在服务器端注册RMI通讯端口与通讯路径,然后通讯javac命令编译文件,通过java -server 命令注册服务。以下面代码为例,如果阁下将项目建立于D:\\RMI\RemotingService文件夹上时,则先输入D:\\RMI\RemotingService\srcjavac rmi/remotingservice/Program.java获取Program.class(如何阁下使用的MyEclipse等开发工具,可跳过此步,直接在*/bin文件夹中直接调用已经生成的Program.class),然后输入D:\\RMI\RemotingService\srcjava rmi/remotingservice/Program启动服务。

代码

package rmi.remotingservice;

import java.rmi.Naming;

import java.rmi.registry.LocateRegistry;

 

import rmi.service.*;

import rmi.serviceImpl.*;

publicclass Program{

    publicstaticvoid main(String[] args) {

        try {

            PersonService personService=new PersonServiceImpl();

            //注册通讯端口

            LocateRegistry.createRegistry(6600);

            //注册通讯路径

            Naming.rebind("rmi://127.0.0.1:6600/PersonService", personService);

            System.out.println("Service Start!");

        } catch (Exception e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

}

最后建立客户端进行测试,注意客户调用的RMI路径必须服务器配置一致

代码 

package rmi.remotingclient;

import java.rmi.Naming;

import java.util.List;

import rmi.model.PersonEntity;

import rmi.service.*;

publicclass Program {

    publicstaticvoid main(String[] args){

        try{

            //调用远程对象,注意RMI路径与接口必须与服务器配置一致

            PersonService personService=(PersonService)Naming.lookup("rmi://127.0.0.1:6600/PersonService");

            ListPersonEntity personList=personService.GetList();

            for(PersonEntity person:personList){

                System.out.println("ID:"+person.getId()+" Age:"+person.getAge()+" Name:"+person.getName());

            }

        }catch(Exception ex){

            ex.printStackTrace();

        }

    }

}

常见错误

在命令提示符调用java命令时,显示并无此命令。这是因为未在“环境变量”中绑定JAVA的JDK命令造成的,你首先单击“计算机右键”-“属性”-“高级”-“环境变量”。在系统变量Path设置中加载为JDK的路径  .;D:\Program Files\Genuitec\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\bin。然后在ClassPath加载服务器端的Program.class地址 .;D:\\RMI\RemotingService\bin

在调用javac命令时出现“javac 找不到文件 ..... ”此错误,可能是因为阁下输入的文件路径出现错误造成,注意不要把D:\\RMI\RemotingService\srcjavac rmi/remotingservice/Program.java写错为D:\\RMI\RemotingService\srcjavac rmi.remotingservice.Program.java

在调用D:\\RMI\RemotingService\binjava rmi/remotingservice/Program命令时出现“Exception in thread 'main' java.lang.NoClassEdfoundError”错误,第一这可能是阁下把Program错写为Program.class,注意java命令不需要加后缀名。第二可能是阁下把“java rmi/remotingservice/Program”错写为“java rmi\remotingservice\Program"。

JavaRMI服务远程方法调用漏洞如何修复lin

Linux的Apache或WebLogic应用被检测出这个漏洞,NSFOCUS(绿盟)给出的解决办法是:

临时解决方法:【限制访问或删除类文件】

如果您不能立刻安装补丁或者升级,建议您采取以下措施以降低威胁:

* 使用防火墙规则及文件系统访问限制

* 使用 SerialKiller 替换进行序列化操作的 ObjectInputStream 类

* 删除掉项目里的“commons-collections-3.2.jar///org/apache/commons/collections/functors/InvokerTransformer.class” 文件,删除后项目可能会在某些功能下报错。

安装厂商补丁:【下载3.2.2以上版本commons-collections补丁】

目前厂商已经发布了升级补丁ACC 3.2.2 以修复这个安全问题,请到厂商的主页下载:

Download Commons Collections

;revision=1713307

android 怎么使用java rmi

1、定义一个远程接口

IHello.java代码如下:

import java.rmi.Remote;

public interface IHello extends Remote {

public String sayHello(String name) throws java.rmi.RemoteException;

}

2、实现远程的接口(服务端就在此远程接口的实现类中)

HelloImpl.java代码如下:

import java.rmi.RemoteException;

import java.rmi.server.UnicastRemoteObject;

public class HelloImpl extends UnicastRemoteObject implements IHello {

    // 这个实现必须有一个显式的构造函数,并且要抛出一个RemoteException异常  

    protected HelloImpl() throws RemoteException {

        super();

    }

    /**

     * 说明清楚此属性的业务含义

     */

    private static final long serialVersionUID = 4077329331699640331L;

    public String sayHello(String name) throws RemoteException {

        return "Hello " + name + " ^_^ ";

    }

    public static void main(String[] args) {

        try {

            IHello hello = new HelloImpl();

            java.rmi.Naming.rebind("rmi://localhost:1099/hello", hello);

            System.out.print("Ready");

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}

3、新建RMI客户端调用程序

Hello_RMI_Client.java代码如下:

import java.rmi.Naming;

public class Hello_RMI_Client {

    public static void main(String[] args) {

        try {

            IHello hello = (IHello) Naming.lookup("rmi://localhost:1099/hello");

                System.out.println(hello.sayHello("zhangxianxin"));

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}

4、编译并运行

4.1 用javac命令编译IHello.java、HelloImpl.java、Hello_RMI_Client.java

javac *.java

4.2 用rmic命令生成桩和框架文件

rmic HelloImpl

成功执行完上面的命令可以发现生成一个HelloImpl_stub.class文件,如果JDK是使用Java2SDK,那么还可以发现多出一个HelloImpl_Skel.class文件。如果服务端程序与客户端程序在同一台机器上并在同一目录中,则可以省略掉接口实现类生成的桩和框架文件,但这就失去了使用RMI的意义,而如果要在不同的JVM上运行时,客户端程序就必须得依靠服务端运程方法实现的桩和框架文件以及接口类。

4.3 运行注册程序RMIRegistry,必须在包含刚写的类的目录下运行这个注册程序。

rmiregistry

注册程序开始运行了,不要管他,现在切换到另外一个控制台运行服务器

4.4 运行服务器HelloImpl

java HelloImpl

当启动成功出现Ready...... 这个服务器就开始工作了,把接口的实现加载到内存等待客户端的联接。现在切换到第三个控制台,启动我们的客户端。

4.5 启动客户端:为了在其他的机器运行客户端程序你需要一个远程接口(IHello.class) 和一个stub(HelloImpl_Stub.class)。 使用如下命令运行客户端

java Hello_RMI_Client

当运行成功会在控制台打印:Hello zhangxianxin() ^_^

备注:如果不想在控制台上开启RMI注册程序RMIRegistry的话,可在RMI服务类程序中添加LocateRegistry.createRegistry(1099); 如下所示:

修改后的HelloImpl.java代码如下:

import java.rmi.RemoteException;

import java.rmi.registry.LocateRegistry;

import java.rmi.server.UnicastRemoteObject;

public class HelloImpl extends UnicastRemoteObject implements IHello {

    // 这个实现必须有一个显式的构造函数,并且要抛出一个RemoteException异常  

    protected HelloImpl() throws RemoteException {

        super();

    }

    

    private static final long serialVersionUID = 4077329331699640331L;

    public String sayHello(String name) throws RemoteException {

        return "Hello " + name + " ^_^ ";

    }

    public static void main(String[] args) {

        try {

            IHello hello = new HelloImpl();

            LocateRegistry.createRegistry(1099); //加上此程序,就可以不要在控制台上开启RMI的注册程序,1099是RMI服务监视的默认端口

            java.rmi.Naming.rebind("rmi://localhost:1099/hello", hello);

            System.out.print("Ready");

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

    }

RMI是干什么用的在JAVA里面

RMI,远程方法调用。

远程方法调用(Remote Method Invocation,RMI)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力。Java作为一种风靡一时的网络开发语言,其巨大的威力就体现在它强大的开发分布式网络应用的能力上,而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。

java RMI是什么意思啊?

RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。调用这样一个对象时,其参数为 "marshalled" 并将其从本地虚拟机发送到远程虚拟机(该远程虚拟机的参数为 "unmarshalled")上。该方法终止时,将编组来自远程机的结果并将结果发送到调用方的虚拟机。如果方法调用导致抛出异常,则该异常将指示给调用方。

关于javarmi工具和JAVA的开发工具的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-26,除非注明,否则均为首码项目网原创文章,转载请注明出处。