У меня есть два пакета клиент и сервер:импорта вопрос/пакет с RMI
пакет клиента содержит интерфейс "I_object":
package client;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface I_object extends Remote {
public int Add(int a,int b) throws RemoteException;
}
и класс main_client:
package client;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
/**
*
* @author marwen
*/
public class main_client {
public static void main(String [] args) throws NotBoundException, MalformedURLException, RemoteException{
I_object obj_distant=(I_object) Naming.lookup("rmi://localhost:1000/exemple");
System.out.println(obj_distant.Add(5, 9));
}
}
Пакет сервера содержит класс (impl_object), который реализует Ментов интерфейс I_object:
package server;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
/**
*
* @author marwen
*/
public class impl_object extends UnicastRemoteObject implements I_object {
public impl_object() throws RemoteException
{}
public int Add(int a,int b) throws RemoteException{
return a+b;
}
}
и, наконец, main_server:
package server;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
public class main_server {
public static void main(String [] args) throws NotBoundException, MalformedURLException, RemoteException{
impl_object obj=new impl_object();
java.rmi.registry.LocateRegistry.createRegistry(1000);
Naming.rebind("rmi://localhost:1000/exemple", obj);
System.out.println("server is running");
}
}
, если вы заметили, в реализации "impl_object", я не поставил "импорт client.I_object;" Зачем??????? в порядке, если я поставлю «import client.I_object»; для клиентского пакета, поэтому сервер будет «привязан» к клиенту !!! это проблема, когда я отделяю клиент и сервер (я кладу сервер на удаленный компьютер и клиент дома) ??? .... Может кто-нибудь объяснить мне, я не прав?
Я плохо объяснил, я перефразирую свой вопрос: что я должен переписать интерфейс «I_object» в пакете сервера, или мне нужно импортировать его из клиентского пакета? thanks ^^ –
вы можете поместить свой интерфейс и класс impl в отдельный пакет, такой как модель, а затем импортировать их оттуда, если хотите. Объект Impl - это объект, используемый как сервером, так и клиентом, поэтому он не связывает их таким образом. Это UnicastRemoteObject используется с RMI, и он не связывает их в этом смысле, а должен использоваться для использования вызовов RMI. –
Это объяснение неверно. Если на хосте есть реестр, вы можете использовать любой IP-адрес, который вам нравится связывать с ним с помощью Naming.bind(). Это не имеет ничего общего с адресами связывания сокетов сервера, что я думаю, о чем вы действительно говорите. Они управляются с помощью свойства java.rmi.server.hostname. – EJP