Make 処理のカ ス タ マ イ ズ こ の機能は、 Release10.0 以降で利用可能です。 J2EE に精通 し た開発者に と っ ては、 NXJ に よ っ て生成 さ れた ア プ リ ケーシ ョ ン アー カ イ ブに変更を行な う 必要があ る場合 も あ り ます。 その場合、 ejb と Web ア プ リ ケーシ ョ ン フ ァ イル構造に フ ァ イルの追加や再配置を行な っ て、 生成 さ れた 構成 フ ァ イル (例 : ejb-jar.xml, web.xml, その他) を変更 し ます。 こ の ド キ ュ メ ン ト では、 必要な変更を作成す る ために Make Hook を記述 し て、 Make 処理を カ ス タ マ イ ズする方法を説明 し ます。 こ の Java ク ラ スは、 実行 コ マ ン ド の Make フ ェ ーズ中に NXJ に よ っ て呼び出 さ れます。 警告 – NXJ は、 こ の フ ァ イルに行 う 変更に対 し て検証を行わないので、 ア プ リ ケーシ ョ ンサーバや、 NXJ コ ン ト ロ ールセ ン タ と 互換性のない アー カ イ ブに変更する こ と が可能です。 Make Hook の作成方法 Make Hook を作成する場合は、 com.unify.nxj.ide.make.NXJMakeHook イ ン タ フ ェ ース を実装す る Java ク ラ ス を記述 し ます。 こ の イ ン タ フ ェ ースは、 以下の 1 つの メ ソ ッ ド を宣言 し ます。 public void makeHook( java.io.File earContentsDir, java.util.Properties properties, com.unify.nxj.ide.make.NXJMakeHookCallback callback ) throws Exception; 1 NXJ が Make Hook を使用する構成では、 ク ラ ス ( ク ラ スは 0 引数構造を持つ必要 があ り ます) の イ ン ス タ ン ス を作成 し ます。 その後、 makeHook メ ソ ッ ド が呼び出 さ れます。 makeHook メ ソ ッ ド がエ ラ ー無 し で終了 し た場合、 NXJ は適切な アー カ イ ブ中に フ ァ イルをパ ッ ケージ し て、 ア プ リ ケーシ ョ ン を配備 し ます (ア プ リ ケーシ ョ ン を配備ま たは実行 し てい る場合)。 makeHook メ ソ ッ ド は、 3 つの引数を渡 さ れます。 • java.io.File オ ブ ジ ェ ク ト 最初の引数は、 NXJ がパ ッ ケージ さ れる フ ァ イルを ア セ ン ブル し たデ ィ レ ク ト リ を示す java.io.File オ ブ ジ ェ ク ト です。 こ のデ ィ レ ク ト リ は、 3 つのその 他のデ ィ レ ク ト リ があ り ます。 META-INF デ ィ レ ク ト リ には、 J2EE ア プ リ ケーシ ョ ン用のデ ィ ス ク リ プ タ であ る application.xml フ ァ イルがあ り ます。 jar-contents デ ィ レ ク ト リ には、 ア プ リ ケーシ ョ ンの EJB 部分の フ ァ イルがあ り ます。 EJB デ ィ ス ク リ プ タ は、 jar-contents/META-INF/ejb-jar.xml です。 war-contents デ ィ レ ク ト リ には、 ア プ リ ケーシ ョ ンの Web ア プ リ ケーシ ョ ン 部分の フ ァ イルがあ り ます。 Web ア プ リ ケーシ ョ ン デ ィ ス ク リ プ タ は、 warcontents/META-INF/web.xml です。 注 – ear-contents デ ィ レ ク ト リ 構造は、 NXJ の今後の リ リ ース では変更の予定があ り ます。 • java.util.Properties オ ブ ジ ェ ク ト makeHook メ ソ ッ ド に渡 さ れる 2 つ目の引数は、 java.util.Properties オ ブ ジ ェ ク ト です。 こ のオ ブ ジ ェ ク ト は、 Make Hook を構成する と き に定義 さ れた プ ロパテ ィ を含みます。 (下の Make Hook の構成を参照 し て く だ さ い。) • com.unify.ide.nxj.make.NXJMakeHookCallback オ ブ ジ ェ ク ト makeHook に渡 さ れる最後の引数は、 com.unify.ide.nxj.make.NXJMakeHookCallback オ ブ ジ ェ ク ト です。 こ のオ ブ ジ ェ ク ト では、 ア プ リ ケーシ ョ ン デザ イ ナの コ ンパ イ ラ ウ ィ ン ド ウで メ ッ セージ を表示可能な 3 つの メ ソ ッ ド があ り ます。 public void displayMessage(String msg); public void displayWarning(String msg); public void displayError(String msg); Make 処理のカ ス タ マ イ ズ 2 最初の 2 つの メ ソ ッ ド は、 コ ンパ イ ラ ウ ィ ン ド ウに メ ッ セージ を表示 し て処理を 続けます。 表示エ ラ ーに よ り 表示 さ れる メ ッ セージは、 コ ンパ イ ラ ウ ィ ン ド ウに 赤で表示 さ れます。 makeHook メ ソ ッ ド に よ っ て エ ラ ーが表示 さ れる と 、 NXJ は makeHook メ ソ ッ ド の処理を中止 し て戻 り ます。 サン プル Make Hook 下記の コ ー ド は、 EJB デ ィ ス ク リ プ タ フ ァ イルに環境エ ン ト リ を追加する Make Hook の例です。 こ の例では、 一行ずつ フ ァ イルを読み込んで、 フ ァ イルの新 し い バージ ョ ン に書き込む作業を し ます。 フ ァ イルの適切な位置に達する と 、 プ ロパ テ ィ オ ブ ジ ェ ク ト で渡 さ れる各プ ロパテ ィ の <env-entry> 宣言を すべて書 き出 し ま す。 プ ロパテ ィ 名は、 エ ン ト リ の名前 と し て使用 さ れます。 プ ロパテ ィ 値は、 エ ン ト リ に割 り 当て る値を含む文字列 と な り ます。 ま た、 値の後にセ ミ コ ロ ン を加え る こ と で、 エ ン ト リ の タ イ プ と エ ン ト リ (デ フ ォ ル ト は、 java.lang.String) の ク ラ ス タ イ プ を宣言する こ と がで き ます。 最後に、 2 つ目のセ ミ コ ロ ン と 説明を追加す る こ と がで き ます。 タ イ プ と 説明はオ プ シ ョ ン です。 その後、 Make Hook は、 フ ァ イルの残 り の書き出 し を継続 し て終了 し ます。 import java.io.*; import java.util.*; import com.unify.nxj.ide.make.*; public class EJBEnvHook implements NXJMakeHook { public void makeHook ( File earContentsDir, Properties props, NXJMakeHookCallback callback) { File orig = new File( earContentsDir.getPath() + "/jar-contents/META-INF/ejb-jar.xml"); if ( orig.exists() ) { File backup = new File( orig.getPath() + ".bu" ); if ( !orig.renameTo( backup ) ) { callback.displayWarning("Cannot rename the xml file. Make will continue with the unmodified file."); } BufferedReader in = null; Make 処理のカ ス タ マ イ ズ 3 BufferedWriter out = null; try { in = new BufferedReader( new FileReader( backup ) ); out = new BufferedWriter( new FileWriter( orig ) ); String nextLine = null; boolean inBean = false; while ( (nextLine = in.readLine()) != null ) { if ( inBean ) { // Add our entries at the end of the declaration // for the bean if ( nextLine.indexOf("</session>") > 0 ) { Enumeration propNames = props.propertyNames(); while ( propNames.hasMoreElements() ) { String propName = (String)propNames.nextElement(); callback.displayMessage("Adding Env Entry: " + propName); if ( propName.equals("test") ) throw new Exception("this is a test"); out.write("<env-entry>¥n"); out.write("<env-entry-name>" + propName + "</env-entry-name>¥n"); String property = (String)props.getProperty(propName); StringTokenizer prop = new StringTokenizer(property, ";"); out.write("<env-entry-value>" + prop.nextToken() + "</env-entry-value>¥n"); if ( prop.hasMoreTokens() ) out.write("<env-entry-type>" + prop.nextToken() + "</env-entry-type>¥n"); else out.write("<env-entry-type>java.lang.String</env-entrytype>¥n"); if ( prop.hasMoreTokens() ) out.write("<description>" + prop.nextToken() + "</description>¥n" ); out.write("</env-entry>¥n"); } inBean = false; } } else { // This line indicates the start of the <session> bean Make 処理のカ ス タ マ イ ズ 4 // we want to modify if ( nextLine.indexOf("nxjFieldManager_ID") > 0 ) inBean = true; } out.write(nextLine); out.newLine(); } // end while } catch ( Exception e ) { callback.displayError( "An error occurred while executing the make hook: " + e.getMessage()); callback.displayError("Make process will now stop."); } finally { try { out.flush(); out.close(); in.close(); backup.delete(); } catch ( Exception e2 ) {} } } }// end makeHook } Make Hook の構成 Make Hook を作成 し た場合、 プ ロ ジ ェ ク ト の ク ラ スパスにそれを追加 し なければ な り ません。 Java フ ァ イルがプ ロ ジ ェ ク ト の一部であ る場合、 デ フ ォ ル ト で ク ラ スは ク ラ スパス上にあ り ますが、 ア プ リ ケーシ ョ ン を構築する と き、 ク ラ スはア プ リ ケーシ ョ ン アー カ イ ブ に も 含め ら れます。 そのため、 Make Hook の作成が終 わ っ た ら 、 Jar フ ァ イル中に Make Hook をパ ッ ケージ し て、 プ ロ ジ ェ ク ト > プ ロ パテ ィ > ク ラ スパスパネル で ク ラ スパス エ ン ト リ と し て追加す る こ と を推奨 し ま す。 ク ラ スがアー カ イ ブ に含め ら れない よ う に、 ‘EAR に含める ’ チ ェ ッ ク ボ ッ ク ス を ク リ アに し ます。 Make Hook は、 プ ロ ジ ェ ク ト > プ ロパテ ィ > Make Hook パネルで構成 し ます。 Make Hook ク ラ ス名は、 Make Hook Class 固有の名前です。 こ の例では、 ‘EJBEnvHook’ です。 Make 処理のカ ス タ マ イ ズ 5 新 し いエ ン ト リ を追加す る には 追加 ボ タ ン を ク リ ッ ク し て、 ダ イ ア ロ グで必要数 のプ ロパテ ィ を追加 し ます。 サン プル Make Hook が こ れ ら のプ ロパテ ィ を使用す る方法については、 上記の説明を参照 し て く だ さ い。 実行する場合は OK ボ タ ン を ク リ ッ ク し ます。 Make Hook によ る動作 サン プル Make Hook を試行す る場合は、 EJB 環境エ ン ト リ を取得す る ために標準 の J2EE メ ソ ッ ド を使用す る フ ォ ーム を作成 し ます。 プ ロ ジ ェ ク ト に フ ォ ームを追 加 し て、 フ ォ ームに テキス ト フ ィ ール ド を配置 し ます。 テキス ト フ ィ ール ド 名を ‘envEntry’ に変更 し ます。 フ ォ ームにエ ン ト リ ポ イ ン ト を追加 し ます。 フ ォ ームの BEFORE FORM セ ク シ ョ ン で コ ー ド を追加 し ます。 ‘Test’ と い う String プ ロパテ ィ でサン プル Make Hook を構成する場合、 以下の コ ー ド で取得する こ と がで き ます。 BEFORE FORM { Context jndiCtx = new InitialContext(); Object obj = jndiCtx.lookup("java:comp/env/Test"); String value = (String)PortableRemoteObject(obj, java.lang.String.class); envEntry = value; } Make 処理のカ ス タ マ イ ズ 6 ア プ リ ケーシ ョ ン を実行 し ます。 NXJ がア プ リ ケーシ ョ ン を構築中に、 各プ ロパ テ ィ のために コ ンパ イ ラ ウ ィ ン ド ウに表示 さ れる ‘Adding Env Entry: Test’ と い う メ ッ セージ を確認する必要があ り ます。 ア プ リ ケーシ ョ ンの実行時、 フ ォ ームは 表示 さ れ、 そのテキス ト フ ィ ール ド は、 Make Hook を構成 し た と き に設定 し た値 を含んでいます。 Make 処理のカ ス タ マ イ ズ 7
© Copyright 2024 Paperzz