Конвертировать интерфейс rmi в CORBA .idl - PullRequest
0 голосов
/ 17 декабря 2018

как я могу преобразовать мой интерфейс rmi в файл .idl в CORBA.Я в настоящее время работаю в приложении чата.Итак, вот мой интерфейс:

import java.rmi.*;

public interface ChatServer extends Remote{
      void register(ChatClient c) throws RemoteException;
      void broadcast(String s) throws RemoteException;
}

Я пытался сделать это, но там было сообщение об ошибке и об ошибке с «пустым» и ChatClient, являющимся необъявленным типом.Как я могу решить это?Спасибо за вашу помощь:)

ps Я получил код rmi в Интернете, он мне нужен только для справки, чтобы я мог преобразовать его в приложение CORBA.

1 Ответ

0 голосов
/ 17 декабря 2018

Вы можете попытаться расширить 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;
}

Причина, по которой все параметры и все типы, не являющиеся пустыми возвращаемыми значениями, должны быть 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;
}
...