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.taglib; 017 018 import org.opengion.hayabusa.common.HybsSystemException; 019 020 import static org.opengion.fukurou.util.StringUtil.nval ; 021 import org.opengion.fukurou.util.StringUtil; 022 import org.opengion.fukurou.process.HybsProcess; 023 import org.opengion.fukurou.process.Process_DBParam; 024 025 import java.io.ObjectOutputStream; 026 import java.io.ObjectInputStream; 027 import java.io.IOException; 028 029 /** 030 * MainProcess で実行される Processクラスを構築します? 031 * 032 * 親クラス(Process)は、org.opengion.fukurou.process パッケージの HybsProcess 033 * インターフェースを実?たクラスの、Process_****.java の **** 部??します? 034 * 共通的な パラメータは、このTagクラスに実?ますが、それぞれ?個別に?な 035 * パラメータは、ParamTag を使用して?します? 036 * こ?タグは、MainProcess タグの?にのみ、記述可能です? 037 * 038 * @og.formSample 039 * ●形式?lt;og:process processID="ZZZ" > 040 * <og:param key="AAA" value="111" /> 041 * </og:process > 042 * ●body?あ?EVAL_BODY_BUFFERED:BODYを評価し?{@XXXX} を解析しま? 043 * 044 * ●Tag定義?? 045 * <og:process 046 * processID ○?TAG】リクエスト情報 に登録するキーをセ?しま???)? 047 * debug 【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false) 048 * > ... Body ... 049 * </og:process> 050 * 051 * ●使用? 052 * ??変数の渡し方 053 * <og:mainProcess > 054 * <og:process processID="DBReader" > 055 * <og:param key="dbid" value="FROM" /> 056 * <og:param key="sql" value="select * from GE02" /> 057 * </og:process > 058 * <og:process processID="DBWriter" > 059 * <og:param key="dbid" value="TO" /> 060 * <og:param key="table" value="GE02" /> 061 * </og:process > 062 * </og:mainProcess > 063 * 064 * BODY 部に記述した変数の渡し方 065 * <og:process processID="DBReader" > 066 * <og:param key="SQL" > 067 * SELECT COUNT(*) FROM GEA03 068 * WHERE SYSTEM_ID=[SYSTEM_ID] 069 * AND CLM=[CLM] 070 * AND FGJ = '1' 071 * </og:param> 072 * </og:process > 073 * 074 * @og.group リアルバッチ系 075 * 076 * @version 4.0 077 * @author Kazuhiko Hasegawa 078 * @since JDK5.0, 079 */ 080 public class ProcessTag extends CommonTagSupport { 081 //* こ?プログラ??VERSION??を設定します? {@value} */ 082 private static final String VERSION = "4.3.1.1 (2008/09/04)" ; 083 084 private static final long serialVersionUID = 431120080904L ; 085 086 private static final String PRCS = "org.opengion.fukurou.process.Process_" ; 087 088 private String processID = null; 089 private transient HybsProcess process = null; 090 091 /** 092 * Taglibの開始タグが見つかったときに処??doStartTag() ?オーバ?ライドします? 093 * 094 * @og.rev 4.3.1.1 (2008/09/04) DBParam 使用時?、専用の初期化メソ?を呼ぶ 095 * 096 * @return 後続????( EVAL_BODY_BUFFERED ) 097 */ 098 @Override 099 public int doStartTag() { 100 // process = (HybsProcess)StringUtil.newInstance( PRCS + processID ); 101 // if( process == null ) { 102 // String errMsg = "<b>?? processID を持つ HybsProcess が見つかりません?/b>" 103 // + "processID=" + processID ; 104 // throw new HybsSystemException( errMsg ); 105 // } 106 107 MainProcessTag mainProcess = (MainProcessTag)findAncestorWithClass( this,MainProcessTag.class ); 108 if( mainProcess == null ) { 109 // String errMsg = "<b>こ?タグは、MainProcessTagの??(要?に記述してください?/b>" 110 String errMsg = "<b>" + getTagName() + "タグは、MainProcessTagの??(要?に記述してください?/b>" 111 + "processID=" + processID ; 112 throw new HybsSystemException( errMsg ); 113 } 114 115 // 4.3.1.1 (2008/09/04) DBParam 使用時?、専用の初期化メソ?を呼ぶ 116 if( "DBParam".equals( processID ) ) { 117 process = new Process_DBParam(); 118 ((Process_DBParam)process).setAppInfo( getApplicationInfo() ); 119 } 120 else { 121 process = (HybsProcess)StringUtil.newInstance( PRCS + processID ); 122 } 123 124 mainProcess.addProcess( process ); 125 126 return ( EVAL_BODY_BUFFERED ); // Body を評価する 127 } 128 129 /** 130 * タグリブオブジェクトをリリースします? 131 * キャ?ュされて再利用される?で、フィールド?初期設定を行います? 132 * 133 */ 134 @Override 135 protected void release2() { 136 super.release2(); 137 processID = null; 138 process = null; 139 } 140 141 /** 142 * 【TAG】リクエスト情報 に登録するキーをセ?します? 143 * 144 * @og.tag 145 * processID は、org.opengion.fukurou.process.HybsProcess インターフェースを実?? 146 * Process_**** クラスの **** を与えます? 147 * これら?、HybsProcess インターフェースを継承したサブクラスである?があります? 148 * 標準で、org.opengion.fukurou.process 以下? Process_**** クラスが?Process_**** 宣?と 149 * して、定義されて?す? 150 * 属?クラス定義の {@link org.opengion.fukurou.process.HybsProcess HybsProcess} を参照願います? 151 * {@og.doc03Link process Process_**** クラス} 152 * 153 * @param pid リクエスト情報に登録するキー 154 * @see org.opengion.fukurou.process.HybsProcess HybsProcessのサブクラス 155 */ 156 public void setProcessID( final String pid ) { 157 processID = nval( getRequestParameter( pid ),processID ) ; 158 } 159 160 /** 161 * 親クラスに登録するキーをセ?します? 162 * 163 * @param key 登録するキー 164 * @param value 登録する値 165 */ 166 protected void addParam( final String key,final String value ) { 167 process.putArgument( key,value ); 168 } 169 170 /** 171 * シリアライズ用のカスタ?リアライズ書き込みメソ? 172 * 173 * @og.rev 4.0.0.0 (2006/09/31) 新規追? 174 * @serialData 175 * 176 * @param strm ObjectOutputStreamオブジェク? 177 */ 178 private void writeObject( final ObjectOutputStream strm ) throws IOException { 179 strm.defaultWriteObject(); 180 } 181 182 /** 183 * シリアライズ用のカスタ?リアライズ読み込みメソ? 184 * 185 * ここでは、transient 宣?れた?変数の??初期化が?なフィールド?み設定します? 186 * 187 * @og.rev 4.0.0.0 (2006/09/31) 新規追? 188 * @serialData 189 * 190 * @param strm ObjectInputStreamオブジェク? 191 * @see #release2() 192 */ 193 private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException { 194 strm.defaultReadObject(); 195 } 196 197 /** 198 * こ?オブジェクト???表現を返します? 199 * 基本???目?使用します? 200 * 201 * @return こ?クラスの??表現 202 */ 203 @Override 204 public String toString() { 205 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 206 .println( "VERSION" ,VERSION ) 207 .println( "processID" ,processID ) 208 .fixForm().toString() ; 209 } 210 }