当前位置:天才代写 > tutorial > JAVA 教程 > 用RMI成立一个漫衍式Java应用措施详解

用RMI成立一个漫衍式Java应用措施详解

2017-11-13 08:00 星期一 所属: JAVA 教程 浏览:477

副标题#e#

RMI,长途要领挪用(Remote Method Invocation)是Enterprise JavaBeans的支柱,是成立漫衍式Java应用措施的利便途径。RMI长短常容易利用的,可是它很是的强大。

RMI的基本是接口,RMI构架基于一个重要的道理:界说接口和界说接口的详细实现是分隔的。下面我们通过详细的例子,成立一个简朴的长途计较处事和利用它的客户措施

一个正常事情的RMI系统由下面几个部门构成:

● 长途处事的接口界说

● 长途处事接口的详细实现

● 桩(Stub)和框架(Skeleton)文件

● 一个运行长途处事的处事器

● 一个RMI定名处事,它答允客户端去发明这个长途处事

● 类文件的提供者(一个HTTP可能FTP处事器)

● 一个需要这个长途处事的客户端措施

下面我们一步一步成立一个简朴的RMI系统。首先在你的呆板里成立一个新的文件夹,以便安排我们建设的文件,为了简朴起见,我们只利用一个文件夹存放客户端和处事端代码,而且在同一个目次下运行处事端和客户端。

假如所有的RMI文件都已经设计好了,那么你需要下面的几个步调去生成你的系统:

1、编写而且编译接口的Java代码

2、编写而且编译接话柄现的Java代码

3、从接话柄现类中生成桩(Stub)和框架(Skeleton)类文件

4、编写长途处事的主运行措施

5、编写RMI的客户端措施

6、安装而且运行RMI系统

1、 接口

第一步就是成立和编译处事接口的Java代码。这个接口界说了所有的提供长途处事的成果,下面是源措施:

//Calculator.java//define the interface
import java.rmi.Remote;
public interface Calculator extends Remote{
public long add(long a, long b) throws java.rmi.RemoteException;
public long sub(long a, long b) throws java.rmi.RemoteException;
public long mul(long a, long b) throws java.rmi.RemoteException;
public long div(long a, long b) throws java.rmi.RemoteException;
}

留意,这个接口担任自Remote,每一个界说的要领都必需抛出一个RemoteException异常工具。

成立这个文件,把它存放在适才的目次下,而且编译。

>javac Calculator.java

2、 接口的详细实现

下一步,我们就要写长途处事的详细实现,这是一个CalculatorImpl类文件:

//CalculatorImpl.java
//Implementation
import java.rmi.server.UnicastRemoteObject
public class CalculatorImpl extends UnicastRemoteObject implements Calculator {
// 这个实现必需有一个显式的结构函数,而且要抛出一个RemoteException异常
public CalculatorImpl() throws java.rmi.RemoteException {
super();
}
public long add(long a, long b) throws java.rmi.RemoteException {
return a + b;
}
public long sub(long a, long b) throws java.rmi.RemoteException {
return a - b;
}
public long mul(long a, long b) throws java.rmi.RemoteException {
return a * b;
}
public long div(long a, long b) throws java.rmi.RemoteException {
return a / b;
}
}

同样的,把这个文件生存在你的目次里然后编译他。

这个实现类利用了UnicastRemoteObject去联接RMI系统。

在我们的例子中,我们是直接的从UnicastRemoteObject这个类上担任的,事实上并不必然要这样做,

假如一个类不是从UnicastRmeoteObject上担任,那必需利用它的exportObject()要领去联接到RMI。

假如一个类担任自UnicastRemoteObject,那么它必需提供一个结构函数而且声明抛出一个RemoteException工具。

当这个结构函数挪用了super(),它久激活UnicastRemoteObject中的代码完成RMI的毗连和长途工具的初始化。


#p#副标题#e#

3、 桩(Stubs)和框架(Skeletons)

下一步就是要利用RMI编译器rmic来生成桩和框架文件,这个编译运行在长途处事实现类文件上。

>rmic CalculatorImpl

在你的目次下运行上面的呼吁,乐成执行完上面的呼吁你可以发明一个Calculator_stub.class文件,

假如你是利用的Java2SDK,那么你还可以发明Calculator_Skel.class文件。

4、 主机处事器

长途RMI处事必需是在一个处事器中运行的。CalculatorServer类是一个很是简朴的处事器。

//CalculatorServer.java
import java.rmi.Naming;
public class CalculatorServer {
public CalculatorServer() {
try {
Calculator c = new CalculatorImpl();
Naming.rebind("rmi://localhost:1099/CalculatorService", c);
} catch (Exception e) {
System.out.println("Trouble: " + e);
}
}
public static void main(String args[]) {
new CalculatorServer();
}}

成立这个处事器措施,然后生存到你的目次下,而且编译它。

5、 客户端

客户端源代码如下:

#p#分页标题#e#

//CalculatorClient.java
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.net.MalformedURLException;
import java.rmi.NotBoundException;
public class CalculatorClient {
public static void main(String[] args) {
try {
Calculator c = (Calculator)Naming.lookup( "rmi://localhost/CalculatorService");
System.out.println( c.sub(4, 3) );
System.out.println( c.add(4, 5) );
System.out.println( c.mul(3, 6) );
System.out.println( c.div(9, 3) );
}
catch (MalformedURLException murle) {
System.out.println();
System.out.println("MalformedURLException");
System.out.println(murle);
}
catch (RemoteException re) {
System.out.println();
System.out.println("RemoteException");
System.out.println(re);
}
catch (NotBoundException nbe) {
System.out.println();
System.out.println("NotBoundException");
System.out.println(nbe);
}
catch ( java.lang.ArithmeticException ae) {
System.out.println();
System.out.println("java.lang.ArithmeticException");
System.out.println(ae);
}
} }

生存这个客户端措施到你的目次下(留意这个目次是一开始成立谁人,所有的我们的文件都在谁人目次下),而且编译他。

6、 运行RMI系统

此刻我们成立了所有运行这个简朴RMI系统所需的文件,此刻我们终于可以运行这个RMI系统啦!来享受吧。

我们是在呼吁节制台下运行这个系统的,你必需开启三个节制台窗口,一个运行处事器,一个运行客户端,尚有一个运行RMIRegistry。

首先运行注册措施RMIRegistry,你必需在包括你刚写的类的那么目次下运行这个注册措施。

>rmiregistry

好,这个呼吁乐成的话,注册措施已经开始运行了,不要管他,此刻切换到别的一个节制台,在第二个节制台里,我们运行处事器CalculatorService,输入如下呼吁:

>java CalculatorServer

这个处事器就开始事情了,把接口的实现加载到内存期待客户端的联接。好此刻切换到第三个节制台,启动我们的客户端。

>java CalculatorClient

假如所有的这些都乐成运行,你应该看到下面的输出:

1 9 18 3

假如你看到了上面的输出,恭喜你,你乐成了,你已经乐成的建设了一个RMI系统,而且使他正确事情了。纵然你运行在同一个计较机上,RMI照旧利用了你的网络仓库和TCP/IP去举办通讯,而且是运行在三个差异的Java虚拟机上。这已经是一个完整的RMI系统。

 

    关键字:

天才代写-代写联系方式