Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Dubbio su RMI

    Ciao a tutti,
    ho un dubbio sull'invocazione remota di un metodo RMI.
    Mettiamo questo scenario. Creo la mia interfaccia remota (che poi esporto con lo stub) e subito dopo creo due classi che implementano la mia interfaccia.

    Se il client RMI invoca un metodo di questa interfaccia, quale delle due viene eseguita?

    Esempio pratico:

    codice:
    public interface ServiceInterface extends Remote {
    
        public static void mioMetodo() throws RemoteException;
    
    }
    
    public class PrimaServiceInterfaceImpl extends UnicastRemoteObject implements ServiceInterface {
    
        public static void mioMetodo() throws RemoteException {
             System.out.println("Ho invocato la prima classe impl!");
        }
    
    }
    
    
    public class SecondaServiceInterfaceImpl extends UnicastRemoteObject implements ServiceInterface {
    
        public static void mioMetodo() throws RemoteException {
             System.out.println("Ho invocato la seconda classe impl!");
        }
    
    }
    
    
    ... invocazione del client:
    
    ServiceInterface servizio = (ServiceInterface)(getRmiRegistry().lookup("mioServizio");
    servizio.mioMetodo();
    Cosa stampa e perché?
    "Na' sedia te vojo tirà!"

  2. #2
    Utente di HTML.it L'avatar di r1cky`
    Registrato dal
    Feb 2007
    Messaggi
    431
    Dipende da quale oggetto esporti!
    Posta il codice di come fai l'exportObject

  3. #3
    Scusa l'ignoranza, che intendi per exportObject?
    Io mi porto dietro il jar del .class dell'interfaccia. Sbaglio?
    "Na' sedia te vojo tirà!"

  4. #4
    Utente di HTML.it L'avatar di r1cky`
    Registrato dal
    Feb 2007
    Messaggi
    431
    Originariamente inviato da Brazonet
    Scusa l'ignoranza, che intendi per exportObject?
    Io mi porto dietro il jar del .class dell'interfaccia. Sbaglio?
    No beh il chiaramente server e client devono avere le stesse interfacce quindi è giusto.

    Quello che ti chiedo è: sul server devi dire quale oggetto vuoi bindare a un certo nome (ovvero quale oggetto deve ritornarti quando fai la lookup di "mioServizio"). L'oggetto che esporti è nel tuo caso, un'instanza di PrimaServiceInterfaceImpl o SecondaServiceInterfaceImpl. Dipende da cosa hai fatto tu

  5. #5
    Azz... hai perfettamente ragione!
    Non mi ricordavo infatti che è proprio durante il bind che si decide l'implementazione.

    Grazie mille!
    "Na' sedia te vojo tirà!"

  6. #6
    Anche io avrei un dubbio sulle RMI (esposto qua, http://forum.html.it/forum/showthrea...readid=1514685 è un po' più complicato e non ho ricevuto risposte ma cercherò di riassumere una delle cose che non riesco a capire dell'RMI) e magari potete darmi una mano:
    nell'operazione di "bind" devo indicare tra gli argomenti dell'invocazione "a name in URL format".. sarebbe possibile allocare direttamente da un Server principale un oggetto su un determinato indirizzo (naturalmente diverso da quello del Server principale)? Con il lookup dal client dovrei ottenerlo dall'indirizzo a cui è stato allocato?

    Non volevo intromettermi ma penso sia abbastanza affine!!

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,474
    Originariamente inviato da GHoldenBoy
    Non volevo intromettermi ma penso sia abbastanza affine!!
    Non volevi, ma in ogni caso ti sei intromesso.

    Hai già una discussione attiva sull'argomento, pertanto continua quella.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  8. #8
    Non ho capito bene il tuo problema, comunque puoi bindare il tuo servizio anche con un nome a tuo piacere sulla porta che decidi tu, l'importante che te lo ricordi lato client.

    Esempio:

    codice:
    // Lato server:
    Registry registry = LocateRegistry.createRegistry(Integer.parseInt(tuaPorta));
    registry.bind("mioServizio", new mioOggetto()); 
    
    // Lato client:
    mioOggettoInterface obj = (mioOggettoInterface)(getRmiRegistry().lookup("mioServizio"));
    "Na' sedia te vojo tirà!"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.