2014-09-28
■[Java][並列計算][分散計算] Javaで分散処理
Javaで分散処理する必要が生じたので、調査のメモ。今回は、以下のページを参考にCORBA+RMIで分散処理をしてみることにする。OSはUbuntu14.04。
クラウドで再注目の「分散コンピューティング」の常識
上記のリンク先の説明を読むと、Java SE 5以前は、クライアント側にスタブが、サーバ側にスケルトンが必要だったが、Java SE 5以降は不要になってJavaプログラムだけが必要な状況のようだ。
JBossToolsのインストール
JBoss EAPをダウンロードして、bin直下のrun.shを実行しようとすると、以下のエラーが出る。
$ ./run.sh ./run.sh: 3: ./run.sh: Bad substitution ======================================================================================== To start a JBoss Enterprise Application Platform 6 Standalone Server, a single server instance, use the command: /home/sfchaos/Downloads/jboss-eap-6.3/bin/standalone.sh To start a JBoss Enterprise Application Platform 6 Managed Domain, allowing control and management of multiple instances, use the command: /home/sfchaos/Downloads/jboss-eap-6.3/bin/domain.sh
そこで、ここではstandaloneモードで起動しよう。
$ ./standalone.sh
分散アプリケーションの実装
サーバ側は、次のように接続方法の定義し、その接続方法を用いた待ち受け状態にし、クライアントからのメソッド呼び出しの動作について設定する。
ServerClient.java
package remoting.server.test; import org.jboss.remoting.InvokerLocator; import org.jboss.remoting.transport.Connector; public class SimpleServer { public static void main(String[] args) throws Exception { InvokerLocator myLocator = new InvokerLocator("socket://127.0.0.1:8080"); Connector connector = new Connector(); connector.setInvokerLocator(myLocator.getLocatorURI()); connector.start(); connector.addInvocationHandler("simpleSystem",new SimpleServerInvocationHandler()); try { while (true) { Thread.sleep(1000); } } catch (Exception e) { e.printStackTrace(); } } }
SimpleServerInvocator.java
package remoting.server.test; import javax.management.MBeanServer; import org.jboss.remoting.InvocationRequest; import org.jboss.remoting.ServerInvocationHandler; import org.jboss.remoting.ServerInvoker; import org.jboss.remoting.callback.InvokerCallbackHandler; /** * メソッド呼び出しのためのハンドラ */ public class SimpleServerInvocationHandler { /** * 受信したメッセージを処理し、メッセージを返却します。 */ public Object invoke(InvocationRequest invocation) { System.out.println(" request:「" + invocation.getParameter() + "」"); return "ServerからClientへ"; } public void addListener(InvokerCallbackHandler arg0) { } public void removeListener(InvokerCallbackHandler arg0) { } public void setInvoker(ServerInvoker arg0) { } public void setMBeanServer(MBeanServer arg0) { } }
一方で、クライアント側は次のように、リモート呼び出しが実行されるinvokeメソッドを実装して、呼び出し元へ処理結果を返す。
SimpleClient.java
package remoting.server.test; import javax.management.MBeanServer; import org.jboss.remoting.InvocationRequest; import org.jboss.remoting.ServerInvocationHandler; import org.jboss.remoting.ServerInvoker; import org.jboss.remoting.callback.InvokerCallbackHandler; /** * メソッド呼び出しのためのハンドラ */ public class SimpleServerInvocationHandler { /** * 受信したメッセージを処理し、メッセージを返却します。 */ public Object invoke(InvocationRequest invocation) { System.out.println(" request:「" + invocation.getParameter() + "」"); return "ServerからClientへ"; } public void addListener(InvokerCallbackHandler arg0) { } public void removeListener(InvokerCallbackHandler arg0) { } public void setInvoker(ServerInvoker arg0) { } public void setMBeanServer(MBeanServer arg0) { } }
あとは、このプログラムを実行すればO.K.
トラックバック - http://d.hatena.ne.jp/sfchaos/20140928/p1
リンク元
- 1048 https://www.google.co.jp/
- 219 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CB8QFjAA&url=http://d.hatena.ne.jp/sfchaos/20140915/p1&ei=91IoVO2ZLte58gXmuID4Bg&usg=AFQjCNEKsup8xVC3kqOw49F5JI2qy79GVg&sig2=lvL_CTECxQIhME4SZWTqyg&bvm=bv.76247554,d.dGc
- 90 http://www.google.co.jp/url?url=http://d.hatena.ne.jp/sfchaos/20140923/p1&rct=j&frm=1&q=&esrc=s&sa=U&ei=TQgpVIS3Bobz8gWZ_oGQCA&ved=0CB0QFjAB&usg=AFQjCNGcdIz95N0BJYGws-B62o3FPO_U_w
- 86 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCQQFjAB&url=http://d.hatena.ne.jp/sfchaos/20110630/p1&ei=xHYpVO_ADteE8gXri4C4Bg&usg=AFQjCNH1q4pvStHgNGSOXOqmVm2rj6GvUg&sig2=XIVWkO21j-e1cuvGzn3GhA&bvm=bv.76247554,d.dGc
- 82 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&ved=0CDUQFjAD&url=http://d.hatena.ne.jp/sfchaos/20140928/p1&ei=sQ0pVNCCJNTg8AWDgoGQCg&usg=AFQjCNFI4MivrwfVCKpnE0zlo_0ycVUulg&bvm=bv.76247554,d.dGc
- 81 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0CCwQFjAC&url=http://d.hatena.ne.jp/sfchaos/20140308/p1&ei=7hEpVMS0KMP88AW2z4DABw&usg=AFQjCNGMm8pBqfWT48QCvNa7Nh0QLzlTOA&bvm=bv.76247554,d.dGc
- 73 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&frm=1&source=web&cd=2&ved=0CCMQFjAB&url=http://d.hatena.ne.jp/sfchaos/20140928/p1&ei=GBQpVNjKGYLz8QWD94LgBg&usg=AFQjCNFI4MivrwfVCKpnE0zlo_0ycVUulg
- 55 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&cad=rja&uact=8&ved=0CDcQFjAE&url=http://d.hatena.ne.jp/sfchaos/20140114/p1&ei=U8MoVPndKs798AWDjILoBg&usg=AFQjCNGjXW4izO7mAX0o0TJBEqdZYPk7rA&bvm=bv.76247554,d.dGc
- 46 https://www.google.com/
- 31 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=6&ved=0CDwQFjAF&url=http://d.hatena.ne.jp/sfchaos/20111202/p1&ei=VuErVOnWGYjN8gW3mYKQBg&usg=AFQjCNHf-64F3OEkVCegK3drLrzkwCFGaQ&sig2=iHaRcxOEUllvXJjCZ4jMFQ&bvm=bv.76477589,d.dGc&cad