1 /* $Id: SessionServerConnection.java 94 2008-12-18 11:07:17Z dobashi $
\r
2 * created: 2005/08/03
\r
4 package com.lavans.luz2.http.session.net;
\r
6 import java.io.BufferedInputStream;
\r
7 import java.io.BufferedOutputStream;
\r
8 import java.io.IOException;
\r
9 import java.io.ObjectInputStream;
\r
10 import java.io.ObjectOutputStream;
\r
11 import java.net.URL;
\r
12 import java.net.URLConnection;
\r
14 import org.apache.commons.logging.Log;
\r
15 import org.apache.commons.logging.LogFactory;
\r
16 import org.omg.CORBA.portable.ApplicationException;
\r
22 public class SessionServerConnection {
\r
24 private static Log logger = LogFactory.getLog(SessionServerConnection.class.getName());
\r
26 private URLConnection con = null;
\r
27 ObjectOutputStream os = null;
\r
28 ObjectInputStream is = null;
\r
29 private URL url = null;
\r
31 public SessionServerConnection(URL url) throws IOException{
\r
35 private void init(URL url) throws IOException{
\r
36 // logger.debug("create ApJConnection.");
\r
38 con = url.openConnection();
\r
39 con.setRequestProperty("Connection", "Keep-Alive");
\r
40 con.setDoOutput(true);
\r
45 * APへ問い合わせをかけて応答オブジェクトをもらう。
\r
46 * AP側でキャッチした例外はApplicationExceptionとして帰ってくるので
\r
47 * 応答オブジェクトがApplicationExceptionだった場合はそのままthrowする。
\r
48 * APとの接続エラーの場合は1度だけ再接続を試みる。それ以外のエラーはここで
\r
49 * ApplicationExceptionにくるんでActionへ伝える。
\r
51 * 「余力不足で注文受付不可」などのエラーはExceptionではなく
\r
52 * 戻りオブジェクトの中のパラメータに入っている。
\r
59 * @throws ApplicationException
\r
61 public Object execute(String className, String methodName,
\r
62 Class<?>[] paramTypes, Object[] args) throws Exception{
\r
63 String[] shortNames = className.split("\\.");
\r
64 String shortName = shortNames[shortNames.length - 1];
\r
65 logger.debug("session execute "+ url.toString() +"/"+ shortName +"#"+methodName +"()");
\r
66 Object result = null;
\r
68 os = new ObjectOutputStream(
\r
69 new BufferedOutputStream(con.getOutputStream()));
\r
71 os.writeObject(className);
\r
73 os.writeObject(methodName);
\r
75 os.writeObject(paramTypes);
\r
77 os.writeObject(args);
\r
81 is = new ObjectInputStream(
\r
82 new BufferedInputStream(con.getInputStream()));
\r
83 result = is.readObject();
\r
85 // 受け取ったものが例外だったら(APで例外が起きた場合)
\r
86 if(result instanceof Exception){
\r
87 // エラーメッセージが入っているのでそのままスローする。
\r
88 throw (Exception)result;
\r
91 try { os.close(); } catch (Exception e) { logger.warn(null, e); }
\r
92 try { is.close(); } catch (Exception e) { logger.warn(null, e); }
\r
100 * @return url を戻します。
\r
102 public URL getUrl() {
\r