Main Content

MWHttpClient クラスを使用した MATLAB Production ServerJava クライアントの作成

この例では、Java® クライアント API から MWHttpClient クラスを使用して、MATLAB® Production Server™ クライアントを記述する方法を説明します。Java クライアント ライブラリの取得の詳細については、Obtain and Configure Client Library (MATLAB Production Server)を参照してください。Java コードで、以下を行います。

  • デプロイされた MATLAB 関数を表す Java インターフェイスを定義する。

  • サーバーと通信するための静的プロキシ オブジェクトをインスタンス化する。

  • デプロイされた関数を Java コードで呼び出す。

Java MATLAB Production Server クライアント アプリケーションを作成するには、以下を行います。

  1. 新しいファイル、たとえば MPSClientExample.java を作成します。

  2. テキスト エディターを使用して、MPSClientExample.java を開きます。

  3. 次のインポート ステートメントをファイルに追加します。

    import java.net.URL;
    import java.io.IOException;
    import com.mathworks.mps.client.MWClient;
    import com.mathworks.mps.client.MWHttpClient;
    import com.mathworks.mps.client.MATLABException;
    
  4. デプロイされた MATLAB 関数を表す Java インターフェイスを追加します。

    たとえば、サーバーへデプロイされた次の関数 addmatrix を考えます。デプロイ用の関数の記述とコンパイルの詳細については、MATLAB Production Server 用のデプロイ可能なアーカイブの作成 (MATLAB Production Server)を参照してください。サーバーへの関数のデプロイについては、MATLAB Production Server へのアーカイブのデプロイ (MATLAB Production Server)を参照してください。

    function a = addmatrix(a1,a2)
    
    a = a1 + a2;

    関数 addmatrix のインターフェイスは次のとおりです。

    interface MATLABAddMatrix {
           double[][] addmatrix(double[][] a1, double[][] a2)
             throws MATLABException, IOException;
       } 
    

    インターフェイスを作成するときには、次の点に注意してください。

    • インターフェイスには、任意の有効な Java 名を与えることができる。

    • このインターフェイスによって定義されるメソッドには、デプロイされた MATLAB 関数と同じ名前を指定しなければならない。

    • Java メソッドは、型と数の両方が同じ、MATLAB 関数でサポートされる入力と出力をサポートしなければならない。データ型の変換と、より複雑な MATLAB 関数シグネチャの処理方法の詳細については、Data Conversion with Java and MATLAB Types (MATLAB Production Server)およびConversion of Java Types to MATLAB Types (MATLAB Production Server)を参照してください。

    • Java メソッドは、MATLAB の例外および I/O の例外を処理しなければならない。

  5. 次のクラス定義を追加します。

    public class MPSClientExample
    {
    }

    これで、このクラスに、生成されたクラスを呼び出す main メソッド 1 つが設けられます。

  6. main() メソッドをアプリケーションに追加します。

    public static void main(String[] args)
    {
    } 
  7. main() メソッドの冒頭に次のコードを追加し、アプリケーションで使用される変数を初期化します。

    double[][] a1={{1,2,3},{3,2,1}};
    double[][] a2={{4,5,6},{6,5,4}};
  8. MWHttpClient コンストラクターを使用して、クライアント オブジェクトをインスタンス化します。

    MWClient client = new MWHttpClient();

    このクラスは、アプリケーションとサーバー インスタンス間の HTTP 接続を確立します。

  9. 動的プロキシを作成するために、クライアント オブジェクトの createProxy メソッドを呼び出します。

    デプロイ可能なアーカイブの URL とインターフェイス class の名前を、引数として指定しなければなりません。

    MATLABAddMatrix m = client.createProxy(new URL("http://localhost:9910/addmatrix"),
                                           MATLABAddMatrix.class);
    

    プロキシの作成に使用される URL の値 ("http://localhost:9910/addmatrix") には、3 つの部分が含まれています。

    • サーバー アドレス (localhost)。

    • ポート番号 (9910)。

    • アーカイブ名 (addmatrix)。

    createProxy メソッドの詳細については、matlabroot/toolbox/compiler_sdk/mps_clients フォルダーにある Javadoc を参照してください。

  10. インターフェイスのパブリック メソッドを呼び出すことにより、デプロイされた MATLAB 関数を Java アプリケーションで呼び出します。

      double[][] result = m.addmatrix(a1,a2);
  11. システム リソースを解放するために、クライアント オブジェクトの close() メソッドを呼び出します。

    client.close();
  12. Java ファイルを保存します。

    完成した Java ファイルは次のようになります。

    import java.net.URL;
    import java.io.IOException;
    import com.mathworks.mps.client.MWClient;
    import com.mathworks.mps.client.MWHttpClient;
    import com.mathworks.mps.client.MATLABException;
    
    interface MATLABAddMatrix 
      {
        double[][] addmatrix(double[][] a1, double[][] a2)
             throws MATLABException, IOException;
      }
    
    public class MPSClientExample {
        
        public static void main(String[] args){
        
            double[][] a1={{1,2,3},{3,2,1}};
            double[][] a2={{4,5,6},{6,5,4}};
            
            MWClient client = new MWHttpClient();
            
            try{
                MATLABAddMatrix m = client.createProxy(new URL("http://localhost:9910/addmatrix"),
                                                    MATLABAddMatrix.class);
                double[][] result = m.addmatrix(a1,a2);
                
                // Print the resulting matrix
                printResult(result);
                
            }catch(MATLABException ex){
            
                // This exception represents errors in MATLAB 
                   System.out.println(ex);            
            }catch(IOException ex){
            
                // This exception represents network issues. 
                   System.out.println(ex);                    
            }finally{
            
                client.close();        
            }
        }
        
        private static void printResult(double[][] result){
            for(double[] row : result){
                for(double element : row){
                    System.out.print(element + " ");
                }
                System.out.println();
            }        
        }
    }
  13. javac コマンドを使用するか、Java IDE のビルド機能を使用して、Java アプリケーションをコンパイルします。

    たとえば、Windows® のコマンド プロンプトで次を入力します。

    javac -classpath "matlabroot\toolbox\compiler_sdk\mps_clients\java\mps_client.jar" MPSClientExample.java
    
  14. java コマンドまたは IDE を使用してアプリケーションを実行します。

    たとえば、Windows のコマンド プロンプトで次を入力します。

    java -classpath .;"matlabroot\toolbox\compiler_sdk\mps_clients\java\mps_client.jar" MPSClientExample
    

    Linux® システムおよび macOS システムでアプリケーションを実行するには、コロン (:) を使用して複数のパスを区切ります。

    アプリケーションがコンソールに次の内容を返します。

    5.0 7.0 9.0
    9.0 7.0 5.0

関連するトピック