Exposing services using HTTP invokers - Java-Springs

As opposed to Burlap and Hessian, which are both lightweight protocols using their own slim serialization mechanisms, Spring HTTP invokers use the standard Java serialization mechanism to expose services through HTTP. This has a huge advantage if your arguments and return types are complex types that cannot be serialized using the serialization mechanisms Hessian and Burlap use.

Under the hood, Spring uses either the standard facilities provided by J2SE to perform HTTP calls or Commons HttpClient. Use the latter if you need more advanced and easy-to-use functionality.

Exposing the service object

Setting up the HTTP invoker infrastructure for a service object resembles closely the way you would do the same using Hessian or Burlap. Just as Hessian support provides the Hessian Service Exporter, Spring's Http Invoker support provides the org. spring frame work. remoting.http invoker.Http Invoker Service Exporter.

To expose the Account Service (mentioned above) within a Spring Web MVC Dispatcher Servlet, the following configuration needs to be in place in the dispatcher's application context:

<bean name="/AccountService" class="org.springframework.remoting.httpinvoker. HttpInvokerServiceExporter">
<property name="service" ref=" accountService"/>
<property name="serviceInterface"value=" example.AccountService"/>
</bean>

Such an exporter definition will be exposed through the DispatcherServlet's standard mapping facilities.

Alternatively, create an HttpInvokerServiceExporter in your root application context (e.g. in 'WEB-INF/applicationContext.xml'):

<bean name="accountExporter" class="org.springframework.remoting.httpinvoker. HttpInvokerServiceExporter">
<property name="service" ref=" accountService"/>
<property name="serviceInterface" value="example.AccountService"/>
</bean>

In addition, define a corresponding servlet for this exporter in 'web.xml', with the servlet name matching the bean name of the target exporter:

<servlet>
<servlet-name>accountExporter</servlet-name>
<servlet-class>org.springframework.web.context. support.HttpRequestHandlerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>accountExporter</servlet-name>
<url-pattern>/remoting/AccountService</url-pattern>
</servlet-mapping>

If you are running outside of a servlet container and are using Sun's Java 6, then you can use the built-in HTTP server implementation. You can configure the SimpleHttp ServerFactory Bean together with a SimpleHttp InvokerService Exporter as is shown in this example:

<bean name="accountExporter"
class="org.springframework.remoting.httpinvoker .SimpleHttpInvokerServiceExporter">
<property name="service" ref=" accountService"/>
<property name="serviceInterface" value="example.AccountService"/>
</bean>
<bean id="httpServer"
class="org.springframework.remoting.support. SimpleHttpServerFactoryBean">
<property name="contexts">
<util:map>
<entry key="/remoting/AccountService" value-ref="accountExporter"/>
</util:map>
</property>
<property name="port" value="8080" />
</bean>

Linking in the service at the client
Again, linking in the service from the client much resembles the way you would do it when using Hessian or Burlap. Using a proxy, Spring will be able to translate your calls to HTTP POST requests to the URL pointing to the exported service.

<bean id="httpInvokerProxy" class=" org.springframework.remoting.httpinvoker. HttpInvokerProxyFactoryBean">
<property name="serviceUrl" value=" http://remotehost:8080/remoting/AccountService"/>
<property name="serviceInterface" value="example.AccountService"/>
</bean>

As mentioned before, you can choose what HTTP client you want to use. By default, the HttpInvokerProxy uses the J2SE HTTP functionality, but you can also use the Commons HttpClient by setting the httpInvokerRequestExecutor property:

<property name="httpInvokerRequestExecutor">
<bean class="org.springframework.remoting. httpinvoker.CommonsHttpInvokerRequestExecutor"/>
</property>

All rights reserved © 2018 Wisdom IT Services India Pvt. Ltd DMCA.com Protection Status

Java-Springs Topics