PHP API コードの使用例

以下の一般的なタスクについての PHP API コードの例を、ユーザー独自の PHP コードを作成してパターン・インスタンスを変更する際にお役立てください。

このタスクの概要

以下の例は、ユーザー定義パターンの作成時に一般的なタスクを完了するために使用できる PHP コードを示しています。

手順

  • 追加の PHP スクリプトを実行します。
    以下の例は、mb_pattern_run_template() 関数を使用することにより、PHP スクリプトが別の PHP スクリプトを実行する方法を示しています。 mb_pattern_run_template() 関数は、以下のパラメーターを使用します。
    1. mb_pattern_run_template() が必要とする最初のパラメーターは、PHP テンプレートを含むプロジェクトの名前です。この例では、Transform です。
    2. mb_pattern_run_template() が必要とする 2 番目のパラメーターは、実行する PHP スクリプトの名前です。この例では example.esql.php であり、mqsi という名前のサブフォルダー内にあります。
    3. mb_pattern_run_template() が必要とする 3 番目のパラメーターは出力が書き込まれるファイルの名前です。この例では example.esql であり、これはサブフォルダー mqsi 内にあります。
    この例のユーザー定義パターンには、includeErrorHandling という名前のブール値パターン・パラメーターが含まれています。 このパターン・パラメーターは、パターン内にチェック・ボックスを作成するために使用されます。
    <?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"
    				  }
    			}
    	}