最近在学习RMI,用RMI写一个使用远程对象完成计算时抛出的异常remote object implements illegal remote interface
最近在学习EJb,用EJB写一个使用远程对象完成计算时抛出的异常remote object implements illegal remote interface
程序如下:
/***********接口*****************/
public interface calc extends Remote {
public int calc(int a,int b);
}
/***********实现类*****************/
public class calcImpl extends UnicastRemoteObject implements calc {
public calcImpl() throws RemoteException {
super();
}
public int calc(int a, int b) {
if(a>b){
return a-b;
}else if(a==b){
return a*b;
}else{
return a+b;
}
}
}
/****************测试类*****************/
public static void main(String[] args) {
try {
Registry re=LocateRegistry.createRegistry(2000);
calcImpl calc=new calcImpl();
re.bind("calc", calc);
System.out.println("服务器已经启动了");
} catch (Exception e) {
e.printStackTrace();
}
}
然后就是将接口导出,放到另一个工程里测试,测试工程的代码如下:
public static void main(String[] args) {
String url="rmi://localhost:2000/calc";
try {
calc c=(calc) Naming.lookup(url);
int result=c.calc(10, 5);
System.out.println("计算的结果是:"+result);
} catch (Exception e) {
e.printStackTrace();
}
}
很简单的一个问题,当我启动服务器的时候,程序报了一个异常:
我到网上查了一下,很多都是英文的,有中文的也没有说一个所以然来,所以只好自己去出问题,我把抛出的异常仔细看了一下子,原来原来异常信息告诉我,自己定义的接口里面的方法有问题,我仔细看了一下方法,方法好像少了点什么,原来使用远程方法调用都必须抛出一个RemoteException,因为 网络出现类似机器故障或者网络阻塞等问题时会产生RemoteException。在接口定义的方法里throws RemoteException,问题就解决了。