MWHttpClient
クラスを使用した MATLAB Production Server の Java クライアントの作成
この例では、Java® クライアント API から MWHttpClient
クラスを使用して、MATLAB® Production Server™ クライアントを記述する方法を説明します。Java クライアント ライブラリの取得の詳細については、Obtain and Configure Client Libraryを参照してください。Java コードで、以下を行います。
デプロイされた MATLAB 関数を表す Java インターフェイスを定義する。
サーバーと通信するための静的プロキシ オブジェクトをインスタンス化する。
デプロイされた関数を Java コードで呼び出す。
Java MATLAB Production Server クライアント アプリケーションを作成するには、以下を行います。
新しいファイル、たとえば
MPSClientExample.java
を作成します。テキスト エディターを使用して、
MPSClientExample.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;
デプロイされた MATLAB 関数を表す Java インターフェイスを追加します。
たとえば、サーバーへデプロイされた次の関数
addmatrix
を考えます。デプロイ用の関数の記述とコンパイルの詳細については、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およびConversion of Java Types to MATLAB Typesを参照してください。
Java メソッドは、MATLAB の例外および I/O の例外を処理しなければならない。
次のクラス定義を追加します。
public class MPSClientExample { }
これで、このクラスに、生成されたクラスを呼び出す
main
メソッド 1 つが設けられます。main()
メソッドをアプリケーションに追加します。public static void main(String[] args) { }
main()
メソッドの冒頭に次のコードを追加し、アプリケーションで使用される変数を初期化します。double[][] a1={{1,2,3},{3,2,1}}; double[][] a2={{4,5,6},{6,5,4}};
MWHttpClient
コンストラクターを使用して、クライアント オブジェクトをインスタンス化します。MWClient client = new MWHttpClient();
このクラスは、アプリケーションとサーバー インスタンス間の HTTP 接続を確立します。
動的プロキシを作成するために、クライアント オブジェクトの
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
メソッドの詳細については、
フォルダーにある Javadoc を参照してください。ここで、$MPS_INSTALL
/client$MPS_INSTALL
は MATLAB Production Server インストール フォルダーの名前です。インターフェイスのパブリック メソッドを呼び出すことにより、デプロイされた MATLAB 関数を Java アプリケーションで呼び出します。
double[][] result = m.addmatrix(a1,a2);
システム リソースを解放するために、クライアント オブジェクトの
close()
メソッドを呼び出します。client.close();
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(); } } }
javac
コマンドを使用するか、Java IDE のビルド機能を使用して、Java アプリケーションをコンパイルします。たとえば、Windows® のコマンド プロンプトで次を入力します。
javac -classpath "
MPS_INSTALL_ROOT
\client\java\mps_client.jar" MPSClientExample.javajava
コマンドまたは IDE を使用してアプリケーションを実行します。たとえば、Windows のコマンド プロンプトで次を入力します。
java -classpath .;"
MPS_INSTALL_ROOT
\client\java\mps_client.jar" MPSClientExampleLinux® システムおよび macOS システムでアプリケーションを実行するには、コロン (
:
) を使用して複数のパスを区切ります。アプリケーションがコンソールに次の内容を返します。
5.0 7.0 9.0 9.0 7.0 5.0