Spring Remoting-Spring + RMI

春のリモーティング



springフレームワークは、分散アプリケーションを作成するための広範な機能を提供します。 リモートサービスの作成に役立つだけでなく、それらへのアクセスを簡素化します。 現時点では、フレームワークを使用して、CauchoのHessianとBurlap、HTTP、RMIなどを介したリモートアクセスの独自の実装など、多数の技術を使用してリモートアクセスを整理できます。 catの下で、 RMIを使用して分散アプリケーションを作成するためのSpringフレームワークの簡単な概要。







春のリモーティング





前の記事で始めた例に戻りましょう。



数学演算とその2つの実装ActionAddおよびActionMultiplyを表すActionインターフェースが検討されました。



public interface Action { long performAction(long op1, long op2); String getName(); } public class ActionAdd implements Action { @Override public long performAction(long op1, long op2) { return op1 + op2; } @Override public String getName() { return " + "; } } public class ActionMultiply implements Action { @Override public long performAction(long op1, long op2) { return op1 * op2; } @Override public String getName() { return " * "; } }
      
      







そして、Calculatorの実装を備えたICalculatorインターフェース:



 public interface ICalculator { public void setAction(Action act); public String calc(String[] args); } public class Calculator implements ICalculator { private Action action; @Override public void setAction(Action action) { this.action = action; } @Override public String calc(String[] args) { long op1 = Long.parseLong(args[0]); long op2 = Long.parseLong(args[1]); return op1 + action.getName() + op2 + " = " + action.performAction(op1, op2); } }
      
      







オブジェクトは、スプリングIoCコンテナーに配置されました。



 <beans> <bean id="multiply" class="springtest.operations.ActionMultiply" /> <bean id="add" class="springtest.operations.ActionAdd" /> <bean id="calculator" class="springtest.calculator.Calculator"> <property name="action" ref="add" /> </bean> </beans>
      
      







そして、すでに作成されたオブジェクトがコンテナから抽出されました:



 ICalculator calc = (ICalculator) factory.getBean("alculator"); System.out.print(calc.calc(new String[] {"30", "60"}));
      
      







配布。





これで、アプリケーションを分散させることが決定されました。1台のコンピューターは大きな計算負荷に対処できません。 Javaは、このような場合に備えて、RMI-リモートメソッド呼び出し、リモートメソッドを呼び出すためのプログラミングインターフェイスを提供します。 しかし、Spring Remotingを使用すると、すべてが単純ではありません。



RMIサーバーを作成するために必要なことは、コンテナで特別なBeanを宣言することだけです-RMIサービス:



 <bean class="org.springframework.remoting.rmi.RmiServiceExporter"> <property name="serviceName" value="Calculator"/> <property name="service" ref="calculator"/> <property name="serviceInterface" value="springtest.calculator.ICalculator"/> <property name="registryPort" value="1199"/> </bean>
      
      







分散アプリケーションのサーバーを起動します。



 public class ActionServer { public static void main(String[] args) { new ClassPathXmlApplicationContext("xml-beans.xml"); } }
      
      







XMLファイルを読み取ることにより、Springは必要なすべてを実行します。 始めます。



 Mar 24, 2011 5:14:24 PM org.springframework.remoting.rmi.RmiServiceExporter getRegistry INFO: Looking for RMI registry at port '1199' Mar 24, 2011 5:14:24 PM org.springframework.remoting.rmi.RmiServiceExporter sourcepare INFO: Binding service 'Calculator' to RMI registry: RegistryImpl_Stub[UnicastRef [liveRef: [endpoint:[127.0.1.1:1199](remote),objID:[0:0:0, 0]]]]
      
      







サーバーの準備ができました。



次に、クライアントを作成する必要があります。 電卓のラッパーであるClientCalculatorクラスを作成しましょう。



 public class ClientCalculator { private ICalculator calculator; public void setCalculator(ICalculator calculator) { this.calculator = calculator; } public ICalculator getCalculator() { return calculator; } }
      
      







クライアントアプリケーション用に、IoC XMLコンテナーを作成します。



 <beans> <bean id="clientCalculator" class="springrmi.client.ClientCalculator"> <property name="calculator" ref="remoteCalculator"/> </bean> <bean id="remoteCalculator" class="org.springframework.remoting.rmi.RmiProxyFactoryBean"> <property name="serviceUrl" value="rmi://localhost:1199/Calculator"/> <property name="serviceInterface" value="springtest.calculator.ICalculator"/> </bean> </beans>
      
      







リモートオブジェクトを作成して使用するには、必要なインターフェイスを返すRmiProxeFactoryBeanを使用します。 そして、新しく作成されたclientCalculatorラッパーに渡します。



クライアントクラスを作成して確認します。



 public class Client { public static void main(String[] args) { ApplicationContext factory = new ClassPathXmlApplicationContext("springrmi/client/client-beans.xml"); ClientCalculator calc = (ClientCalculator) factory.getBean("clientCalculator"); System.out.print(calc.getCalculator().calc(new String[] {"30", "60"})); } }
      
      







 30 + 60 = 90
      
      







すべて準備完了です。 分散アプリケーションを入手しました。



ソース:

http://narod.ru/disk/8319633001/springrmi.tar.gz.html



使用されたソース:

http://static.springsource.org/spring/docs/2.0.x/reference/remoting.html



RMIに加えて、Spring Remotingは他のサービスもサポートしています。 さらに読むには、上記のリンクを参照することをお勧めします。



All Articles