The Hessian binary web service protocol can provide a messaging service layered on top of its RPC call. The messaging service itself is based on the standard Hessian RPC call, so Hessian itself has no need to become more complicated.
Each hop the message takes uses a simple send method to the next server in line. The receiving service might be the final destination or it might choose to send the message to another server, making another hop. This architecture is essentially the same as the standard SMTP mail architecture. SMTP is custom protocol for each hop while RFC-822 specifies the meaning of the mail headers.
We'll just be discussing the hop protocol, i.e. the SMTP replacement. Any definition of the end-to-end headers and routing would be built on top of the basic Hessian messaging.
This discussion shows that Hessian's RPC mechanism is sufficient for handling messaging, without introducing any extra complications to the Hessian protocol itself. By choosing a layered protocol model, each protocol layer can be simple independent of the others.
The message service sends a message from the client to the server. When you strip away all other complications, that's all messaging does.
The message service method is simple. It consists of a single method send with two arguments: headers and message. headers contain message routing information. message contains the message itself.
The simplest messaging service receives text message to a URL. With that messaging service, only the message object is used and the headers are ignored. Many applications only need the most basic messaging protocol. Until the application needs messages to be forwarded and to have many middle servers, the simple use case is sufficient.
The message service URL is the message destination. This example might use. Since this sample service ignores the headers, there's no forwarding of the message.
The Hessian packet does not need to contain the URL, since that's specified in the containing enveloper. For example, when using Hessian with HTTP, the HTTP request will specify the URL of the Hessian service.
An application can use any Java client which can send Hessian to the message service. The standard HessianProxyFactory could be used.
Calling the messaging service from Java uses HessianProxyFactory to create a client proxy. Once the client is available, the application can just start sending messages.
Since Hessian is language-independent, any scripting languages with a Hessian implementation can send to a messaging service. For example, the Python Hessian library allows Python to send a message to a Hessian message service.
Resin-Enterprise uses the Hessian MessageSender as a JMS (Java Message Service) protocol. So applications can use EJB MessageBeans to implement a message service.
The EJB deployment descriptor and the EJB server configuration are implemented in the usual way. In this case, the bean name would be.
Routing parameters are contained in the headers map. For example, Java's messaging service (JMS) defines a number of routing headers. These headers could be used for more sophisticated mail routing than point to point.
Defining the routing headers is beyond the aim of this page. The important point to note is that the routing protocol is built on top of the Hessian messaging service which is built on Hessian. Hessian itself does not need to be complicated with the routing headers.
In some sense, this protocol is too simple. That's the point. By designing the messaging protocol as a layered system, each layer can be simple. So a simple messaging service will be easy, and complicated messaging routing services are still possible.