以下实例在只需在客户端部署一个JAR包,JAR中包含共同接口,传送的对象类,对象解析bfo类、包含可外调用信息的配置文件及文件解析类。其中配置文件包含的调用信息包括名称、类型(bean类或静态类)、类名或者Bean名、方法名、参数个数及类型。客户端通过指定配置文件中的名称,传入参数就可以随意调用配置文件中定义好的接口。当然服务器端接收传送过来的类名或者beean名、方法名、参数类型、参数值就可以执行产生结果返回给客户端。客户端获取对象解析并自行处理。
服务器端:
对外服务接口
public interface RideService {
/**
* 多个方法调用时,如果某个方法调用出错,则继续调用其他方法.
*/
int IEC = 0;
/**
* 多个方法调用时,如果某个方法调用出错,则停止调用其他方法.
*/
int IES = 1;
/**
* 客户端远程调用的方法.
* @param service 服务
* @param params 参数
*
* @return 方法返回值
*/
Object invoke(RemoteService service, Object[] params);
/**
* 多个方法调用.
* @param services 每个元素是一个RemoteService.
* @param flag 控制标志
* @return
*/
Object invokeM(List services, int flag);
}
对外服务接口实现RideServiceImpl提供调用服务的执行,并提供返回对象。
客户端
提供给客户端接口,用于远程调用
public interface HttpService {
/**
* 客户端远程调用的方法.
* @param serviceName 服务名(方法名)
* @param params 方法的参数
* @return 方法返回值
*/
RemoteRes invoke(String serviceName, Object[] params);
/**
* 远程调用多个方法.
* @param services multi services names
* @param params each element is a Object[] parameter
* @return list
*/
public List invokeM(String[] services, Object[][] params);
}
提供给客户端接口的实现,包括解析配置文件获取调用信息及发出远程调用请求(如rideService. invokeM(serviceList, RideService.IES))
public class HttpServiceImpl implements HttpService
包含远程调用服务相关信息的配置文件
<remote-services>
<!-- admin -->
<service name="admin_getSessionData" type="0"><!-- a spring bean's method -->
<bean>applicationData</bean>
<method-name>getSession</method-name>
<param-count>1</param-count>
<param-list>
<value>java.lang.String</value>
</param-list>
</service>
<service name="admin_flushAllMenuInfo" type="2"><!-- class's static method -->
<bean>cn.ccb.ride.admin.util.context.ContextFactory</bean>
<method-name>flushAllMenuInfo</method-name>
<param-count>0</param-count>
</service>
</remote-services>
配置文件解析类RemoteServiceConfig
当然以上介绍的是最主要的类,其他接收对象类等,本文暂且不予说明。