OSDN Git Service

i
[luz/luz.git] / luz2 / src / com / lavans / luz2 / lremote / connector / ConnectManager.java
1 /* $Id: ConnectManager.java 16 2008-12-02 09:31:01Z lavans $\r
2  * created: 2005/08/05\r
3  */\r
4 package com.lavans.luz2.lremote.connector;\r
5 \r
6 import org.apache.commons.logging.Log;\r
7 import org.apache.commons.logging.LogFactory;\r
8 import org.omg.CORBA.portable.ApplicationException;\r
9 \r
10 import com.lavans.luz2.lremote.annotation.LRemote;\r
11 import com.lavans.luz2.lremote.connector.impl.AsyncConnectWrapper;\r
12 import com.lavans.luz2.lremote.node.RemoteNodeGroup;\r
13 import com.lavans.luz2.lremote.selector.Selector;\r
14 import com.lavans.luz2.lremote.selector.SelectorFactory;\r
15 \r
16 /**\r
17  * Web-ApJコネクション管理クラス。\r
18  * httpのプロトコル上一度flushしたコネクションは再利用できない。\r
19  * 同一URLに対するアクセスは、コネクションを新規に作成しても\r
20  * 自動的にHttpKeepaliveになる。したがって本クラスでは\r
21  * コネクション数の管理は行わず、接続先のみ管理し、コネクションは\r
22  * 要求がある度に新規作成する。\r
23  *\r
24  * @author dobashi\r
25  */\r
26 public class ConnectManager {\r
27         /**\r
28          * Type of connection.\r
29          * single: Normal connection selected in group by Selector.\r
30          * group:               Connect to all of one group.\r
31          * groupAsync:  Like group, but connect async. You can't get the result. Check log file.\r
32          * groupButMe:  Like group, but if the group include my URL then pass it.\r
33          * all:                 Connect to all member of whole group.\r
34          *\r
35          * @author dobashi\r
36          *\r
37          */\r
38         public enum ConnectType {single, group, groupButMe, all};\r
39         public enum SyncType {sync, async};\r
40 \r
41         /** ロガー。debug用 */\r
42         private static Log logger = LogFactory.getLog(ConnectManager.class.getName());\r
43 \r
44         /**\r
45          * Singletonの実体。\r
46          */\r
47         private static ConnectManager instatnce = new ConnectManager();\r
48 \r
49         /**\r
50          * インスタンス取得メソッド。\r
51          * @return\r
52          */\r
53         public static ConnectManager getInstance(){\r
54                 return instatnce;\r
55         }\r
56 \r
57         /**\r
58          * コンストラクタ。\r
59          * Singletonのため呼び出し不可。\r
60          *\r
61          */\r
62         private ConnectManager(){\r
63 //              init();\r
64         }\r
65 \r
66         /**\r
67          * ApJへの接続を取得。\r
68          * @return\r
69          * @throws ApplicationException\r
70          */\r
71         public Connector getConnector(LRemote lremote) throws Exception{\r
72                 RemoteNodeGroup group = RemoteNodeGroup.getInstance(lremote.group());\r
73                 if(group==null){\r
74                         logger.error("No such group ["+ lremote.group() +"].");\r
75                         throw new Exception();\r
76                 }\r
77                 // get selector\r
78                 Selector selector = SelectorFactory.getSelector(lremote, group);\r
79                 Connector connector = selector.getConnector();\r
80 \r
81                 // check sync\r
82                 if(!lremote.sync()){\r
83                         connector = new AsyncConnectWrapper(connector);\r
84                 }\r
85 \r
86                 return connector;\r
87         }\r
88 \r
89 \r
90 }\r