/** |
* 客户端代理,用于Android调用后台EJB |
* @author feige |
* |
*/ |
public class ClientProxy { |
//服务器端响应客户请求的URL |
private static String baseResourceURL = ClientConfig.AEP_RESOURCE_URL; |
private static String brokerURL = ClientConfig.AEP_BROKER_URL; |
//private static String brokerURL = "http://192.168.2.203:8080/aep/MobileBroker"; |
|
/** |
* 调用远端EJB |
* @param remoteClass 要查找对象的接口class对象(EJB的remote接口) |
* @param beanName 要查找对象的bean名称,一般就是EJB实现类的名称,除非你用@EJB标注重新命名 |
* @param methodName 要调用的方法名称 |
* @param paras 调用所需的参数 |
* @return |
*/ |
public Object call(Class remoteClass,String beanName,String methodName,Object... paras){ |
HttpURLConnection urlConn = null ; |
try { |
URL postUrl = getRequestURL(); |
if (postUrl == null ) |
return null ; |
//创建一个链接 |
urlConn = (HttpURLConnection)postUrl.openConnection(); |
//设置是否向httpUrlConnection输出,因为我们要通过序列化对象把调用参数发送给后台,这里要设置成true; |
urlConn.setDoOutput( true ); |
// 设置是否从httpUrlConnection读入,默认情况下是true; 我们需要读入返回结果的序列化文件 |
urlConn.setDoInput( true ); |
//设置请求方式,这里设置为POST请求 |
urlConn.setRequestMethod( "POST" ); |
//设置是否使用缓存,post请求不能使用缓存 |
urlConn.setUseCaches( false ); |
//设置只作用于当前的实例 |
urlConn.setInstanceFollowRedirects( true ); |
//设定传送的内容类型是可序列化的java对象 |
urlConn.setRequestProperty( "Content-Type" , "application/x-www-form-urlencoded" ); |
urlConn.setConnectTimeout( 15 * 1000 ); |
//打开连接 |
// urlConn.connect(); |
//数据输出流,该语句隐含的执行connect动作 |
//DataOutputStream out = new DataOutputStream(urlConn.getOutputStream()); |
//将参数写入流,刷新提交关闭流 |
writeMobileDTO(urlConn,remoteClass,beanName,methodName,paras); |
Object result = getResponseObject(urlConn); |
|
return result; |
} catch (Exception e){ |
e.printStackTrace(); |
} finally { |
if (urlConn != null ) |
urlConn.disconnect(); |
} |
return null ; |
} |