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 */
016package org.opengion.fukurou.db;
017
018import org.opengion.fukurou.util.ApplicationInfo;
019
020
021/**
022 * Transaction インターフェースを継承した、リアルタイムトランザクションクラスです。
023 *
024 * これは、通常のトランザクションクラスと異なり、トランザクション処理をしません。
025 * つまり、トランザクション処理を行わないときに、メソッド等の共通的な使用ができるようにする、
026 * Connection のラップクラスになります。
027 * ただし、このクラスが生成されてから、クローズされるまでは、内部に保留した Connection は、
028 * ずっと使い続けられますので、ConnectionFactory から取り出した Connection と同様に
029 * トランザクション性は維持されます。
030 * このクラスより作成された、Statement は、取り出し側で、きちんとクロース処理を
031 *
032 * このクラスでは、コミット、ロールバック、クローズ処理は、リアルタイムに行われます。
033 *
034 * @og.rev 5.1.9.0 (2010/08/01) 新規作成
035 * @og.rev 5.3.8.0 (2011/08/01) クラスの内部構造変更
036 *
037 * @version  5.0
038 * @author       Kazuhiko Hasegawa
039 * @since    JDK6.0,
040 */
041public class TransactionReal extends TransactionImpl {
042//public class TransactionReal implements Transaction {
043//      private final Connection conn ;
044//      private final String     dbid ;
045//      private         ApplicationInfo appInfo = null;
046//      private         String     dbid = null;
047//      private         Connection conn = null;                 // 5.3.7.0 (2011/07/01) 一度だけ close するように変更します。
048
049        /**
050         * ApplicationInfo を指定して作成する、コンストラクター
051         *
052         * このクラスは、トランザクション処理をしない場合に、従来の Connection の
053         * 代わりに使用することを想定したクラスのオブジェクトを作成します。
054         *
055         * @og.rev 5.3.7.0 (2011/07/01) dbidを引数から削除
056         * @og.rev 5.3.8.0 (2011/08/01) 親クラスを呼ぶように変更
057         *
058         * @param       appInfo 内部統制用のアクセス情報
059         */
060//      public TransactionReal( final String dbid , final ApplicationInfo appInfo ) {
061        public TransactionReal( final ApplicationInfo appInfo ) {
062                super( appInfo );
063//              this.appInfo = appInfo;
064//              this.dbid = dbid;
065//              this.conn = ConnectionFactory.connection( dbid,appInfo );
066        }
067
068        /**
069         * 呼ばれる都度、新しい Connection を返します。ただし、Connection 自身は、
070         * ConnectionFactory から取得するため、基本的にはキャッシュされたConnectionです。
071         *
072         * @og.rev 5.3.7.0 (2011/07/01) dbidチェック
073         * @og.rev 5.3.8.0 (2011/08/01) 親クラスのメソッドを呼ぶ為、廃止
074         *
075         * @param       dbid  接続先ID (このクラスでは無視されます)
076         *
077         * @return      指定のDBID に対応した、Connection オブジェクト
078         */
079//      public Connection getConnection( final String dbid ) {
080//              if( conn != null ) { close(); }
081//
082//              this.dbid = dbid;
083//              this.conn = ConnectionFactory.connection( dbid,appInfo );
084//              return conn ;
085//      }
086
087        /**
088         * コミット処理を行います。
089         *
090         * これは、呼ばれる都度、リアルタイムに処理します。
091         *
092         * @og.rev 5.3.8.0 (2011/08/01) 親クラスのメソッドを呼ぶ為、廃止
093         *
094         * @return 正常:true/異常:false
095         */
096//      public boolean commit() {
097//              return Closer.commit( conn );
098//      }
099
100        /**
101         * ロールバック処理を行います。
102         *
103         * これは、呼ばれる都度、リアルタイムに処理します。
104         *
105         * @og.rev 5.3.8.0 (2011/08/01) 親クラスのメソッドを呼ぶ為、廃止
106         *
107         * @return 正常:true/異常:false
108         */
109//      public boolean rollback() {
110//              return Closer.rollback( conn );
111//      }
112
113        /**
114         * トランザクションの、終了時処理を行います。
115         *
116         * @og.rev 5.3.8.0 (2011/08/01) 親クラスのメソッドを呼ぶ為、廃止
117         *
118         * @see #close( boolean )
119         *
120         * @return 正常:true/異常:false
121         */
122//      public boolean close() {
123//              return close( false );
124//      }
125
126        /**
127         * コネクションの、終了時処理を行います。
128         *
129         * 引数は、正常かどうかを判定するフラグです。異常の場合は、true をセットします。
130         * これは、ConnectionFactory のプールに戻すかどうかを判断するのに使われます。
131         * 一度でも、エラーが発生したコネクションは、破棄します。
132         * それ以外は、プールに戻します。
133         *
134         * @og.rev 5.3.7.0 (2011/07/01) close時に、コネクションを null 化しておく。
135         * @og.rev 5.3.8.0 (2011/08/01) 終了処理を行い、親クラスのrealClose() を呼ぶ。
136         *
137         * @param       errFlag  [true:エラー状態/false:通常]
138         *
139         * @return 正常:true/異常:false
140         */
141        @Override
142        public boolean close( final boolean errFlag ) {
143//              if( errFlag ) { ConnectionFactory.remove( conn,dbid ); }        // 削除
144//              else {                  ConnectionFactory.close( conn,dbid );  }        // 返却
145
146//              conn = null;    // 5.3.7.0 (2011/07/01)
147//              return true;
148
149                // 5.3.8.0 (2011/08/01) 終了処理を行い、親クラスのrealClose() を呼ぶ。
150                super.close( errFlag );
151                finish();
152                realClose();
153
154                return true;
155        }
156}