Package com.asakusafw.bulkloader.common

Source Code of com.asakusafw.bulkloader.common.Constants

/**
* Copyright 2011-2014 Asakusa Framework Team.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.asakusafw.bulkloader.common;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.hadoop.io.SequenceFile.CompressionType;

import com.asakusafw.runtime.util.VariableTable;
import com.asakusafw.runtime.util.VariableTable.RedefineStrategy;

/**
* Import処理/Export処理用の定数クラス。
* @author yuta.shirai
* @since 0.1.0
* @version 0.6.1
*/
public final class Constants {

    /*
     * 環境変数名
     */

    /**
     * 環境変数名 ASAKSAF/WのHOMEディレクトリ。
     */
    public static final String ASAKUSA_HOME = "ASAKUSA_HOME";

    /**
     * Environmental variable: the batch applications installation base path.
     * @since 0.6.1
     */
    public static final String BATCHAPPS_PATH = "ASAKUSA_BATCHAPPS_HOME";

    /**
     * 環境変数名 ThunderGateのHOMEディレクトリ。
     */
    public static final String THUNDER_GATE_HOME = "BULKLOADER_HOME";

    /**
     * 変数表の環境変数。
     * <p>
     * {@link VariableTable#toSerialString()}の形式で指定すること。
     * </p>
     */
    public static final String ENV_ARGS = "BULKLOADER_ARGS";

    /*
     * 終了コード
     */
    /**
     * 終了コード 正常終了。
     */
    public static final int EXIT_CODE_SUCCESS = 0;
    /**
     * 終了コード 異常終了。
     */
    public static final int EXIT_CODE_ERROR = 1;
    /**
     * 終了コード 警告終了。
     */
    public static final int EXIT_CODE_WARNING = 2;
    /**
     * Exit code: failed but is retryable.
     */
    public static final int EXIT_CODE_RETRYABLE = 3;

    /**
     * プロパティファイル
     */
    /** DBサーバで読み込むプロパティファイル。 */
    public static final List<String> PROPERTIES_DB = Arrays.asList(new String[]{"bulkloader-conf-db.properties"});
    /** HadoopClusterで読み込むプロパティファイル。 */
    public static final List<String> PROPERTIES_HC = Arrays.asList(new String[]{"bulkloader-conf-hc.properties"});


    /*
     * プロパティKEY
     */
    /*
     * 共通
     */
    /**
     * プロパティKEY log4j.xmlのパス。
     */
    public static final String PROP_KEY_LOG_CONF_PATH = "log.conf-path";
    /**
     * プロパティKEY HDFSのプロトコルとホスト名。
     * @deprecated use {@link #PROP_KEY_BASE_PATH} instead
     */
    @Deprecated
    public static final String PROP_KEY_HDFS_PROTCOL_HOST = "hdfs-protocol-host";

    /**
     * The property key prefix of remote Hadoop client's environment variables.
     * @since 0.4.0
     */
    public static final String PROP_PREFIX_HC_ENV = "hadoop-cluster.env.";

    /**
     * プロパティKEY HDFSのプロトコルとホスト名。
     */
    public static final String PROP_KEY_BASE_PATH = "base-path";

    /*
     * bulkloader-conf-db.properties
     */
    /**
     * プロパティKEY SSHのパス。
     */
    public static final String PROP_KEY_SSH_PATH = "ssh.path";
    /**
     * プロパティKEY HDFSのNameノードのIPアドレス又はホスト名。
     */
    public static final String PROP_KEY_NAMENODE_HOST = "hadoop-cluster.host";
    /**
     * プロパティKEY HDFSのNameノードのユーザー名。
     */
    public static final String PROP_KEY_NAMENODE_USER = "hadoop-cluster.user";
    /**
     * プロパティKEY Importファイルを置くディレクトリのトップディレクトリ。
     */
    public static final String PROP_KEY_IMP_FILE_DIR = "import.tsv-create-dir";
    /**
     * プロパティKEY Extractorのシェル名。
     * @deprecated use {@link #PROP_PREFIX_HC_ENV} and {@link #ASAKUSA_HOME} instead
     */
    @Deprecated
    public static final String PROP_KEY_EXT_SHELL_NAME = "import.extractor-shell-name";
    /**
     * The property key of Cache info retriever executable file name.
     * @deprecated use {@link #PROP_PREFIX_HC_ENV} and {@link #ASAKUSA_HOME} instead
     */
    @Deprecated
    public static final String PROP_KEY_CACHE_INFO_SHELL_NAME = "import.cache-info-shell-name";
    /**
     * The property key of Cache storage cleaner file name.
     * @deprecated use {@link #PROP_PREFIX_HC_ENV} and {@link #ASAKUSA_HOME} instead
     */
    @Deprecated
    public static final String PROP_KEY_DELETE_CACHE_SHELL_NAME = "import.delete-cache-shell-name";
    /**
     * プロパティKEY Importファイルの圧縮有無。
     */
    public static final String PROP_KEY_IMP_FILE_COMP_TYPE = "import.zip-comp-type";
    /**
     * プロパティKEY Importファイルの圧縮時のバッファサイズ。
     */
    public static final String PROP_KEY_IMP_FILE_COMP_BUFSIZE = "import.zip-comp-buf-size";
    /**
     * プロパティKEY Importerのリトライ回数。
     */
    public static final String PROP_KEY_IMP_RETRY_COUNT = "import.retry-count";
    /**
     * プロパティKEY Importerのリトライインターバル。
     */
    public static final String PROP_KEY_IMP_RETRY_INTERVAL = "import.retry-interval";
    /**
     * プロパティKEY エクスポートファイルを置くディレクトリのトップディレクトリ。
     */
    public static final String PROP_KEY_EXP_FILE_DIR = "export.tsv-create-dir";
    /**
     * プロパティKEY Collectorのシェル名。
     * @deprecated use {@link #PROP_PREFIX_HC_ENV} and {@link #ASAKUSA_HOME} instead
     */
    @Deprecated
    public static final String PROP_KEY_COL_SHELL_NAME = "export.collector-shell-name";
    /**
     * プロパティKEY Exportファイルの圧縮時のバッファサイズ。
     */
    public static final String PROP_KEY_EXP_FILE_COMP_BUFSIZE = "export.zip-comp-buf-size";
    /**
     * プロパティKEY Exporterのリトライ回数。
     */
    public static final String PROP_KEY_EXP_RETRY_COUNT = "export.retry-count";
    /**
     * プロパティKEY Exporterのリトライインターバル。
     */
    public static final String PROP_KEY_EXP_RETRY_INTERVAL = "export.retry-interval";
    /**
     * プロパティKEY エクスポート処理でExport対象テーブルにデータをコピーする時の最大レコード数。
     */
    public static final String PROP_KEY_EXP_COPY_MAX_RECORD = "export.data-copy-max-count";
    /**
     * システムカラムのカラム名 システムID。
     */
    public static final String PROP_KEY_SYS_COLUMN_SID = "table.sys-column-sid";
    /**
     * システムカラムのカラム名 バージョン番号。
     */
    public static final String PROP_KEY_SYS_COLUMN_VERSION_NO = "table.sys-column-version-no";
    /**
     * システムカラムのカラム名 登録日時。
     */
    public static final String PROP_KEY_SYS_COLUMN_RGST_DATE = "table.sys-column-rgst-date";
    /**
     * システムカラムのカラム名 更新日時。
     */
    public static final String PROP_KEY_SYS_COLUMN_UPDT_DATE = "table.sys-column-updt-date";
    /**
     * システムカラムのカラム名 テンポラリSID。
     */
    public static final String PROP_KEY_SYS_COLUMN_TEMP_SID = "table.sys-column-temp-sid";
    /**
     * プロパティKEY インポート処理が正常終了した場合に、Exporterで生成したインポート中間TSVファイルを削除する。
     */
    public static final String PROP_KEY_IMPORT_TSV_DELETE = "import.delete-tsv";
    /**
     * プロパティKEY エクスポート処理が正常終了した場合に、Exporterで生成したエクスポート中間TSVファイルを削除する。
     */
    public static final String PROP_KEY_EXPORT_TSV_DELETE = "export.delete-tsv";


    /*
     * [ターゲット名]-jdbc.properties
     */
    /**
     * プロパティKEY JDBCドライバ。
     */
    public static final String PROP_KEY_JDBC_DRIVER = "jdbc.driver";
    /**
     * プロパティKEY DB接続URL。
     */
    public static final String PROP_KEY_DB_URL = "jdbc.url";
    /**
     * プロパティKEY DB接続ユーザー。
     */
    public static final String PROP_KEY_DB_USER = "jdbc.user";
    /**
     * プロパティKEY DB接続ユーザーに対するパスワード。
     */
    public static final String PROP_KEY_DB_PASSWORD = "jdbc.password";
    /**
     * プロパティKEY DBMSのコネクション取得時のチューニングパラ-メータを記述したプロパティファイル。
     */
    public static final String PROP_KEY_NAME_DB_PRAM = "jdbc.param-conf-path";

    /*
     * bulkloader-conf-hc.properties
     */
    /**
     * プロパティKEY 出力ファイルの圧縮有無。
     */
    public static final String PROP_KEY_IMP_SEQ_FILE_COMP_TYPE = "import.seq-comp-type";
    /**
     * The property key of Cache Builder executable file name.
     * @since 0.2.3
     */
    @Deprecated
    public static final String PROP_KEY_CACHE_BUILDER_SHELL_NAME = "import.cache-build-shell-name";
    /**
     * The property key of maximim number of parallel Cache Builder.
     * @since 0.2.3
     */
    public static final String PROP_KEY_CACHE_BUILDER_PARALLEL = "import.cache-build-max-parallel";
    /**
     * プロパティKEY Exportファイルの圧縮有無。
     */
    public static final String PROP_KEY_EXP_FILE_COMP_TYPE = "export.zip-comp-type";
    /**
     * プロパティKEY エクスポートファイルをTSVファイルに変換する際のファイル分割サイズ。
     */
    public static final String PROP_KEY_EXP_LOAD_MAX_SIZE = "export.tsv-max-size";
    /**
     * プロパティKEY Extractor,Collectorのファイル入出力位置をワーキングディレクトリベースとするか。
     * trueにすると、スタンドアロンモードでも動作可能となる。開発環境ではtrueにする。
     * @deprecated use {@link #PROP_KEY_BASE_PATH} instead
     */
    @Deprecated
    public static final String PROP_KEY_WORKINGDIR_USE = "hadoop-cluster.workingdir.use";

    /*
     * プロパティのデフォルト値
     */
    /**
     * プロパティデフォルト値 log4j.xmlのパス。
     */
    public static final String PROP_DEFAULT_LOG_CONF_PATH = "bulkloader/conf/log4j.xml";
    /**
     * プロパティデフォルト値 Importファイルの圧縮有無。
     */
    public static final String PROP_DEFAULT_IMP_FILE_COMP_TYPE = FileCompType.STORED.getSymbol();
    /**
     * プロパティデフォルト値 Importファイルの圧縮時のバッファサイズ。
     */
    public static final String PROP_DEFAULT_IMP_FILE_COMP_BUFSIZE = "32768";
    /**
     * プロパティデフォルト値 Importerのリトライ回数。
     */
    public static final String PROP_DEFAULT_IMP_RETRY_COUNT = "3";
    /**
     * プロパティデフォルト値 Importerのリトライインターバル。
     */
    public static final String PROP_DEFAULT_IMP_RETRY_INTERVAL = "10";
    /**
     * プロパティデフォルト値 Exportファイルの圧縮有無。
     */
    public static final String PROP_DEFAULT_EXP_FILE_COMP_TYPE = FileCompType.STORED.getSymbol();
    /**
     * プロパティデフォルト値 Exportファイルの圧縮時のバッファサイズ。
     */
    public static final String PROP_DEFAULT_EXP_FILE_COMP_BUFSIZE = "32768";
    /**
     * プロパティデフォルト値 Exporterのリトライ回数。
     */
    public static final String PROP_DEFAULT_EXP_RETRY_COUNT = "3";
    /**
     * プロパティデフォルト値 Exporterのリトライインターバル。
     */
    public static final String PROP_DEFAULT_EXP_RETRY_INTERVAL = "10";
    /**
     * プロパティデフォルト値 エクスポートファイルをTSVファイルに変換する際のファイル分割サイズ。
     */
    public static final String PROP_DEFAULT_EXP_LOAD_MAX_SIZE = "16777216";
    /**
     * プロパティデフォルト値 エクスポート処理でExport対象テーブルにデータをコピーする時の最大レコード数。
     */
    public static final String PROP_DEFAULT_EXP_COPY_MAX_RECORD = "100000";
    /**
     * プロパティデフォルト値 ファイル入出力位置をワーキングディレクトリベースとするか。
     */
    public static final String PROP_DEFAULT_WORKINGDIR_USE = "false";
    /**
     * プロパティデフォルト値 インポート処理が正常終了した場合に、Exporterで生成したインポート中間TSVファイルを削除するか。
     */
    public static final String PROP_DEFAULT_IMPORT_TSV_DELETE = TsvDeleteType.TRUE.getSymbol();
    /**
     * プロパティデフォルト値 エクスポート処理が正常終了した場合に、Exporterで生成したエクスポート中間TSVファイルを削除するか。
     */
    public static final String PROP_DEFAULT_EXPORT_TSV_DELETE = TsvDeleteType.TRUE.getSymbol();
    /**
     * プロパティデフォルト値 出力ファイルの圧縮有無。
     */
    public static final String PROP_DEFAULT_IMP_SEQ_FILE_COMP_TYPE = CompressionType.NONE.name();
    /**
     * The default property value of maximim number of parallel Cache Builder.
     * @since 0.2.3
     */
    public static final String PROP_DEFAULT_CACHE_BUILDER_PARALLEL = "1";

    /*
     * パス・ファイル名の固定値
     */

    /**
     * Root path of ThunderGate install directory.
     * @since 0.4.0
     */
    public static final String PATH_REMOTE_ROOT = "bulkloader/";

    /**
     * Relative path to the remote extractor script (from framework installation home).
     * @since 0.4.0
     */
    public static final String PATH_REMOTE_EXTRACTOR = "libexec/extractor.sh";

    /**
     * Relative path to the remote collector script (from framework installation home).
     * @since 0.4.0
     */
    public static final String PATH_REMOTE_COLLECTOR = "libexec/collector.sh";

    /**
     * Relative path to the fetching remote cache info script (from framework installation home).
     * @since 0.4.0
     */
    public static final String PATH_REMOTE_CACHE_INFO = "libexec/get-cache-info.sh";

    /**
     * Relative path to the deleting remote cache contents script (from framework installation home).
     * @since 0.4.0
     */
    public static final String PATH_REMOTE_CACHE_DELETE = "libexec/delete-cache-storage.sh";

    /**
     * Relative path to the building cache contents script (from framework installation home).
     * @since 0.4.0
     */
    public static final String PATH_LOCAL_CACHE_BUILD = "libexec/hadoop-build-cache.sh";

    /**
     * DBMSの接続情報を記述したプロパティファイルの接尾辞。
     */
    public static final String JDBC_PROP_NAME = "-jdbc.properties";
    /**
     * ログメッセージプロパティのファイル名。
     */
    public static final String LOG_MESSAGE_FILE = "bulkloader_message.properties";
    /**
     * 設定格納ファイルパス。
     */
    public static final String PROP_FILE_PATH = "conf";
    /**
     * ジョブフローパッケージ格納ファイルパス。
     */
    public static final String JOBFLOW_PACKAGE_PATH_BEFORE = "batchapps";
    /**
     * ジョブフローパッケージ格納ファイルパス。
     */
    public static final String JOBFLOW_PACKAGE_PATH_AFTER = "lib";
    /**
     * Importファイルのプレフィックス。
     */
    public static final String IMPORT_FILE_PREFIX = "IMP";
    /**
     * Importファイルの拡張子。
     */
    public static final String IMPORT_FILE_EXTENSION = ".tsv";
    /**
     * Importファイルの区切り文字。
     */
    public static final String IMPORT_FILE_DELIMITER = "_";
    /**
     * Exportファイルのプレフィックス。
     */
    public static final String EXPORT_FILE_PREFIX = "EXP";
    /**
     * Importファイルの区切り文字。
     */
    public static final String EXPORT_FILE_DELIMITER = "_";
    /**
     * Exportファイルの拡張子。
     */
    public static final String EXPORT_FILE_EXTENSION = ".tsv";
    /**
     * ジョブフローパッケージのプレフィックス。
     */
    public static final String DSL_PROP_PREFIX = "jobflow-";
    /**
     * ジョブフローパッケージの拡張子。
     */
    public static final String DSL_PROP_EXTENSION = ".jar";
    /**
     * HDFSのパス固定値。
     * @deprecated use {@link #PROP_KEY_BASE_PATH} instead
     */
    @Deprecated
    public static final String HDFSFIXED_PATH = "/user";
    /**
     * HDFSのパスの変数名(ユーザー名)。
     */
    public static final String HDFS_PATH_VARIABLE_USER = "user";
    /**
     * HDFSのパスの変数名(実行時ID)。
     */
    public static final String HDFS_PATH_VARIABLE_EXECUTION_ID = "execution_id";


    /*
     * テーブルのカラム名・デフォルト値・設定
     */
    /**
     * Exportテンポラリテーブルのプレフィックス。
     */
    public static final String EXP_TEMP_TABLE_PREIX = "EXPORT_TEMP_";
    /**
     * Exportテンポラリテーブルの区切り文字。
     */
    public static final String EXPORT_TEMP_TABLE_DELIMITER = "_";
    /**
     * 重複フラグテーブル名の末尾の文字。
     */
    public static final String DUPLECATE_FLG_TABLE_END = "_DF";

    /**
     * Export対象テーブルのシステムカラムの配列。
     * @return Export対象テーブルのシステムカラム
     */
    public static List<String> getSystemColumns() {
        List<String> list = new ArrayList<String>();
        list.add(Constants.getSidColumnName());
        list.add(Constants.getVersionColumnName());
        list.add(Constants.getRegisteredDateTimeColumnName());
        list.add(Constants.getUpdatedDateTimeColumnName());
        return list;
    }
    /**
     * 異常データテーブルのシステムカラムの配列。
     * エラーコードのカラムは任意に指定できるためここには含まれない。
     * @return 異常データテーブルのシステムカラム
     */
    public static List<String> getErrorSystemColumns() {
        List<String> list = new ArrayList<String>();
        list.add(Constants.getSidColumnName());
        list.add(Constants.getVersionColumnName());
        list.add(Constants.getRegisteredDateTimeColumnName());
        list.add(Constants.getUpdatedDateTimeColumnName());
        return list;
    }
    /**
     * システムIDのカラム名。
     */
    private static String sidColumnName = "SID";
    /**
     * バージョン番号のカラム名。
     */
    private static String versionColumnName = "VERSION_NO";
    /**
     * 登録日時のカラム名。
     */
    private static String registeredDateTimeColumnName = "RGST_DATETIME";
    /**
     * 更新日時のカラム名。
     */
    private static String updatedDateTimeColumnName = "UPDT_DATETIME";
    /**
     * テンポラリSIDのカラム名。
     */
    private static String temporarySidColumnName = "__TEMP_SID";

    /**
     * バージョン番号の初期値。
     */
    public static final long SYS_COLUMN_DEFAULT_VERSION_NO = 1;
    /**
     * バージョン番号の増分。
     */
    public static final long SYS_COLUMN_INCREMENT_VERSION_NO = 1;

    /*
     * その他
     */

    /**
     * Importer/Exporterがサブプロセスの標準入力・標準出力を読み込む時の文字コード。
     */
    public static final String SUB_PROCESS_CHAR_SET = "UTF-8";


    /**
     * インスタンスの作成を禁止する。
     */
    private Constants() {
        return;
    }

    /**
     * テーブルシステカラムの定数を初期化する。
     */
    public static void setSystemColumn() {
        String sid = ConfigurationLoader.getProperty(PROP_KEY_SYS_COLUMN_SID);
        if (!isEmpty(sid)) {
            setSidColumnName(sid);
        }
        String versionNo = ConfigurationLoader.getProperty(PROP_KEY_SYS_COLUMN_VERSION_NO);
        if (!isEmpty(versionNo)) {
            setVersionColumnName(versionNo);
        }
        String rgstDate = ConfigurationLoader.getProperty(PROP_KEY_SYS_COLUMN_RGST_DATE);
        if (!isEmpty(rgstDate)) {
            setRegisteredDateTimeColumnName(rgstDate);
        }
        String updtDateDate = ConfigurationLoader.getProperty(PROP_KEY_SYS_COLUMN_UPDT_DATE);
        if (!isEmpty(updtDateDate)) {
            setUpdatedDateTimeColumnName(updtDateDate);
        }
        String tempSid = ConfigurationLoader.getProperty(PROP_KEY_SYS_COLUMN_TEMP_SID);
        if (!isEmpty(tempSid)) {
            setTemporarySidColumnName(tempSid);
        }
    }
    /**
     * 引数の文字列が空かnullの場合trueを返す。
     * @param str 文字列
     * @return 結果
     */
    private static boolean isEmpty(String str) {
        if (str == null) {
            return true;
        }
        if (str.isEmpty()) {
            return true;
        }
        return false;
    }

    /**
     * 現在の環境で利用する変数表を新しく作成して返す。
     * @return 現在の環境で利用する変数表
     */
    public static VariableTable createVariableTable() {
        VariableTable variables = new VariableTable(RedefineStrategy.OVERWRITE);
        variables.defineVariable("__caller__", String.valueOf(ConfigurationLoader.getEnvProperty("USER")));
        String args = ConfigurationLoader.getEnvProperty(ENV_ARGS);
        if (args != null) {
            variables.defineVariables(args);
        }
        return variables;
    }
    /**
     * システムIDのカラム名を設定する。
     * @param name システムIDのカラム名
     */
    public static void setSidColumnName(String name) {
        sidColumnName = name;
    }
    /**
     * システムIDのカラム名を返す。
     * @return システムIDのカラム名
     */
    public static String getSidColumnName() {
        return sidColumnName;
    }
    /**
     * バージョン番号のカラム名を設定する。
     * @param name バージョン番号のカラム名を返す。
     */
    public static void setVersionColumnName(String name) {
        versionColumnName = name;
    }
    /**
     * バージョン番号のカラム名を返す。
     * @return バージョン番号のカラム名
     */
    public static String getVersionColumnName() {
        return versionColumnName;
    }
    /**
     * 登録日時のカラム名を設定する。
     * @param name 登録日時のカラム名
     */
    public static void setRegisteredDateTimeColumnName(String name) {
        registeredDateTimeColumnName = name;
    }
    /**
     * 登録日時のカラム名を返す。
     * @return 登録日時のカラム名
     */
    public static String getRegisteredDateTimeColumnName() {
        return registeredDateTimeColumnName;
    }
    /**
     * 更新日時のカラム名を設定する。
     * @param name 更新日時のカラム名
     */
    public static void setUpdatedDateTimeColumnName(String name) {
        updatedDateTimeColumnName = name;
    }
    /**
     * 更新日時のカラム名を返す。
     * @return 更新日時のカラム名
     */
    public static String getUpdatedDateTimeColumnName() {
        return updatedDateTimeColumnName;
    }
    /**
     * テンポラリSIDのカラム名を設定する。
     * @param name テンポラリSIDのカラム名
     */
    public static void setTemporarySidColumnName(String name) {
        temporarySidColumnName = name;
    }
    /**
     * テンポラリSIDのカラム名を返す。
     * @return テンポラリSIDのカラム名
     */
    public static String getTemporarySidColumnName() {
        return temporarySidColumnName;
    }
}
TOP

Related Classes of com.asakusafw.bulkloader.common.Constants

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.