PHP API コードの使用例
以下の一般的なタスクについての PHP API コードの例を、ユーザー独自の PHP コードを作成してパターン・インスタンスを変更する際にお役立てください。
このタスクの概要
手順
- 追加の PHP スクリプトを実行します。以下の例は、mb_pattern_run_template() 関数を使用することにより、PHP スクリプトが別の PHP スクリプトを実行する方法を示しています。 mb_pattern_run_template() 関数は、以下のパラメーターを使用します。
- mb_pattern_run_template() が必要とする最初のパラメーターは、PHP テンプレートを含むプロジェクトの名前です。この例では、Transform です。
- mb_pattern_run_template() が必要とする 2 番目のパラメーターは、実行する PHP スクリプトの名前です。この例では example.esql.php であり、mqsi という名前のサブフォルダー内にあります。
- mb_pattern_run_template() が必要とする 3 番目のパラメーターは出力が書き込まれるファイルの名前です。この例では example.esql であり、これはサブフォルダー mqsi 内にあります。
<?php if ($_MB['PP']['includeErrorHandling'] == 'true') { mb_pattern_run_template("Transform", "mqsi/example.esql.php", "mqsi/example.esql"); } ?>
- ESQL のマークアップにより PHP スクリプトを使用します。以下の例では、ユーザー定義パターンに errorQueue という名前のパターン・パラメーターが含まれます。このパラメーターには、none または errorAction の値を格納できます。
BROKER SCHEMA mqsi <?php if ($_MB['PP']['errorAction'] == 'errorQueue') { echo "DECLARE ErrorAction EXTERNAL CHARACTER '".$_MB['PP']['errorAction']."';"; echo <<<ESQL CREATE FILTER MODULE CheckErrorAction CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN IF ErrorAction = 'errorQueue' THEN RETURN TRUE; ELSE RETURN FALSE; END IF; END; END MODULE; ESQL; } ?>
- PHP スクリプトを使用して、プロジェクトからファイルを削除します。 以下の例では、スクリプトは最初に、パターン・パラメーター ID が pp1 であるチェック・ボックス・パターン・パラメーターの値を確認します。 このパラメーターが false に設定されると、スクリプトにより、パターン・インスタンス・プロジェクトから Log.msgflow ファイルと Log.esql ファイルが削除されます。 メッセージ・フロー・ファイルは、removeMessageFlow() 関数を使用して削除する必要があります。 メッセージ・フロー以外のファイルは、標準 PHP 関数の unlink() を使用して削除できます。
if ($_MB['PP']['pp1'] == 'false') { $pim = $_MB["PATTERN_INSTANCE_MANAGER"]; $logmsgflow = $pim->getMessageFlow("Example_Flows", "mqsi/Log.msgflow"); $pim->removeMessageFlow($logmsgflow); $piworkspace = $pim->getWorkspaceLocation(); $piname = $pim->getPatternInstanceName(); $logesql = $piworkspace . "/" . $piname . "_Example_Flows/mqsi/Log.esql"; unlink($logesql); }
- 静的 Java メソッドを使用して PHP から Java™ コードを実行する。 以下の例は、PHP スクリプト内から実行できる Java クラス マイ・クラスを示しています。 このクラスには、静的メソッドが含まれます。
package com.your.company.domain.code; import com.ibm.broker.config.appdev.MessageFlow; import com.ibm.broker.config.appdev.patterns.GeneratePatternInstanceTransform; import com.ibm.broker.config.appdev.patterns.PatternInstanceManager; public class MyClass implements GeneratePatternInstanceTransform { public static void doSomethingUseful(String message) { System.out.println("Message received [" + message + "]"); } @Override public void onGeneratePatternInstance(PatternInstanceManager patternInstanceManager) { } }
以下の例に示すように、PHP から MyClass クラスを実行できます。 イン・ザ・ライン
$class = $pim->getPluginClass("com.your.company.domain.code", "com.your.company.domain.code.MyClass")
最初の引数はcom.your.company.domain.code
は、Java クラスが含まれているプラグインの ID です。 2 番目の引数com.your.company.domain.code.MyClass
は、クラスの名前です。<?php $pim = $_MB["PATTERN_INSTANCE_MANAGER"]; $class = $pim->getPluginClass("com.your.company.domain.code", "com.your.company.domain.code.MyClass"); java_import("com.your.company.domain.code.MyClass"); MyClass::doSomethingUseful("Hello!"); ?>
- 非静的 Java メソッドを使用して PHP から Java コードを実行する。 以下の例は、PHP スクリプト内から実行できる Java クラス マイ・クラスを示しています。 このクラスには、静的ではないメソッドが含まれます。
package com.your.company.domain.code; import com.ibm.broker.config.appdev.MessageFlow; import com.ibm.broker.config.appdev.patterns.GeneratePatternInstanceTransform; import com.ibm.broker.config.appdev.patterns.PatternInstanceManager; public class MyClass implements GeneratePatternInstanceTransform { public void doSomethingUseful(String message) { System.out.println("Message received [" + message + "]"); } @Override public void onGeneratePatternInstance(PatternInstanceManager patternInstanceManager) { } }
以下の例に示すように、PHP から MyClass クラスを実行できます。 イン・ザ・ライン
$class = $pim->getPluginClass("com.your.company.domain.code", "com.your.company.domain.code.MyClass")
最初の引数はcom.your.company.domain.code
は、Java クラスが含まれているプラグインの ID です。 2 番目の引数com.your.company.domain.code.MyClass
は、クラスの名前です。 クラスの新規インスタンスが次の行に作成されます。$obj = $class->newInstance()
。この例の最後の行では、doSomethingUseful()
クラスのメソッドが実行されます。<?php $pim = $_MB["PATTERN_INSTANCE_MANAGER"]; $class = $pim->getPluginClass("com.your.company.domain.code", "com.your.company.domain.code.MyClass"); $obj = $class->newInstance(); $obj->doSomethingUseful("Hello!"); ?>
- PHP スクリプトを使用してテーブルの値を読み取ります。 以下の例で、PHP スクリプトは、スーパーグローバル変数 $_MB に保管された配列から値を取り出します。 まず、スクリプトは event 変数と response 変数に保管された値を見つけるために配列の中を検索し、それらの値を返します。
<?php $pim = $_MB["PATTERN_INSTANCE_MANAGER"]; $table = $pim->getParameterTable("table1"); $count = $table->getRowCount(); for ($j=0;$j<$count ;$j++ ) { echo "".$_MB['PP']['table1'][$j]['event']."';\n"; echo "".$_MB['PP']['table1'][$j]['response']."';\n"; } ?>
配列の構造は次のとおりです。
array(4) { ["PATTERN_INSTANCE_MANAGER"]=> object(Java)#1 (0) { } ["PP"]=> array(10) { ["queueName"]=>string(11) "QP.QUEUE.QS" ["configurePrefixSuffix"]=>string(5) "false" ["queuePrefix"]=>string(3) "QP." ["queueSuffix"]=>string(3) ".QS" ["logging"]=>string(5) "queue" ["generateMessageSet"]=>string(4) "true" ["table1"]=> array(2) { [0]=> array(2) { ["event"]=>string(6) "event1" ["response"]=>string(9) "response1" } [1]=> array(2) { ["event"]=>string(6) "event2" ["response"]=>string(9) "response2" } } }