001 /*
002 * Copyright (c) 2009 The openGion Project.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013 * either express or implied. See the License for the specific language
014 * governing permissions and limitations under the License.
015 */
016 package org.opengion.fukurou.process;
017
018 import org.opengion.fukurou.util.Closer ;
019
020 import java.util.Map ;
021 import java.util.HashMap ;
022 import java.util.List ;
023 import java.util.ArrayList ;
024 import java.sql.Connection;
025
026 /**
027 * ConnDataFactory は、ConnData オブジェクトを構築する為のファクトリクラスですã?
028 *
029 * Connection æƒ??は、この ファクトリクラス でキャãƒ?‚·ュされ、使ã�?�¾わされますã?
030 * ここでは、å¿?¦�なã�?�‘、コネクションを作æ?しますが、最大管ç�?•°と、使用期間に
031 * 関しては、å?部çš?�«管ç�?�—てã�?‚‹設定å?で決定しますã?
032 * バッチ的に使用する場合ã?、ほとんど効果を発揮しません。あくまで、APサーバã?ç?
033 * での使用をå?に、永続的に繰返し使われるケースを想定してã�?�¾すã?
034 *
035 * @version 4.0
036 * @author Kazuhiko Hasegawa
037 * @since JDK5.0,
038 * @deprecated 5.1.9.0 (2010/08/01) å»?¢クラスですã?org.opengion.fukurou.db.ConnectionFactory 等をご使用くださいã€?
039 */
040 @Deprecated public final class ConnDataFactory {
041 private static final long MAX_ALIVE_TIME = 1800000 ; // 30 �
042 private static final int MAX_LIST_COUNT = 3 ; // キャãƒ?‚·ュのæœ?¤§数
043
044 private static final Map<Integer,List<ConnData>> connMap = new HashMap<Integer,List<ConnData>>();
045 private static final String ORACLE_DRIVER = "oracle.jdbc.OracleDriver";
046
047 /** リターンコーãƒ? System.getProperty("line.separator") */
048 public static final String CR = System.getProperty("line.separator");
049
050 static {
051 try {
052 Class.forName( ORACLE_DRIVER );
053 }
054 catch( ClassNotFoundException ex ) {
055 String errMsg = "ドライバクラスが見つかりませんã€?" + ORACLE_DRIVER + "]";
056 throw new RuntimeException( errMsg,ex );
057 }
058 }
059
060 /**
061 * 【å»?¢】コンストラクタã‚?private 化する事で、オブジェクト生成を出来なくしますã?
062 * @deprecated 5.1.9.0 (2010/08/01) å»?¢クラスでã�?
063 */
064 @Deprecated private ConnDataFactory() {}
065
066 /**
067 * 【å»?¢】ConnData オブジェクトを取得しますã?
068 * キャãƒ?‚·ュに存在する場合ã?、キャãƒ?‚·ュから、そã�?�§なã�??合ã?、新規作æ?しますã?
069 *
070 * @param url 接続å?URL
071 * @param user 接続ユーザー
072 * @param passwd パスワーãƒ?
073 *
074 * @return ConnDataオブジェクãƒ?
075 * @deprecated 5.1.9.0 (2010/08/01) å»?¢クラスでã�?
076 */
077 @Deprecated public static ConnData createConnData( final String url,final String user, final String passwd ) {
078 int uniq = ( url + "," + user + "," + passwd ).hashCode() ;
079 ConnData connData = null;
080 synchronized( connMap ) {
081 List<ConnData> list = connMap.get( uniq );
082 if( list != null && ! list.isEmpty() ) {
083 int adrs = list.size() - 1;
084 connData = list.remove( adrs ); // æœ?¾Œã?要ç´?‚’取り出すã?
085 }
086 }
087
088 if( connData == null ) {
089 connData = new ConnData( url,user,passwd,uniq );
090 }
091 return connData;
092 }
093
094 /**
095 * 【å»?¢】ConnData オブジェクトã?終äº?close)処ç�?‚’行いますã?
096 * 正常終äº?™‚(isOK=true)には、commit を実行し、キャãƒ?‚·ュに戻しますã?
097 * ただしã?MAX_ALIVE_TIME でæŒ?®šした時間以上経過した場合ã?ã€?
098 * オブジェクトã?破æ£?�—ますã?
099 * 異常終äº?™‚の場å�?isOK=false)、rollback を実行し、オブジェクトã?破æ£?�—ますã?
100 *
101 * @param connData オブジェクãƒ?
102 * @param isOK 正常:true/異常:false
103 * @deprecated 5.1.9.0 (2010/08/01) å»?¢クラスでã�?
104 */
105 @Deprecated public static void closeConnData( final ConnData connData,final boolean isOK ) {
106 if( connData != null ) {
107 Connection conn = connData.getConnection();
108 if( isOK ) {
109 Closer.commit( conn );
110 if( connData.getCreateTime() + MAX_ALIVE_TIME > System.currentTimeMillis() ) {
111 int uniq = connData.getUniq();
112 synchronized( connMap ) {
113 List<ConnData> list = connMap.get( uniq );
114 if( list == null ) { list = new ArrayList<ConnData>(); }
115 if( list.size() >= MAX_LIST_COUNT ) {
116 Closer.connClose( conn );
117 }
118 else {
119 list.add( connData );
120 connMap.put( uniq,list );
121 }
122 }
123 }
124 else {
125 Closer.connClose( conn );
126 }
127 }
128 else {
129 Closer.rollback( conn );
130 Closer.connClose( conn );
131 }
132 }
133 }
134
135 /**
136 * 【å»?¢】å?部 ConnData キャãƒ?‚·ュをå?期化しますã?
137 *
138 * @deprecated 5.1.9.0 (2010/08/01) å»?¢クラスでã�?
139 */
140 @Deprecated public static void clear() {
141 synchronized( connMap ) {
142 for( List<ConnData> list : connMap.values() ) {
143 for( ConnData connData : list ) {
144 Connection conn = connData.getConnection();
145 Closer.connClose( conn );
146 }
147 list.clear();
148 }
149 connMap.clear();
150 }
151 }
152 }