如何在 CORBA 中将我的 rmi 接口转换为 .idl 文件。我目前正在聊天应用程序中工作。所以这是我的界面:
import java.rmi.*;
public interface ChatServer extends Remote{
void register(ChatClient c) throws RemoteException;
void broadcast(String s) throws RemoteException;
}
我尝试这样做,但它说"void"和 ChatClient 是未声明的类型存在错误。我该如何解决这个问题?感谢您的帮助:)
p.s 我在互联网上得到了 rmi 代码,我只需要它作为我的参考,以便我可以将其转换为 CORBA 应用程序。
您可以尝试扩展java.io.Serializable
:
import java.io.Serializable;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface ChatServer extends Remote, Serializable {
void register(ChatClient c) throws RemoteException;
void broadcast(String s) throws RemoteException;
}
import java.io.Serializable;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface ChatClient extends Remote, Serializable {
void register(ChatServer c) throws RemoteException;
void broadcast(String s) throws RemoteException;
}
所有参数和所有非 void 返回类型都必须Serializable
的原因。String
是Serializable
.
除此之外,这似乎是一个非常糟糕的设计。这些接口旨在指示每个终结点提供的操作。另一方面,Serializable
东西是在端点之间传输的数据。通过创建使用这两个帽子的类/对象/接口,它肯定会变得一团糟。
更好的主意是:
import java.io.Serializable;
public class ClientId implements Serializable {
// Data used to identify the client.
}
import java.io.Serializable;
public class ServerId implements Serializable {
// Data used to identify the server.
}
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface ChatServer extends Remote {
void register(ClientId c) throws RemoteException;
void broadcast(String s) throws RemoteException;
}
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface ChatClient extends Remote {
void register(ServerId c) throws RemoteException;
void broadcast(String s) throws RemoteException;
}