Quali sono i pro e i contro dell'utilizzo di RMI o JMS tra il livello Web e quello aziendale?
Domanda
Per una tipica app Web client-to-Servlet/WS-to-Business Tier (Spring o EJB), quali sono i compromessi tra approcci come RPC remoto o messaggistica per il livello Web (Servlet) e il livello Business remoto, a parte il vantaggio? aspetti di sincronizzazione/asincrono di base?
Soluzione
Per client web intendi browser web?Se è così, i miei consigli sono quelli come DWR o JAX-RS.RMI o JMS funzionano davvero solo quando entrambi i lati sono codice Java.
Con qualsiasi tecnologia remota, il problema più grande nel loro utilizzo tende a essere quanto invadente diventa la tecnologia sui tuoi oggetti aziendali.per esempio.utilizzando l'interfaccia/eccezioni RMI ovunque o utilizzando le API JMS all'interno del codice aziendale.
La mia raccomandazione è di utilizzare POJO ovunque in Java, quindi utilizzare una tecnologia simile Remotazione primaverile per sovrapporre il tuo middleware sia che si tratti di RMI o JMS o altro, ma disaccoppia totalmente il codice middleware dalla tua logica aziendale in modo da poter passare da una tecnologia all'altra in qualsiasi momento (e mantenere il codice della logica aziendale più semplice e concentrato sul tuo problema aziendale).
Vedi ad esempio il Implementazione Camel di Spring Remoting che quindi ti consente di utilizzare uno qualsiasi di questi trasporti e protocolli come RMI, JMS o anche semplice HTTP, e-mail, file o XMPP, quindi passa da uno all'altro banalmente utilizzando una semplice modifica della stringa URI.
Altri suggerimenti
Usiamo RMI tramite Spring e lo troviamo molto facile da usare, abbastanza robusto e veloce.Sebbene i nostri requisiti riguardassero un collegamento abbastanza reattivo e non vi fosse alcuna reale necessità di aggiungere un componente di messaggistica.
SUN RMI si è rotto per noi.
Le impostazioni e la garbage collection per un'applicazione a esecuzione molto prolungata con messaggistica continua.Stiamo apportando patch per farlo funzionare continuamente.Le applicazioni JMS che eseguiamo non rilevano gli errori di memoria insufficiente o i problemi gc riscontrati da RMI.Tutto ciò che deve chiamare System.gc() periodicamente e non funziona con la raccolta incrementale per recuperare le risorse è codificato in modo errato.
L'affidabilità dell'RMI migliora con JDK 6 e le corrette impostazioni delle proprietà, ma JHC è un framework complicato.L'RMI verrebbe notevolmente migliorato utilizzando i canali in nio e risolvendo gli usi di sun nio di system.gc().
La risposta corretta: comunicazione (meccanismo) separata dal codice del dominio.RPC è strettamente associato e il protocollo e l'applicazione possono interferire tra loro.JMS separa il protocollo dall'applicazione, un paradigma molto migliore.