How to use the SimpleHttpInvokerServiceExporter

The JRE 1.6 ships with small HTTP-Server implementation. The Javadocs can be found here.

Spring has provides many different ways of configuring remote access to beans (aka spring remoting), but the remoting documentation fails when it comes to the usage of the HTTP Service exporter that works with the new JRE 1.6 HttpServer.

So here is a small example on how wire up the embedded JDK HttpServer and spring remoting.

First we need some service that we would like to expose as a remote service. For this short example I am using an very simple „EchoService“ as follows:

The interface:

and some implementation:

As you can see in the implementation, I am using annotation based configuration in this example.

That is pretty much all implementation I need to provide the services. Now I have to setup the HttpServer and configure the service exporting. The HttpServer implementation provided by the JRE uses factory methods for the setup. It is a pain to configure beans using factory-methods in the spring xml, and that’s why we usually create a FactoryBean to wrap up the ugly initialization of a bean. Fortunately we do not have to do this ourselves, the Springframework already provides (since version 2.5.1) such a factory bean.

So here is the context xml configuration file I am using to start the server and to export the services:

As you can see I also added the xml snippet required for the clients that will be using the remoted service. The qualifier will help me to get the remoted instance and not the local one, hence both instances are kept in my application context in this sample. A simple testcase would look this way:

The first test method echoTestUsingConfiguredClient does use the bean in the spring context (autowired, using the qualifier to get the right instance), the second method echoTestManually creates a proxy bean manually.

Both of them use the remoted proxy and not the local service implementation during the test.

I used maven to setup the eclipse project and to manage my project dependencies.
The project can be downloaded here.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.