Domanda

Salve a tutti, al momento sto intraprendendo un progetto che prevede un ampio uso di Java RMI e mi chiedevo se qualcuno fosse a conoscenza di buone risorse al riguardo.

Il problema che sto riscontrando con il materiale che sto trovando attualmente è che di solito è piuttosto obsoleto (come Java 1.3) e / o mezzo completo. Sarei anche felice di acquistare un libro su di esso, ma guardando su Amazon tutti i libri hanno 7 anni.

Quindi, se qualcuno è a conoscenza di buone risorse, libri o buone implementazioni di esempio, sarei molto interessato a sentirli. Grazie in anticipo per il tuo aiuto.

È stato utile?

Soluzione

RMI Hello World sembra carino per cominciare. Ovviamente è ancora un semplice esempio, quindi forse suggerimenti su prestazioni / scalabilità RMI saranno utili poiché hai già familiarità con RMI.

Altri suggerimenti

Java.RMI è cambiato molto poco nel corso degli anni, quindi è ancora possibile fare riferimento alla maggior parte della vecchia documentazione. Si noti che una modifica significativa è la necessità di compilare gli stub RMI se si utilizza una versione di Java 5.0. Molte persone si sono allontanate da RMI e hanno abbracciato River (precedentemente chiamato Jini) per sistemi distribuiti.

Se stai ancora pensando di andare avanti con RMI, suggerirei di leggere la documentazione di Oracle o pubblicare le tue domande su i loro forum .

Per quanto riguarda i libri & # 8230; Java RMI di William Grosso o Java Network Programming di Elliotte Harold.

RMI non è cambiato molto. Penso che i libri dell'era 1.3 andranno bene.

Grazie a tutti per le vostre risposte, penso che ciò che la gente ha detto sul fatto che RMI non sia cambiato molto sia corretto, tuttavia i tutorial potrebbero essere ancora un po 'migliori, oltrepassano alcuni punti importanti.

Alla fine il miglior libro di gran lunga che ho trovato, che copre alcuni dei pezzi davvero buoni di RMI come Activation era Programmazione della rete Java e calcolo distribuito .

Ho guardato l'altro O'reilly Java RMI libro e, a mio avviso, non è affatto buono, per qualcosa di più grande del più piccolo dei progetti RMI.

Se hai intenzione di fare un uso intensivo di RMI, suggerirei di dare un'occhiata a Spring Remoting . Aiuta molto nell'astrarre il protocollo di remoting, ti aiuta a cambiare l'implementazione di remoting in seguito se necessario (ad esempio passare a Hessian o SOAP).

Una cosa da tenere a mente se si utilizza RMI o qualsiasi altro protocollo di oggetto remoto, è che è possibile generare molto traffico chiamando metodi su oggetti remoti. Nel tuo codice potrebbe non essere ovvio che quegli oggetti siano remoti. Potrebbe generare problemi di prestazioni.

Se puoi, ti consiglierei di avere un'architettura più o meno orientata ai servizi, in cui chiami i servizi remoti per ottenere l'oggetto dati, ma non avere un comportamento eccessivo su quegli oggetti ...

Hai provato Sun't tutorial RMI ? I tutorial di Sun sono tutti molto validi e di solito sono il primo posto in cui inizio per imparare qualcosa su Java.

Un libro che abbiamo usato a scuola con un buon esempio di codice è Manuale dello sviluppatore J2EE . Ricorda che questo è un enorme libro di consultazione di circa 1500 pagine con un solo capitolo (circa 50 pagine) su RMI.

Il libro O'Reilly RMI è abbastanza buono. Provaci.

Assolutamente prezioso articolo su RMI multi homed ( host con più IP) Spiega l'RMI in un modo molto semplice da comprendere e affronta i problemi dei registri di hosting su macchine con più di un singolo indirizzo IP e come anche gli IP privati ??possono essere gestiti. Mi ha salvato la pancetta.

Oltre a quelli già menzionati, l'articolo Informazioni su Java RMI Internals era un discreto IMHO, andando un po 'attraverso gli interni.

Ecco un altro buon esempio di invocazione di metodo remoto con il framework Redisson:

Supponiamo che YourServiceImpl contenga il metodo necessario per richiamare in remoto e implementa l'interfaccia YourService .

YourServiceImpl deve essere registrato in Redisson tramite l'oggetto RemoteService:

YourService yourService = new YourServiceImpl();

RRemoteService remoteService = redisson.getRemoteService();
remoteService.register(YourService.class, yourService);

Per richiamare il metodo in remoto è necessaria solo l'interfaccia di servizio:

RRemoteService remoteService = redisson.getRemoteService();
YourService service = remoteService.get(YourService.class);

MyObject result = service.myMethod(someParam1, someParam2);

Supporta anche le chiamate asincrone.

// async interface for YourService
@RRemoteAsync(YourService.class)
public interface YourServiceAsync {

    RFuture<Long> someMethod1(Long param1, String param2);

    RFuture<Void> someMethod2(MyObject param);

}

RRemoteService remoteService = redisson.getRemoteService();
YourServiceAsync asyncService = remoteService.get(YourServiceAsync.class);

RFuture<Long> res = asyncService.someMethod1(12L, "param");
res.thenApply(r -> {
 ...
});

Maggiori dettagli qui

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top