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は他のサービスもサポートしています。 さらに読むには、上記のリンクを参照することをお勧めします。

Source: https://habr.com/ru/post/J117802/


All Articles