    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}