Hessian a vzdialené volanie procedúr

2007/11/14

Úvod

Caucho Hessian je protokol použiteľný na vzdialené volanie procedúr alebo na implementáciu myšlienky webových služieb. Samotný protokol je binárny a ako transportná vrstva je použitý klasické HTTP.

Paralelne s Hessian-om jestvuje spriatelený protokol Burlap, ktorý namiesto binárnej reprezentácie prenášaných dát používa XML.

Hessian umožňuje zverejniť na vzdialené volanie procedúr ľubovoľný interfejs, za ktorým stojí vhodná implementačná trieda.

Vzťah s podobnými technológiami

Hessian vs RMI

Hessian vs SOAP

Hessian vs Spring HTTP Invoker

Jednoduchý príklad

Server

Vytvorme si interfejs pre službu poskytujúcu aktuálny čas na serveri.

public interface DateService {
    Date getCurrentDate();
}

a vytvorme jeho implementáciu

public class DateServiceImpl implements DateService {
 
  public Date getCurrentDate() {
    return new Date();
  }
  
}

Ako sme spomenuli, Hessian beží nad protokolom HTTP, presnejšie povedané využíva technológiu servletov. Na tento účel je k dispozícii špeciálny HTTP servlet com.caucho.hessian.server.HessianServlet, ktorému poskytneme dva parametre:

Vytvoríme inštanciu HessianServletu a nakonfigurujeme ju nasledovne:

HessianServlet hessianServlet = new HessianServlet();
hessianServlet.setHomeAPI(DateService.class);
hessianServlet.setHome(new DateServiceImpl());

Následne naštartujeme a nakonfigurujeme Jetty.

Server server = new Server(8080);
Context context = new Context(server, "/", Context.SESSIONS);
context.addServlet(new ServletHolder(hessianServlet), "/*");
        
server.start();
server.join();

Server predstavuje hlavnú triedu servera, do ktorej pridáme webový kontext namapovaný na koreňovú adresu (/). Do tohto kontextu pridáme jeden už nakonfigurovaný servlet (inštanciu HessianServletu obaľuje ServletHolder) a namapujeme ju na ľubovoľnú adresu pod webovým kontextom.

Následne server naštartujeme.

Klient

Klient je o niečo jednoduchší než server. Centrom je továreň HessianProxyFactory, ktorú požiadame o vytvorenie inštancie triedy implementujúcej DateService. Táto inštancia skrytá za interfejsom bude riešiť všetku špinavú prácu (pripojenie k serveru, serializácia a deserializácia dát a pod.)

Továrni stačí odovzdať URL adresu, na ktorej beží serverovská časť.

String url = "http://localhost:8080/";
	
HessianProxyFactory factory = new HessianProxyFactory();
DateService dateService = (DateService) factory.create(DateService.class, url);

Objekt dateService je takto pripravený a môžeme na ňom pohodlne volať metódy.

System.out.println(dateService.getCurrentDate());

Všimnime si, že pracujeme so samotným interfejsom, ktorý stiera rozdiely medzi tým, či pracujeme na lokálnej alebo vzdialenej inštancii triedy DateServiceImpl.

Aké triedy je možné posielať po kábli?

Hessian podporuje všetky základné dátové typy a objekty, ktoré sú serializovateľné a majú viditeľný prázdny konštruktor. Triedy určené na posielanie nie je potrebné nijak špeciálne konfigurovať ani upravovať.

>> Home