Hessian Add Example
From Resin 4.0 Wiki
(Created page with "=Hessian Addition= <p>The addition example creates a Hessian web services with a servlet and uses that web service from a JSP client and a Python client.</p> <p>Hessia...")
Latest revision as of 00:00, 15 June 2012
Contents |
Hessian Addition
The addition example creates a Hessian web services with a servlet and uses that web service from a JSP client and a Python client.
Hessian is a lightweight binary RPC protocol. Transferring binary objects like files, images, or mp3s can avoid the protocol overhead that XML-based protocols require. Since it's simple, its performance should be usable for almost all sites. Hessian is designed to be self-describing, eliminating the requirement for external IDLs or WSDL files. Because it is as small as possible and language-independent, non-Java Hessian implementations are can easily develop comprehensive test suites.
This tutorial only requires the open source Java implementation of the Hessian client and server. It can be downloaded from http://www.caucho.com/hessian/ for non-Resin clients and servers.
Because Resin's EJB implementation uses Hessian as its primary remote procedure call protocol, EJB developers can easily expose services to clients from other languages.
Because EJB clients and servers are written without knowledge of the underlying protocol, even if you intend to deploy with another protocol, like RMI/IIOP, you can develop using Resin's Hessian.
The [doc|hessian-1.0-spec.xtp Hessian 1.0 spec] and [doc|hessian-2.0-spec.xtp Hessian 2.0 spec] describe the full Hessian protocol.
Files in this tutorial
File | Description |
---|---|
WEB-INF/classes/example/MathService.java
| Interface for the math service. |
WEB-INF/classes/example/HessianMathService.java
| The main service implementation. |
WEB-INF/web.xml
| Configures the environment |
demo.jsp
| Client JSP |
The Hessian Protocol
A Hessian call is just an HTTP POST to a URL. The arguments are serialized into the Hessian binary format and passed to the server.
Most applications will never need to look at the Hessian protocol, but it's simple enough that a basic example can help show what's happening underneath the API.
Hessian call
c x01 x00 m x00 x03 add I x00 x00 x00 x02 I x00 x00 x00 x03 z
Hessian reply
r x01 x00 I x00 x00 x00 x05 z
The call does not need to specify the service name because the service is uniquely specified by the URL.
The following Addition example shows how to create a basic server so you can test Hessian.
A Hessian Example
Using Hessian generally uses three components:
- A remote interface
- The server implementation
- The client (JSP or servlet)
The remote interface is used by the Hessian proxy factory to create a proxy stub implementing the service's interface.
Service Implementation
Resin's Hessian provides a simple way of creating a server. Just extend
HessianServlet
with your remote methods. The Hessian call will just
be a POST to that servlet. HessianServlet will introspect the
service and expose the methods.
HessianMathService.java
package example; import com.caucho.hessian.server.HessianServlet; public class HessianMathService extends HessianServlet { public int add(int a, int b) { return a + b; } }
Remote Interface
The Java interface describes the remote API. This example has an addition method, add().
Resin's proxy client implementation uses the remote interface to expose the API to the proxy stub. Strictly speaking, though, the Java remote interface is not required for Hessian. A non-Java client will not use the Java interface, except possibly as documentation.
MathService.java
package example; public interface MathService { public int add(int a, int b); }
Java Client
RPC clients follow the following steps in using a remote object:
- Determine the URL of the remote object.
- Obtain a proxy stub from a proxy factory.
- Call methods on the proxy stub.
client.jsp
<%@ page import="com.caucho.hessian.client.HessianProxyFactory" %> <%@ page import="example.MathService" %> <% HessianProxyFactory factory = new HessianProxyFactory(); // http://localhost:8080/resin-doc/protocols/tutorial/hessian-add/hessian/math String url = ("http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/hessian/math"); MathService math = (MathService) factory.create(MathService.class, url); out.println("3 + 2 = " + math.add(3, 2)); %>
results
3 + 2 = 5
Python Client
The Hessian site has a basic Python library for Hessian.
client.py
from hessianlib import Hessian site = "http://localhost:8080/resin-doc/protocols/tutorial/hessian-add" url = site + "/hessian/math" proxy = Hessian(url); print "3 + 2 =", proxy.add(2, 3)
results
3 + 2 = 5