проблема импорта / пакета с RMI - PullRequest
0 голосов
/ 22 января 2012

У меня есть два пакета клиент и сервер:

enter image description here

пакет клиента содержит интерфейс "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;
}

}

и, наконец, главный_сервер:

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" я не поместил "import client.I_object;"Зачем???????хорошо, точно, если я поставлю "import client.I_object;"к клиентскому пакету, поэтому сервер будет «связан» с клиентом !!!вот в чем проблема, когда я разделяю клиента и сервер (ставлю сервер на удаленный компьютер и клиента дома) ??? .... Может кто-нибудь объяснить мне, я не прав?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2012

Я поставил "import client.I_object;"к клиентскому пакету, поэтому сервер будет «связан» с клиентом

Слово «связанный» не имеет смысла в Java.Если вас беспокоит утечка классов, вы можете поместить удаленный интерфейс и любые объекты приложения, от которых он зависит, в третий пакет, общий для сервера и клиента.

0 голосов
/ 22 января 2012

Отредактированный ответ:

Вы можете добавить свой интерфейс и класс impl в отдельный пакет, например model, а затем импортировать их из этого пакета, если хотите. Объект Impl - это объект, используемый как сервером, так и клиентом, он не связывает их таким образом (только клиент). Это UnicastRemoteObject для использования с JRMP, и они оба должны знать об этом объекте.

...