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.hayabusa.db;
017    
018    import org.opengion.hayabusa.common.HybsSystem;
019    import org.opengion.hayabusa.common.SystemManager;
020    import org.opengion.fukurou.util.Cleanable;
021    
022    import java.util.Map;
023    import java.util.HashMap;
024    import java.util.Locale ;
025    
026    /**
027     * DBType オブジェクトを取得する為に使用する?ファクトリクラスです?
028     *
029     *  DBType オブジェク?の識別ID を?に、DBTypeFactory.newInstance( String id )
030     * メソ?で?DBType オブジェクトを取得します?
031     * こ?オブジェクト?、?部?すべてキャ?ュしておき、Webアプリケーション?
032     * 同時アクセスされますが、このオブジェクト?読み取り専用の為??ルチスレ?対?
033     * して?せん?
034     * よって、DBTypeFactory.close() メソ?で?オブジェクトを返す?も
035     * ありません?
036     *
037     * @og.group ??タ属?
038     *
039     * @version  4.0
040     * @author   Kazuhiko Hasegawa
041     * @since    JDK5.0,
042     */
043    public final class DBTypeFactory {
044            private static Map<String,DBType> map = new HashMap<String,DBType>();
045    
046            // 4.0.0 (2005/01/31) Cleanable インターフェースによる初期化??
047            static {
048                    Cleanable clr = new Cleanable() {
049                            public void clear() {
050                                    DBTypeFactory.clear();
051                            }
052                    };
053    
054                    SystemManager.addCleanable( clr );
055            }
056    
057            /**
058             *  ?ォルトコンストラクターをprivateにして?
059             *  オブジェクト?生?をさせな??する?
060             *
061             */
062            private DBTypeFactory() {
063            }
064    
065            /**
066             * 識別id に応じ?DBType オブジェクトを取得します?
067             * DBType オブジェク?はすべてのWebアプリケーション中で
068             * 共有して使用されます?
069             *
070             * @og.rev 3.4.0.2 (2003/09/05) DBType の?ォルト?を?'X' から 'XK' に変更します?
071             * @og.rev 3.5.6.0 (2004/06/18) ?プラグイン関連付け設定を、シス?パラメータ に記述します?
072             * @og.rev 4.0.0.0 (2005/01/31) キーの?を、DBType. から、DBType_ に変更します?
073             * @og.rev 5.1.6.0 (2010/05/01) 初期タイプを DBType.DEF_TYPE を使用するように変更しま?設定?は、XK のままです?)
074             *
075             * @param       id DBTypeインターフェースを実?たサブクラスの識別id
076             *
077             * @return      DBTypeオブジェク?
078             */
079            public static synchronized DBType newInstance( final String id ) {
080    //              String type = ( id == null ) ? "XK" : id.toUpperCase(Locale.JAPAN);
081                    String type = ( id == null ) ? DBType.DEF_TYPE : id.toUpperCase(Locale.JAPAN);
082                    DBType dbType = map.get( type );
083                    if( dbType == null ) {
084                            String cls = HybsSystem.sys( "DBType_" + type ) ;       // 4.0.0 (2005/01/31)
085                            dbType = (DBType)HybsSystem.newInstance( cls ); // 3.5.5.3 (2004/04/09)
086                            map.put( type,dbType );
087                    }
088                    return dbType;
089            }
090    
091            /**
092             * ?キャ?ュのすべての DBType オブジェクトを削除します?
093             */
094            public static synchronized void clear() {
095                    map.clear() ;
096            }
097    }