Ich habe 2 Fragenfür das Programm Ergebnis über RMI
Das Ergebnis wird wie folgt angezeigt werden.
- Warum sind die ersten drei Ergebnisse der sa mich?
- Warum die vierte kann mit dem Remote-Implementierung-Objekt arbeiten. Hier
ist der Code:
FibClient.java
package fib;
import java.rmi.Naming;
import java.io.*;
public class FibClient {
public static void main(String args[]) {
try {
int numFibNum;
String registryURL = "rmi://localhost:1099/fib";
FibInterface h1 = (FibInterface)Naming.lookup(registryURL);
numFibNum = 5;
Fib c = new Fib();
//numFibNum = Integer.parseInt(args[0]);
for (int i=0; i<numFibNum; i++) {
h1.getNextFibNum(c);
System.out.print(h1.getNextFibNum(new Fib())+" ");
}
System.out.println();
for (int i=0; i<numFibNum; i++) {
System.out.print(h1.getNextFibNum(h1.getFib(0,1))+" ");
}
System.out.println();
Fib f = new Fib();
for (int i=0; i<numFibNum; i++) {
System.out.print(h1.getNextFibNum(f)+" ");
}
System.out.println();
FibImpl h2 = new FibImpl();
for (int i=0; i<numFibNum; i++) {
System.out.print(h2.getNextFibNum(f)+" ");
}
System.out.println();
f = new Fib();
for (int i=0; i<numFibNum; i++) {
f = h1.getNextFib(f);
System.out.print(f.getF1()+" ");
}
System.out.println();
} catch(Exception ex) {
ex.printStackTrace();
}
}
}
FibImpl.java
package fib;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
@SuppressWarnings("serial")
public class FibImpl extends UnicastRemoteObject implements FibInterface {
public FibImpl() throws RemoteException {
super();
}
public Fib getFib(int f0, int f1) throws RemoteException {
return new Fib(f0, f1);
}
public int getNextFibNum(Fib f) throws RemoteException {
sleep(500);
int nextFib = f.getF0() + f.getF1();
f.setF0(f.getF1());
f.setF1(nextFib);
return nextFib;
}
public Fib getNextFib(Fib f) throws RemoteException {
sleep(500);
int nextFib = f.getF0() + f.getF1();
f.setF0(f.getF1());
f.setF1(nextFib);
return f;
}
private void sleep(int time) {
try {
Thread.sleep(time);
}
catch(InterruptedException ex) {
ex.printStackTrace();
}
}
}
Fib.java
package fib;
import java.io.Serializable;
@SuppressWarnings("serial")
public class Fib implements Serializable {
private int f0;
private int f1;
public Fib() {
this(0,1);
}
public Fib(int f0, int f1) {
this.f0 = f0;
this.f1 = f1;
}
public int getF0() {
return f0;
}
public void setF0(int f0) {
this.f0 = f0;
}
public int getF1() {
return f1;
}
public void setF1(int f1) {
this.f1 = f1;
}
}