There are numerous ways of invoking remote methods in java like RMI, Using Webservices, EJB etc. Following is an an example of invoking remote methods using spring http invoker.You need basic understanding of how spring works to get into this article.
Server Side: Server side code can be deployed on any application server.
Configuration:
Let us consider an example where we want to invoke the methods of the class “ProvisioningServiceImpl” remotely
httpinvoker-servlet.xml :
<bean id=”provisioningService”
class=”com.ravisha.spring.remote.httpinvoker.ProvisioningServiceImpl” />
<bean name=”/provisioningService”
class=”org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter”>
<property name=”service” ref=”provisioningService” />
<property name=”serviceInterface” value=”com.ravisha.spring.remote.httpinvoker.ProvisioningService”/>
</bean>
Web.xml:
<servlet-name>httpinvoker</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
Client Side: You can have any stand alone java code for the same.
Configuration:
beans.xml:
<bean id=”provisioningService” class=”org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean”>
<property name=”serviceUrl” value=”http://localhost:8081/SpringRemoteServer4.0.3/provisioningService”/>
<property name=”serviceInterface” value=”com.ravisha.spring.remote.httpinvoker.ProvisioningService”/>
<property name=”httpInvokerRequestExecutor”>
<bean class=”org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor” />
</property>
</bean>
Code:
ApplicationContext context = new ClassPathXmlApplicationContext(“beans.xml”);
ProvisioningService provisioningService = (ProvisioningService)context.getBean(“provisioningService”);
String status = provisioningService.provisioin(“account1″);
For adding Authenication you need to add the following
Web.xml: Add the following Filters
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
httppinvoker-servlet.xml
<security:http authentication-manager-ref=”authenticationManager”>
<security:http-basic/>
<security:csrf disabled=”true”/>
<security:intercept-url pattern=”/provisioningService” access=”hasRole(‘ROLE_USER’) “/>
</security:http>
<security:authentication-manager alias=”authenticationManager”>
<security:authentication-provider>
<security:user-service id=”uds”>
<security:user name=”test” password=”test”
authorities=”ROLE_USER” />
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
Client Side Bean:
<bean id=”provisioningService” class=”org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean”>
<property name=”serviceUrl” value=”http://localhost:8081/SpringRemoteServer4.0.3/provisioningService”/>
<property name=”serviceInterface” value=”com.ravisha.spring.remote.httpinvoker.ProvisioningService”/>
<property name=”httpInvokerRequestExecutor”>
<bean class=”org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor” />
</property>
</bean>
Apart from the above you need the respective jars.