Domanda

Sono nuovo sia di Servizi Web e RMI e mi chiedo quale è il modo migliore per fare remoting tra diverse applicazioni web, quando queste applicazioni sono tutti scritti in Java, che è quando diversi linguaggi di programmazione, non importa (che sarebbe il vantaggio di ROVESCIO).

Mentre da un lato direi che c'è una riduzione delle prestazioni quando si utilizzano i servizi web (qualcuno ha un po ' di numeri per dimostrare che?), d'altra parte mi sembra che i servizi web sono molto più debolmente accoppiati e può essere utilizzato per implementare un servizio in più-oriented architecture (SOA) (che non è possibile con RMI, giusto?).

Anche se questo è piuttosto una domanda di carattere generale, qual è il vostro parere?

Grazie

È stato utile?

Soluzione

I servizi web consentono un loosely coupled architettura.Con RMI, è necessario assicurarsi che le definizioni di classe rimanere sincronizzato in tutte le istanze dell'applicazione, il che significa che è sempre necessario distribuire tutti loro, allo stesso tempo, anche se solo uno di loro è cambiato (non necessariamente, ma è necessario molto spesso a causa di un Uuid seriale e quant'altro)

Inoltre non è molto scalabile, che potrebbe essere un problema se si desidera disporre di sistemi di bilanciamento del carico.

Nella mia mente RMI funziona meglio per i più piccoli, le applicazioni locali, che non sono connessi a internet, ma ancora bisogno di essere disaccoppiati.Ho usato per avere un applicazione java che gestisce le comunicazioni elettroniche ed ero abbastanza soddisfatto dei risultati.Per altre applicazioni che richiedono una distribuzione più complessi e di lavoro su internet, io invece l'uso di servizi web.

Altri suggerimenti

Se si utilizzano i Servizi Web o un più "nativo" approccio dipende dall'ambiente.Se si deve passare attraverso un proxy o qualche firewall aziendale(s), i Servizi Web sono più propensi a lavorare dal affidarsi solo HTTP.RMI è necessario aprire un'altra porta per la vostra applicazione, che può essere difficile (non tecnicamente, anche se in alcuni ambienti...

Se si sa che questo problema non è un problema, si dovrebbe considerare l'utilizzo di RMI.SOA non dipende dalla tecnologia, quanto di un buon servizio di progettazione.Se si dispone di un EJB container, è possibile chiamare i session bean via RMI e inoltre li espongono come servizi web, se si ha realmente bisogno, a proposito.

Il rendimento dipende dai dati che hai intenzione di cambio.Se si desidera inviare un oggetto complesso reti da un'applicazione a un'altra, è probabilmente più veloce con RMI, poiché è trasferito in un formato binario (di solito).Se avete qualche tipo di testo/XML contenuto comunque, web services possono essere equivalenti o anche più veloce, perché allora non avrebbe bisogno di convertire nulla (per la comunicazione).

HTH,
Martin

Una cosa che favorisce WS su RMI è che WS funziona sulla porta HTTP 80/443 che normalmente non sono bloccati a livello di firewall , in grado di lavorare dietro NAT etc.RMI è molto complesso protocollo di rete sottostante, che richiede di aprire RMI porte, e potrebbe anche non funzionare se il client è NATTED.In secondo luogo, con RMI si stanno limitando la vostra slef per JAVA-JAVA comunicazione, mentre con Webservies non esiste tale limitazione.È molto più facile per eseguire il debug di Webservices sopra il filo come i dati SOAP/HTTP , che possono essere facilmente catturati tramite sniffing strumenti per il debug.Non so di un modo semplice per fare questo oltre RMI.Oltre a RMI è davvero molto vecchio e non ha ricevuto molta attenzione per gli ultimi anni.E ' stato grande, nei giorni passati, quando CORBA era grande , e sia CORBA, RMI sono davvero antiquato tecnologie.L'opzione migliore è il RIPOSO stile Webservices.

La mia esperienza con RMI e Servizi Web specchi vostre ipotesi di cui sopra.In generale, RMI prestazioni di gran lunga supera i servizi web, ma l'interfaccia specifica è dichiarato in modo esplicito per i Servizi Web.

Si noti che nessuno di questi protocolli richiede che le applicazioni su entrambi i lati Java.Tenderei ad utilizzare i Servizi Web quando ho avuto uno o più partner esterni che sono state implementando l'interfaccia, ma RMI se fossi in controllo di entrambe le estremità della connessione.

RMI può essere la migliore direzione, se è necessario mantenere complesso stato.

@Martin Klinke

"La performance dipende dai dati che hai intenzione di cambio.Se si desidera inviare un oggetto complesso reti da un'applicazione a un'altra, è probabilmente più veloce con RMI, poiché è trasferito in un formato binario (di solito).Se avete qualche tipo di testo/XML contenuto comunque, web services possono essere equivalenti o anche più veloce, perché allora non avrebbe bisogno di convertire nulla (per la comunicazione)."

Per quanto ne so io il problema di prestazioni fa la differenza durante la serializzazione-deserializzazione in altre parole marshalling-demarshalling processo.Io non sono sicuro di entrambe queste condizioni sono le stesse btw In programmazione distribuita,io non sto parlando di un processo che avviene nella stessa JVM,è su come copiare i dati.Si passa da un valore o di un passaggio per riferimento.Formato binario corrisponde per passare dal valore che indica che la copia di un oggetto a un server remoto in file binari.Se avete qualche dubbio, fino ad ora mi piacerebbe sentire

qual è la differenza tra l'invio in formato binario e testuale/xml contenuti in termini di marshalling-demarshalling o la serializzazione-deserializzazione?

Io sono solo guessin.Non dipendono dal tipo di dati che si inviano.Qualunque sia il tipo di dati da inviare sarà parte di marshalling-demarshalling processo e alla fine verrà inviato in formato binario giusto?

cheers Hakki

Che dire di Primavera Remoting.Esso combina RESTO-come il protocollo HTTP con il formato binario di RMI.Funziona perfettamente per me.

Come una Molla bigotto e un esponente della SOA, per molti anni, vorrei consigliare di Primavera remoting.Questo sapore di servizio esportatore farà il trucco per il RMI.

org.springframework.remoting.rmi.RmiServiceExporter

Altri trasporti sono naturalmente disponibili.La messa in serie cosa è abbastanza gestibile se è la versione interfacce (end-point) e DTOs sensibilmente e gestione di messa in serie Uuid correttamente.Abbiamo postfix 'Alfa', 'Bravo' per le nostre interfacce e oggetti e di incremento, decremento & reinventare dove e quando necessario.Abbiamo anche fissare la nostra messa in serie Uuid per 1 e per garantire che le modifiche sono solo addative, altrimenti ci si sposta da dire 'Bravo' a 'Charlie'.Tutto gestibile in un'Impresa di installazione.

Per la Primavera Remoting (ho indovinato intendi HTTP Invoker), sia lato deve utilizzare la Primavera, se è il caso può essere discusso.

Per Java per applicazioni Java RMI è una buona solutionö, JAX-RPC o JAX-WS per Java-to-Java la comunicazione dovrebbe essere evitato se i clienti non sono sotto il tuo controllo o potrebbe passare a un'altra piattaforma.

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