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
018/**
019 * Transaction インターフェースを継承した、リアルタイムトランザクションクラスです。
020 *
021 * これは、トランザクション処理のためのクラスというより、トランザクション処理を行わない
022 * コネクションを、共通的に使用する為のクラスになります。
023 * つまり、Connection のラップクラスになります。
024 * ただし、このクラスが生成されてから、クローズされるまでは、内部に保留した Connection は、
025 * ずっと使い続けられますので、ConnectionFactory から取り出した Connection と同様に
026 * トランザクション性は維持されます。
027 * このクラスでは、close()処理で、commit/rollback が実行されます。
028 *
029 * 6.3.6.1 (2015/08/28)
030 *   selectを実行した後で明示的にcommit,rollbackを行わないのはOracle位
031 *   らしいので、検索終了時でも、commit か、rollback を行うようにします。
032 *   つまり、commit されない(=途中で処理が打ち切られた)場合は、
033 *   rollback するように仕様変更しますので、Transactionオブジェクトを
034 *   呼び出した処理の最後には、検索であろうとなかろうと、commit()を入れてください。
035 *   ただし、Transaction オブジェクトは、DBアクセス以外にも適用可能に
036 *   作成しているため、Connection がある場合のみ、実際の commit/rollback が
037 *   実行されます。
038 *
039 * @og.rev 5.1.9.0 (2010/08/01) 新規作成
040 * @og.rev 5.3.8.0 (2011/08/01) クラスの内部構造変更
041 *
042 * @version  5.0
043 * @author       Kazuhiko Hasegawa
044 * @since    JDK6.0,
045 */
046public class TransactionReal extends TransactionImpl {
047
048        /**
049         * ApplicationInfo を指定して作成する、コンストラクター
050         *
051         * このクラスは、トランザクション処理をしない場合に、従来の Connection の
052         * 代わりに使用することを想定したクラスのオブジェクトを作成します。
053         *
054         * @og.rev 5.3.7.0 (2011/07/01) dbidを引数から削除
055         * @og.rev 5.3.8.0 (2011/08/01) 親クラスを呼ぶように変更
056         *
057         * @param       appInfo 内部統制用のアクセス情報
058         */
059        public TransactionReal( final ApplicationInfo appInfo ) {
060                super( appInfo );
061        }
062
063        /**
064         * コミット処理が行われた場合に、内部フラグ(isCommit)を true にセットします。
065         * 1回でもコミットが行われており、ロールバックが行われていなければ、
066         * コミットされます。
067         *
068         * 検索処理時でも、最後に commit() を実行してください。実行されていない場合は、
069         * 自動的に、rollback() が、実行されます。
070         *
071         * ※ TransactionReal の commit() は、endCommit() が実行されます。
072         *    これは、トランザクションの最後に実行される処理で、それ以前に rollback
073         *    されていなければ、commit()されます。
074         *
075         * @og.rev 6.4.3.3 (2016/03/04) 一般的なタグで、SKIP_PAGE された場合、rollback するようにします。
076         */
077        @Override                       // Transaction
078        public void commit() {
079                endCommit();
080        }
081
082        /**
083         * コネクションの、終了時処理を行います。
084         *
085         * 毎回クローズ処理を行う事になります。
086         * ここで、commit されていれば、実際の commit が行われます。
087         * commit が行われていない場合は、rollback が実行されます。
088         * Connectionは、ConnectionFactory のプールに戻されます。
089         * ただし、明示的に rollback が実行された場合は、rollback 処理後に
090         * コネクションは、破棄します。
091         *
092         * @og.rev 6.3.6.1 (2015/08/28) AutoCloseable の close() メソッドに対応。
093         */
094        @Override                       // AutoCloseable
095        public void close() {
096                finish();
097        }
098}