1 /* $Id: ConnectManager.java 16 2008-12-02 09:31:01Z lavans $
\r
2 * created: 2005/08/05
\r
4 package com.lavans.luz2.lremote.connector;
\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
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
17 * Web-ApJコネクション管理クラス。
\r
18 * httpのプロトコル上一度flushしたコネクションは再利用できない。
\r
19 * 同一URLに対するアクセスは、コネクションを新規に作成しても
\r
20 * 自動的にHttpKeepaliveになる。したがって本クラスでは
\r
21 * コネクション数の管理は行わず、接続先のみ管理し、コネクションは
\r
26 public class ConnectManager {
\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
38 public enum ConnectType {single, group, groupButMe, all};
\r
39 public enum SyncType {sync, async};
\r
42 private static Log logger = LogFactory.getLog(ConnectManager.class.getName());
\r
47 private static ConnectManager instatnce = new ConnectManager();
\r
53 public static ConnectManager getInstance(){
\r
59 * Singletonのため呼び出し不可。
\r
62 private ConnectManager(){
\r
69 * @throws ApplicationException
\r
71 public Connector getConnector(LRemote lremote) throws Exception{
\r
72 RemoteNodeGroup group = RemoteNodeGroup.getInstance(lremote.group());
\r
74 logger.error("No such group ["+ lremote.group() +"].");
\r
75 throw new Exception();
\r
78 Selector selector = SelectorFactory.getSelector(lremote, group);
\r
79 Connector connector = selector.getConnector();
\r
82 if(!lremote.sync()){
\r
83 connector = new AsyncConnectWrapper(connector);
\r