UvodDoKomponent: MessagePrinterSpring |
from Wiki KIVu |
V tomto tutoriálu se používá SpringSource Tool Suite.
Abych si vyzkoušel něco zajímavého, vytvořil jsem MessagePrinter? pomocí RMI. Server tedy svou službu zveřejní na určitém portu a klient se na tento port připojí, komunikace bude probíhat přes RMI.
Klient bude požadovat následující rozhranní, zatímco server bude zveřejňovat službu, která ho implementuje.
public interface IMsgGen { String getMsg(); }
Musí obsahovat implementaci rozhranní, definici beany a samozřejmě se musí beana zveřejnit.
public class MsgGenImpl implements IMsgGen { @Override public String getMsg() { return "Hi there..."; } }
Vytvoření beany z implementace rozhranní je záležitost velice primitivní.
<bean id="MsgGenService" class="cz.zcu.kiv.cosi.msgtalk.server.MsgGenImpl"></bean>
Zveřejnění beany pak zařídí následující řádky. Vytvoří se beana třídy RmiServiceExporter?
, které se nastaví:
serviceName
- jméno RMI služby, které je v URL (RMI://IP:PORT/SERVICENAME)
service
- služba, kterou zveřejňujeme
serviceInterface
- interface, který služba implementuje
registryPort
- port, na kterém bude služba zveřejněna
<bean class="org.springframework.remoting.rmi.RmiServiceExporter"> <property name="serviceName" value="MyMsgGenService"/> <property name="service" ref="MsgGenService"/> <property name="serviceInterface" value="cz.zcu.kiv.cosi.msgtalk.IMsgGen"/> <property name="registryPort" value="1234"/> </bean>
Nyní je již vše připravené. Máme implementaci rozhranní, máme beanu této implementace a nastavili jsme její zveřejnění. Zbývá tedy "spustit server", kde vlastně nejde o nic jiné, než načtení kontextu v hlavní metodě. Spuštění bude tedy vypadat následovně.
public static void main(String args[]) { ApplicationContext ctx = new ClassPathXmlApplicationContext("cz/zcu/kiv/cosi/msgtalk/server/beanDefinition.xml"); }
V klientovi se musí nastavit beana služby, kterou jsme zveřejnili díky serveru. Použitím kontextu se k ní pak dostaneme v hlavní metodě klienta.
Vytvoří se beana třídy RmiProxyFactoryBean?
, která umí získat z url zveřejněnou službu. Potřebuje pouze dva logické parametry - url a interface služby
<bean id="MsgGenService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean"> <property name="serviceUrl" value="rmi://localhost:1234/MyMsgGenService"/> <property name="serviceInterface" value="cz.zcu.kiv.cosi.msgtalk.IMsgGen"/> </bean>
Po vytvoření kontextu velice jednoduše získáme zevřejněnou službu a zavoláme její metodu.
ApplicationContext ctx = new ClassPathXmlApplicationContext("cz/zcu/kiv/cosi/msgtalk/client/beanDefinition.xml"); IMsgGen msgGen = (IMsgGen) ctx.getBean("MsgGenService"); System.out.println(msgGen.getMsg());