Hlavní menu

Nástroje

UvodDoKomponent / MessagePrinterSpring

View (print) - Edit page | Recent changes - Page history

Updated 17 December 2009, 14:56 by PremekBrada

UvodDoKomponent.MessagePrinterSpring History

Hide minor edits - Show changes to output

17 December 2009, 14:56 by PremekBrada -
Changed line 53 from:
=java122 [=
to:
=xml [=
16 December 2009, 13:23 by Snajberk -
Changed line 80 from:
<source>
to:
=java122 [=
Changed lines 85-88 from:
</source>

=== Spuštění klienta ===
to:
=]

!!! Spuštění klienta
Changed line 91 from:
<source>
to:
=java122 [=
Changed line 95 from:
</source>
to:
=]
16 December 2009, 13:18 by Snajberk -
Added lines 1-95:
! MessagePrinter ve Springu

V tomto tutoriálu se používá [[http://www.springsource.com/products/sts | SpringSource Tool Suite]].

!! Společná část

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.

=java122 [=
public interface IMsgGen {
String getMsg();
}
=]


!! Server

Musí obsahovat implementaci rozhranní, definici beany a samozřejmě se musí beana zveřejnit.

!!! Implementace

=java122 [=
public class MsgGenImpl implements IMsgGen {

@Override
public String getMsg() {
return "Hi there...";
}
}
=]

!!! Definice - BeanDefinition.xml

Vytvoření beany z implementace rozhranní je záležitost velice primitivní.

=java122 [=
<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

=java122 [=
<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>
=]

!!! Spuštění serveru

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ě.

=java122 [=
public static void main(String args[]) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("cz/zcu/kiv/cosi/msgtalk/server/beanDefinition.xml");
}
=]

!! Klient

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.

!!! BeanDefinition.xml

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

<source>
<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>
</source>

=== Spuštění klienta ===

Po vytvoření kontextu velice jednoduše získáme zevřejněnou službu a zavoláme její metodu.

<source>
ApplicationContext ctx = new ClassPathXmlApplicationContext("cz/zcu/kiv/cosi/msgtalk/client/beanDefinition.xml");
IMsgGen msgGen = (IMsgGen) ctx.getBean("MsgGenService");
System.out.println(msgGen.getMsg());
</source>