Remoting primaverile con tela di iuta e tela

1. Panoramica

Nell'articolo precedente intitolato "Introduzione a Spring Remoting con HTTP Invokers" abbiamo visto quanto sia facile configurare un'applicazione client / server che sfrutti RMI (Remote Method Invocation) tramite Spring Remoting .

In questo articolo, mostreremo come Spring Remoting supporta l'implementazione di RMI utilizzando invece Hessian e Burlap .

2. Dipendenze di Maven

Sia Hessian che Burlap sono forniti dalla seguente libreria che dovrai includere esplicitamente nel tuo file pom.xml :

 com.caucho hessian 4.0.38 

Puoi trovare l'ultima versione su Maven Central.

3. Iuta

Hessian è un protocollo binario leggero di Caucho , i creatori del server delle applicazioni Resin . Esistono implementazioni dell'Assia per diverse piattaforme e linguaggi, incluso Java.

Nelle seguenti sottosezioni, modificheremo l'esempio di "prenotazione cab" presentato nell'articolo precedente per fare in modo che il client e il server comunichino utilizzando Hessian invece del protocollo basato su Spring Remote HTTP .

3.1. Esporre il servizio

Esponiamo il servizio configurando un RemoteExporter di tipo HessianServiceExporter , sostituendo l' HttpInvokerServiceExporter precedentemente utilizzato:

@Bean(name = "/booking") RemoteExporter bookingService() { HessianServiceExporter exporter = new HessianServiceExporter(); exporter.setService(new CabBookingServiceImpl()); exporter.setServiceInterface( CabBookingService.class ); return exporter; }

Ora possiamo avviare il server e mantenerlo attivo mentre prepariamo il client.

3.2. Applicazione client

Implementiamo il client. Anche in questo caso, le modifiche sono abbastanza semplici: dobbiamo sostituire HttpInvokerProxyFactoryBean con HessianProxyFactoryBean :

@Configuration public class HessianClient { @Bean public HessianProxyFactoryBean hessianInvoker() { HessianProxyFactoryBean invoker = new HessianProxyFactoryBean(); invoker.setServiceUrl("//localhost:8080/booking"); invoker.setServiceInterface(CabBookingService.class); return invoker; } public static void main(String[] args) throws BookingException { CabBookingService service = SpringApplication.run(HessianClient.class, args) .getBean(CabBookingService.class); out.println( service.bookRide("13 Seagate Blvd, Key Largo, FL 33037")); } }

Eseguiamo ora il client per collegarlo al server utilizzando Hessian .

4. Iuta

Burlap è un altro protocollo leggero di Caucho , basato su XML . Caucho ha smesso di mantenerlo molto tempo fa, e per questo il suo supporto è stato deprecato nelle ultime versioni di primavera, anche se è già presente.

Pertanto dovresti ragionevolmente continuare a utilizzare Burlap solo se disponi di applicazioni già distribuite e che non possono essere facilmente migrate a un'altra implementazione di Spring Remoting .

4.1. Esporre il servizio

Possiamo usare la tela da imballaggio esattamente nello stesso modo in cui abbiamo usato l' Assia : dobbiamo solo scegliere la corretta implementazione:

@Bean(name = "/booking") RemoteExporter burlapService() { BurlapServiceExporter exporter = new BurlapServiceExporter(); exporter.setService(new CabBookingServiceImpl()); exporter.setServiceInterface( CabBookingService.class ); return exporter; }

Come puoi vedere, abbiamo appena cambiato il tipo di esportatore da HessianServiceExporter a BurlapServiceExporter. Tutto il codice di configurazione può essere lasciato invariato.

Di nuovo, avviamo il server e continuiamo a farlo funzionare mentre lavoriamo sul client.

4.2. Implementazione del cliente

Allo stesso modo possiamo scambiare Hessian con Burlap sul lato client, cambiando HessianProxyFactoryBean con BurlapProxyFactoryBean :

@Bean public BurlapProxyFactoryBean burlapInvoker() { BurlapProxyFactoryBean invoker = new BurlapProxyFactoryBean(); invoker.setServiceUrl("//localhost:8080/booking"); invoker.setServiceInterface(CabBookingService.class); return invoker; }

Ora possiamo eseguire il client e vedere come si connette correttamente all'applicazione server utilizzando Burlap .

5. conclusione

Con questi rapidi esempi, abbiamo mostrato come sia facile con Spring Remoting scegliere tra diverse tecnologie per implementare l'invocazione di metodi remoti e come sia possibile sviluppare un'applicazione ignorando completamente i dettagli tecnici del protocollo utilizzato per rappresentare l'invocazione del metodo remoto.

Come al solito, troverai i sorgenti su GitHub, con client sia per Hessian che per Burlap e il test di JUnit CabBookingServiceTest.java che si occuperà di eseguire sia il server che i client.