<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog Espeo Software &#187; spring</title>
	<atom:link href="http://blog.espeo.pl/tag/spring/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.espeo.pl</link>
	<description>O technologii i biznesie naszym zdaniem</description>
	<lastBuildDate>Mon, 05 Jul 2010 12:16:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Integracja Spring Flex</title>
		<link>http://blog.espeo.pl/2009/02/05/integracja-spring-flex/</link>
		<comments>http://blog.espeo.pl/2009/02/05/integracja-spring-flex/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 15:50:41 +0000</pubDate>
		<dc:creator>jakubmalecki</dc:creator>
				<category><![CDATA[technologia]]></category>
		<category><![CDATA[blazeds]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://blog.espeo.pl/?p=54</guid>
		<description><![CDATA[Ostatnimi czasy dużą popularność przy tworzeniu bogatych aplikacji internetowych (RIA) zdobywa podejście, w którym warstwę widoku pisze się z użyciem Fleksa lub innej technologii ułatwiającej budowanie interfejsów, a warstwy logiki biznesowej i dostępu do danych implementuje się przy pomocy Javy. Dodatkowo Java jest bardzo często wspierana przez bardzo popularne frameworki – Spring oraz Hibernate.
Do łączenia [...]]]></description>
			<content:encoded><![CDATA[<p>Ostatnimi czasy dużą popularność przy tworzeniu bogatych aplikacji internetowych (RIA) zdobywa podejście, w którym warstwę widoku pisze się z użyciem Fleksa lub innej technologii ułatwiającej budowanie interfejsów, a warstwy logiki biznesowej i dostępu do danych implementuje się przy pomocy Javy. Dodatkowo Java jest bardzo często wspierana przez bardzo popularne frameworki – Spring oraz Hibernate.</p>
<p>Do łączenia aplikacji klienckiej napisanej we Fleksie z aplikacją serwerową napisaną w Javie zazwyczaj używa się darmowego BlazeDS lub komercyjnego LiveCycle ES, oba te narzędzia są autorstwa firmy Adobe i udostępniają wiele ciekawych możliwości. Chyba najszybszym i najlepszym sposobem połączenia Fleksa z Javą jest wykorzystanie tzw. remote objects. Jest to po prostu zdalne wywoływanie metod obiektów napisanych w Javie z poziomu Fleksa, cała komunikacja odbywa się przy użyciu bardzo wydajnego, binarnego protokołu AMF (Action Message Format).</p>
<p>Dotychczas, aby z poziomu Fleksa skorzystać z beanów tworzonych przez Springa z użyciem wstrzykiwania zależności, należało wykonać wiele niekoniecznie prostych i oczywistych operacji. Domyślnie sam BlazeDS tworzy skonfigurowane w jego plikach obiekty, co w tym przypadku było działaniem niepożądanym. Trzeba było skonfigurować odpowiednią fabrykę dla BlazeDS, tak aby pozwolił on zająć się tworzeniem odpowiednich obiektów kontenerowi Springa. Były to dość złożone operacje i potrafiły spowodować pojawienie się wielu siwych włosów nawet u doświadczonych developerów.</p>
<p>Sytuacja diametralnie zmieniła się pod koniec zeszłego roku, gdy SpringSource wypuściło na światło dzienne nowy projekt – Spring BlazeDS Integration. Na razie jest to jeszcze dość świeży projekt, jednak pozwala już na użycie beanów tworzonych przez Springa w aplikacjach napisanych we Fleksie przy stosunkowo niewielkim wysiłku. W najbliższych planach jest m.in. implementacja mechanizmu Spring Security, bardzo pożądanego przez developerów tworzących aplikacje Fleksowe.</p>
<p>Aktualnie, przy użyciu Spring BlazeDS Integration, udostępnienie obiektów tworzonych przez Springa sprowadza się do kilku prostych kroków:</p>
<p>1.Po stronie Javy:</p>
<p>a) ustawienie odpowiedniego listenera w pliku <em>web.xml</em>:</p>
<div>
<pre>&lt;listener&gt;
	&lt;listener-class&gt;flex.messaging.HttpFlexSession&lt;/listener-class&gt;
&lt;/listener&gt;</pre>
</div>
<p>b) praktycznie standardowa konfiguracja springowego servletu w pliku <em>web.xml</em>:</p>
<div>
<pre>&lt;!-- The front controller of this Spring Web application --&gt;
&lt;servlet&gt;
	&lt;servlet-name&gt;Spring MVC Dispatcher Servlet&lt;/servlet-name&gt;
	&lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt;
	&lt;init-param&gt;
		&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;
		&lt;param-value&gt;/WEB-INF/config/web-application-config.xml&lt;/param-value&gt;
	&lt;/init-param&gt;
	&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
&lt;/servlet&gt;

&lt;!-- Map all /spring requests to the DispatcherServlet for handling --&gt;
&lt;servlet-mapping&gt;
	&lt;servlet-name&gt;Spring MVC Dispatcher Servlet&lt;/servlet-name&gt;
	&lt;url-pattern&gt;/spring/*&lt;/url-pattern&gt;
&lt;/servlet-mapping&gt;</pre>
</div>
<p>c) dodanie odpowiedniego MessageBrokera w pliku konfiguracyjnym podanym powyżej jako parametr (<em>web-application-config.xml</em>):</p>
<div>
<pre>&lt;!-- Bootstraps and exposes the BlazeDS MessageBroker --&gt;
&lt;bean id="mySpringManagedMessageBroker"
	class="org.springframework.flex.messaging.MessageBrokerFactoryBean" /&gt;</pre>
</div>
<p>Będzie on używał pliku konfiguracyjnego BlazeDS z domyślnego miejsca (<em>WEB-INF/flex/services-config.xml</em>). Aby zmienić to miejsce, należy dodać do powyższego beana następujący parametr:</p>
<div>
<pre>&lt;property name="servicesConfigPath" value="classpath*:services-config.xml" /&gt;</pre>
</div>
<p>d) dodanie mapowania do MessageBrokera z BlazeDS (również w <em>web-application-config.xml</em>):</p>
<div>
<pre>&lt;!-- Maps request paths at /messagebroker to the BlazeDS MessageBroker --&gt;
&lt;bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"&gt;
	&lt;property name="mappings"&gt;
        	&lt;value&gt;
                	/messagebroker/*=mySpringManagedMessageBroker
            	&lt;/value&gt;
	&lt;/property&gt;
&lt;/bean&gt;</pre>
</div>
<p>e) dodanie kanału odpowiadającego powyższej konfiguracji w pliku <em>services-config.xml</em>:</p>
<div>
<pre>&lt;channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel"&gt;
	&lt;endpoint url="http://{server.name}:{server.port}/{context.root}/spring/messagebroker/amf"
		class="flex.messaging.endpoints.AMFEndpoint"/&gt;
	&lt;properties&gt;
		&lt;polling-enabled&gt;false&lt;/polling-enabled&gt;
	&lt;/properties&gt;
&lt;/channel-definition&gt;</pre>
</div>
<p>f) przykładowa definicja obiektu, który ma zostać wystawiony Fleksowi (znowu <em>web-application-config.xml</em>):</p>
<div>
<pre>&lt;!-- Implementation of HelloService --&gt;
&lt;bean id="blazeHelloService" class="pl.espeo.blog.HelloServiceImpl" &gt;
&lt;/bean&gt;

&lt;!-- Expose the blazeHelloService bean for BlazeDS remoting --&gt;
&lt;bean id="helloService"
	class="org.springframework.flex.messaging.remoting.FlexRemotingServiceExporter"&gt;
	&lt;property name="messageBroker" ref="mySpringManagedMessageBroker"/&gt;
	&lt;property name="service" ref="blazeHelloService"/&gt;
&lt;/bean&gt;</pre>
</div>
<p>Po takim skonfigurowaniu z poziomu Fleksa powinien być dostępny obiekt o nazwie „helloService” jako remote object.</p>
<p>2.Po stronie Fleksa:</p>
<p>a) odpowiednia konfiguracja do współpracy z BlazeDS – ustawienie projektu do korzystania ze standardowego pliku <em>services-config.xml</em></p>
<p>b) obiekt „helloService” użyty we Fleksie:</p>
<div>
<pre>&lt;mx:RemoteObject id="helloSrv" destination="helloService"/&gt;</pre>
</div>
<p>Po prawidłowym ustawieniu plików konfiguracyjnych w obu aplikacjach można bezproblemowo cieszyć się springowymi beanami dostępnymi z poziomu Fleksa. Dokumentację dotyczącą projektu Spring BlazeDS Integration można przeczytać na stronie projektu:</p>
<p><a href="http://www.springsource.org/spring-flex">http://www.springsource.org/spring-flex</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.espeo.pl/2009/02/05/integracja-spring-flex/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
