設定ファイル

最終更新日: 2022年6月23日

設定ファイル initdb.xml

initdb.xml は InitLoader コマンドが用いる設定ファイルです。 このファイルは wagbyapp/webapps/wagby/WEB-INF/export/conf フォルダに含まれています。

initdb.xml は次のような構造になっています。

<config>
  <!-- データベースの設定 -->
  <database ...>
    ...
  </database>
  <!-- 各フォルダの設定 -->
  <directory .../>
  <directory .../>
  <directory .../>
  ...
</config>

database 要素:データベースの設定

データベースのタイプや JDBC ドライバ、接続先 URL の指定などを行います。

type 属性
データベースの種類を指定します。内蔵データベースの場合は "sql92" を指定します。
driver 属性
JDBC ドライバを指定します。R8.5.7/R9.0.3以降は、この値は catalina.properties を参照するようになっています。
url 属性
接続先データベースへの URL を指定します。R8.5.7/R9.0.3以降は、この値は catalina.properties を参照するようになっています。
user 属性
接続先データベースのユーザー名を指定します。R8.5.7/R9.0.3以降は、この値は catalina.properties を参照するようになっています。
password 属性
接続先データベースのパスワードを指定します。R8.5.7/R9.0.3以降は、この値は catalina.properties を参照するようになっています。
quoteid 属性
SQL文における識別子の区切り文字(quote.id)を指定します。 例えば、'"' を指定した場合は、「select * from "juser" where id > 0」のようなSQL文が実行されます。
quotewhere 属性
SQL文におけるWHERE句の区切り文字(quote.where)を指定します。 例えば、'"'を指定した場合は、「select * from juser where "id > 0"」のようなSQL文が実行されます。
quoteidinwhere 属性
SQL文におけるWHERE句内の識別子の区切り文字(quote.idInWhere)を指定します。 例えば、'"'を指定した場合は、「select * from juser where "id" > 0」のようなSQL文が実行されます。

directory 要素:各フォルダの設定

エクスポートされたフォルダを起点とした、相対的なフォルダ名と、各種属性を指定します。

起点は wagbyapp/webapps/<プロジェクトID>/WEB-INF/export です。

具体的には、次のようになります。

  <directory group="data hibernate"
     tablename="customer"
     storage="hibernate"
     createddlfilename="createddl/customer.ddl"
     dropddlfilename="dropddl/customer.ddl"
     importxslfilename="importxsl/customer.xsl"
     convertimportxslfilename="convertimportxsl/customer.xsl">
    init/customer
  </directory>
group 属性

この sql 要素のグループ名を指定します。スペース区切りで複数記述することが可能です。コマンド実行時にグループ名に合致した sql 要素をまとめて実行することができます。次の値が設定されます。

  • data : エンドユーザによって開発されたという意味を示すマーカーです。
  • jfc_data : Wagby 内部で管理されているモデルを示すマーカーです。
  • hibernate : Hibernate を用いてデータを格納します。エンドユーザによって開発されたモデルが該当します。

この group 属性値を利用して、InitLoader を操作することができます。対象となるグループに限定した操作を行えるようになります。

tablename 属性
データベースのテーブル名が指定されて実行された場合に、一致した sql 要素のみを実行します。
storage 属性
"hibernate" を指定できます。
createddlfilename 属性
テーブル作成時の DDL ファイルを指定します。
dropddlfilename 属性
テーブル削除時の DDL ファイルを指定します。
importxslfilename 属性
この属性にXSLファイルのファイル名を指定することにより、import時に読み込んだXMLを指定したXSLで処理を行います。指定がない場合は読み込んだXMLでそのまま処理します。initdb.xmlファイルの親ディレクトリからの相対パスを指定します。
convertimportxslfilename 属性
過去データを移行して新システムにデータを格納するタイミングで、ここに指定した XSLT を(フィルタとして)通すことができます。

sql 要素:実行する SQL 文の設定

InitLoader 実行時に、同時に実行する SQL 文を指定します。例えばビューの定義など、さまざまな SQL 文(一文)を指定します。

  <sql group="create_view jfc_data"
       tablename="staff">
    create view ...
  </sql>

複数の SQL 文を実行させる場合は、当該要素を複数回、記述してください。または記述するSQLをセミコロン「;」で区切って記述します。

MySQL を利用する場合、セミコロンで区切った複数のSQLを認識させるための設定が必要です。[詳細...]
group 属性
この sql 要素のグループ名を指定します。スペース区切りで複数記述することが可能です。コマンド実行時にグループ名に合致した sql 要素をまとめて実行することができます。
tablename 属性
データベースのテーブル名が指定されて実行された場合に、一致した sql 要素のみを実行します。
acceptcommand属性、denycommand属性を共に指定していない場合は、デフォルト値として
acceptcommand="sql sql-auto-before" denycommand="all"
を使用します。

sequence 要素:順序の作成

InitLoader 実行時に、同時に実行する CREATE SEQUENCE 文を指定します。 具体的には、次のようになります。

  <sequence group="create_seq jfc_data"
       tablename="jprincipal" tablemaxcolumn="id"
       seqname="jprincipal_seq" start="1000"/>
group 属性
この sequence 要素のグループ名を指定します。スペース区切りで複数記述することが可能です。コマンド実行時にグループ名に合致した sequence 要素をまとめて実行することができます。
tablename 属性
データベースのテーブル名が指定されて実行された場合に、一致した sequence 要素のみを実行します。
tablemaxcolumn 属性
tablename属性とこの属性で指定されたテーブルの列の最大値を取得し、start属性で指定された値より大きい場合は、この値をSTARTの値とします。tablename属性又はこの属性が指定されてない場合は、start属性の指定に従います。
seqname 属性
作成するSEQUENCEの名前を指定します。必ず指定されなければなりません。
increment 属性、minvalue 属性、maxvalue 属性、start 属性、cache 属性
CREATE SEQUENCE文のINCREMENT, MINVALUE, MAXVALUE, START, CACHEに対応します。指定されてない場合は、省略されます。
cycle 属性
CREATE SEQUENCE文のCYCLEに対応します。値がtrueの場合にのみ指定されます。指定されてない場合又は値がfalseの場合は、省略されます。
acceptcommand属性、denycommand属性を共に指定していない場合は、デフォルト値として
acceptcommand="sequence" denycommand="all"
を使用します。

拡張ファイル initdb_ex.xml

initdb.xml はモデル定義から常に自動生成されます。一方、initdb_ex.xml は開発者が作成し、customize フォルダに配置します。この仕組みを用いることで、モデル定義によらず、InitLoader 時に常に実行してほしい SQL を 用意することができます。

使い方

  1. $(DEVHOME)/customize/webapp/WEB-INF/export/conf/initdb_ex.xml を用意します。(*)
  2. ファイルの中身を作成します。例を示します。
    <?xml version="1.0" encoding="UTF-8"?>
      <sql group="data"
            acceptcommand="sql sql-create-after" denycommand="all"
            tablename="seq">
    INSERT INTO &quot;seq&quot; VALUES('report_seq1',1);
    INSERT INTO &quot;seq&quot; VALUES('report_seq2',1);
      </sql>
    
  3. ビルドします。ビルド後は wagbyapp/webapps/wagby/WEB-INF/export/conf/initdb_ex.xml に配置されます。(*1)
  4. init_db.bat を実行すると、ここに記述した内容が (initdb.xml のあとに) 実行されます。

利用例 : サポート > リポジトリ > 業務ロジック > 主キー > 順序を定義する

(*) R7.12.6/R8.0.4 より前のバージョンの Wagby で Java 9 以上の環境を利用する場合、initdb_ex.xml を $(DEVHOME)/customize/tomcat/bin に配置してください。ビルド後は wagbyapp/bin にコピーされます。(R7.12.6/R8.0.4 以降の Wagby では、この手順は不要です。)

拡張グループ属性8.5.7/9.0.3

コマンドラインからのインポート実行、およびインポート・エクスポート画面にて、インポート処理の実行前と実行後に特定のグループのsqlを実行できます。

グループ属性説明
jfc_beforeimport インポート時、インポート処理前に jfc_beforeimport グループに記述された sql を実行します。
jfc_afterimport インポート時、インポート処理後に jfc_afterimport グループに記述された sql を実行します。

initdb_ex.xmlに次の設定を行うことで、testテーブルを作成することができます。

<?xml version="1.0" encoding="UTF-8"?>

<sql group="drop_view jfc_data jfc_beforeimport">
drop table "test" if exists
</sql>

<sql group="create_view jfc_data jfc_afterimport">
create table "test" ( "item1" INTEGER )
</sql>

運用時の注意

  • SQLを直接、記述するため、お使いのデータベースに依存します。データベース変更時は、このファイルに記述した内容も見直してください。
  • ストアドプロシージャを定義することもできます。CREATE OR REPLACE PROCEDURE... など。ここに含める内容は XML で使える文字に限定されます。文字実体参照を適切に利用してください。具体的には「<」「>」「&」「"」「'」といった文字をそれぞれ「&lt;」「&gt;」「&amp;」「&quot;」「&apos;」に置換してください。
  • テーブル名を囲むダブルクォートの有無などは、ご利用になるデータベースによって異なります。
  • Designerで「テーブルを作成しない」とした場合、Web画面からのインポート操作では、当該モデルに関するSQL実行はスキップされます。コンソールからinit_db.batスクリプトを実行した場合は、initdb_ex.xml のすべての内容が常に実行されます。
  • 記述内容に誤りがあった場合は、その記述は実行されません。例えば tablename 属性のスペルミスや、余分な空白が入っていた、という場合などです。