рд╡рд╕рдВрдд рдХрд╛ рдореМрд╕рдо
рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╡рд┐рддрд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рдкрдХ рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рди рдХреЗрд╡рд▓ рджреВрд░рд╕реНрде рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЙрдирдХреА рдкрд╣реБрдВрдЪ рдХреЛ рднреА рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИред рдлрд┐рд▓рд╣рд╛рд▓, рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд┐рдореЛрдЯ рдПрдХреНрд╕реЗрд╕ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдХреЙрдЙрдЪреЛ рдХреЗ рд╣реЗрд╕рд┐рдпрди рдФрд░ рдмрд░реНрд▓реИрдк, HTTP, рдЖрд░рдПрдордЖрдИ, рдЖрджрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░рд┐рдореЛрдЯ рдПрдХреНрд╕реЗрд╕ рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рдмрд┐рд▓реНрд▓реА рдХреЗ рддрд╣рдд,
рдЖрд░рдПрдордЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рддрд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╕рдВрдд рдврд╛рдВрдЪреЗ рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрд╡рд▓реЛрдХрдиред
рд╡рд╕рдВрдд рдХрд╛ рдореМрд╕рдо
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд╢реБрд░реВ рдХрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВред
рдПрдХреНрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдПрдХ рдЧрдгрд┐рддреАрдп рдСрдкрд░реЗрд╢рди рдФрд░ рдЗрд╕рдХреЗ рджреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдПрдХреНрд╢рдирдЕрдб рдФрд░ рдПрдХреНрд╢рдирдореВрд▓рд┐рдкрд▓реА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ:
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 " * "; } }
рдФрд░ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде 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); } }
рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЖрдИрдУрд╕реА рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛:
<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"}));
рд╡рд┐рддрд░рдгред
рдЕрдм рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рдПрдХ рдмрдбрд╝реЗ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рднрд╛рд░ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЬрд╛рд╡рд╛ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЖрд░рдПрдордЖрдИ - рд░рд┐рдореЛрдЯ рдореЗрдердб рдЗрдирд╡реЛрдХреЗрд╢рди, рджреВрд░рд╕реНрде рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╕реНрдкреНрд░рд┐рдВрдЧ рд░реАрдореЛрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред
RMI рд╕рд░реНрд╡рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рднреА рдХреЛ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдмреАрди рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - 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"); } }
рдПрдХреНрд╕рдПрдордПрд▓ рдлрд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдХрд░, рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕рдм рдХреБрдЫ рдЖрд╡рд╢реНрдпрдХ рдХрд░ рджреЗрдЧрд╛ред рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
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 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреЗрддрд╛ рд╣реИред рдФрд░ рдЗрд╕реЗ рдирдП рдмрдиреЗ рдХреНрд▓рд╛рдпрдВрдЯрдХреБрд▓рд░ рд░реИрдкрд░ рдХреЗ рдкрд╛рд╕ рднреЗрдЬ рджреЗрддрд╛ рд╣реИред
рд╣рдо рдПрдХ рдЧреНрд░рд╛рд╣рдХ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╣реИрдВ:
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рдЖрд░рдПрдордЖрдИ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдкреНрд░рд┐рдВрдЧ рд░реЗрдореЛрдЯрд┐рдВрдЧ рдореЗрдВ рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА рд╕рдорд░реНрдерди рд╣реИред рдЖрдЧреЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЙрдкрд░реЛрдХреНрдд рд▓рд┐рдВрдХ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред