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