<?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>Christophe Coenraets &#187; Java</title>
	<atom:link href="http://coenraets.org/blog/category/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://coenraets.org/blog</link>
	<description>Rich Internet Applications, Flex, AIR, Java, Android</description>
	<lastBuildDate>Fri, 23 Jul 2010 14:45:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Flex 4 Sample Application using a Java Back-End, BlazeDS 4 and Flash Builder 4 Data Wizards</title>
		<link>http://coenraets.org/blog/2010/03/flex-4-sample-application-using-a-java-back-end-blazeds-4-and-flash-builder-4-data-wizards/</link>
		<comments>http://coenraets.org/blog/2010/03/flex-4-sample-application-using-a-java-back-end-blazeds-4-and-flash-builder-4-data-wizards/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 12:11:35 +0000</pubDate>
		<dc:creator>Christophe Coenraets</dc:creator>
				<category><![CDATA[BlazeDS]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Flex4]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/?p=530</guid>
		<description><![CDATA[I put together a new Test Drive environment to allow you to explore the development of Flex 4 applications with a Java back-end using the new &#8220;Data-Centric Development&#8221; features of Flash Builder 4. These features include service introspection, value object and service stub generation, etc. This Test Drive is still work in progress: it currently [...]]]></description>
			<content:encoded><![CDATA[<p>I put together a new Test Drive environment to allow you to explore the development of Flex 4 applications with a Java back-end using the new &#8220;Data-Centric Development&#8221; features of Flash Builder 4. These features include service introspection, value object and service stub generation, etc. This Test Drive is still work in progress: it currently consists of a single application called InSync (a complete Flex 4 rewrite of my contact management sample application), but I think it&#8217;s already valuable to understand the impact of the new Flash Builder 4 data features. Insync also demonstrates some of the new features of Flex 4: skinning, skinnable components, layout managers, etc.</p>
<p>Watch the video below to get familiar with the Test Drive environment and the sample application:</p>
<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/ylm6GcMjU1w&#038;hl=en_US&#038;fs=1&#038;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/ylm6GcMjU1w&#038;hl=en_US&#038;fs=1&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>
<h2>Installation Instructions</h2>
<ol>
<li>Download <a href="http://coenraets.org/downloads/flex-java-testdrive/flex-java-testdrive.zip">flex-java-testdrive.zip</a>, and unzip the file in your root directory.</li>
<li>Open a Command Window or Shell, navigate to /flex-java-testdrive/tomcat/bin, and start Tomcat (for instance: catalina run).</li>
<li>Open a browser and access http://localhost:8400/testdrive/InSync/InSync.html.</li>
</ol>
<h2>Importing the projects in Flash Builder 4</h2>
<ol>
<li>In Flash Builder 4, click <strong>File > Import > General > Existing Projects into Workspace</strong>.</li>
<li>Specify <strong>flex-java-testdrive/projects</strong> as the root directory and click finish.</li>
<li>Explore the projects: InSync is the Flex project and java-testdrive is the Java project for the server-side classes.</li>
</ol>
<p>In the InSync project, the classes in the services and valueObjects packages have been generated automatically by Flash Builder 4. My next blog post will show you how to generate these classes based on existing Java services deployed in BlazeDS.</p>
<p>NOTE: Because BlazeDS 4 hasn’t yet been released, this version of the Test Drive uses a nightly build of BlazeDS 4.</p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2010/03/flex-4-sample-application-using-a-java-back-end-blazeds-4-and-flash-builder-4-data-wizards/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Building the Server-Side of the &#8220;Tour de Flex&#8221; Real-Time Dashboard</title>
		<link>http://coenraets.org/blog/2009/05/tdfdashboard/</link>
		<comments>http://coenraets.org/blog/2009/05/tdfdashboard/#comments</comments>
		<pubDate>Tue, 26 May 2009 15:18:30 +0000</pubDate>
		<dc:creator>Christophe Coenraets</dc:creator>
				<category><![CDATA[BlazeDS]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[LCDS]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/?p=121</guid>
		<description><![CDATA[Greg Wilson and Damien Mandrioli are also blogging about the new Tour de Flex real time dashboard today. Greg is the inspiration behind everything “Tour de Flex”, including the idea of the dashboard. He has the story behind the genesis of this project on his blog. Damien (from IBM/ILOG) did a fantastic job at building [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://coenraets.org/downloads/tdfdashboard.png" alt="" /></p>
<p><a href="http://gregsramblings.com/">Greg Wilson</a> and <a href="http://blogs.ilog.com/elixir/author/dmandrioli/">Damien Mandrioli</a> are also blogging about the new Tour de Flex real time dashboard today. Greg is the inspiration behind everything “Tour de Flex”, including the idea of the dashboard. He has the story behind the genesis of this project <a href="http://gregsramblings.com/2009/05/26/tour-de-flex-live-planetary-dashboard">on his blog</a>. Damien (from IBM/ILOG) did a fantastic job at building the client-side of the dashboard using the very cool <a href="http://www.ilog.com/products/ilogelixir/">ILOG Elixir components</a>, and he <a href="http://blogs.ilog.com/elixir/2009/05/26/tdfdashboard/">walks you through the details</a> on his blog.</p>
<p>My contribution to the project is the &#8220;real-time messaging&#8221; infrastructure. I provide the details below.</p>
<p>First the overall workflow&#8230;</p>
<p><img src="http://coenraets.org/downloads/tdfdashboardflow.png" alt="" /></p>
<p>The reason we are combining PHP and Java in this workflow is mostly historical. In the initial version of Tour de Flex, there was no Java involved: Greg was persisting loaded samples data (sample id and timestamp) directly from his PHP page. We later added LiveCycle Data Services to the picture to support the data push requirement of the dashboard, and we took the opportunity to move some code (such as the database persistence) from PHP to Java. Note that we are using LCDS for the performance and scalability of its high-end channels, but the application could also be deployed on BlazeDS.</p>
<p>A more straightforward architecture would be for the client to communicate directly with LCDS. For example, the client could invoke a remote object that would directly publish the loaded sample data (sample id and geolocation of the client) to the message destination. Alternatively, the client could use a Producer object to directly publish the message to the destination. Because some logic (such as geolocating the IP address and persisting the data) has to be executed at the server-side before routing the messages to the subscribed clients, you would have to write a custom message adapter if you used this approach.</p>
<p>We will probably streamline the workflow with one of these two approaches in the future, but in the meantime here is the source code for the servlet (logging and non-essential code removed for brevity):</p>
<pre class="brush: java;">
package com.adobe.tdf;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.maxmind.geoip.Location;
import com.maxmind.geoip.LookupService;

import flex.messaging.MessageBroker;
import flex.messaging.messages.AsyncMessage;
import flex.messaging.util.UUIDUtils;

public class TDFServlet extends HttpServlet {

	// Unique clientID for the message service
	private String clientID = UUIDUtils.createUUID();

	// The geocoding service
	protected LookupService lookupService;

	// A DAO to store sample requests in a database
	protected SampleRequestDAO dao = new SampleRequestDAO();

	// The LCDS message broker
	protected MessageBroker messageBroker;

	// The LCDS messaging destination where real time sample requests information is pushed
	protected String destination; 

	public void init() throws ServletException {

		ServletConfig config = getServletConfig();
		destination = config.getInitParameter(&quot;messaging.destination.name&quot;);
		String path = config.getInitParameter(&quot;geocoding.database.path&quot;);
		try {
			// Load the geocoding database in init() to make sure we load it only once
			lookupService = new LookupService(path, LookupService.GEOIP_MEMORY_CACHE);
		} catch (IOException e) {
			// We swallow the exception here. If the database is not available, the feed
			// will still work but won't provide the location info.
		}
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		if (messageBroker == null)
		{
			messageBroker = MessageBroker.getMessageBroker(null);
		}

		SampleRequest sampleRequest = new SampleRequest();

		try {
			sampleRequest.setSampleId(Integer.parseInt(request.getParameter(&quot;sampleId&quot;)));
		} catch (Exception e) {
			String message = &quot;A valid sampleId is required to process this request&quot;;
			throw new RuntimeException(message);
		}

		sampleRequest.setTimestamp(new Date());

		String ipAddress = request.getParameter(&quot;ipAddress&quot;);

		// Geolocate the IP address and add the info to the message
		if (lookupService != null &amp;&amp; ipAddress != null)
		{
	                Location location = lookupService.getLocation(ipAddress);
			if (location != null)
			{
				sampleRequest.setLatitude(location.latitude);
				sampleRequest.setLongitude(location.longitude);
				sampleRequest.setCountry(location.countryCode);
				sampleRequest.setCity(location.city);
			}
		}

		try {
			dao.create(sampleRequest, ipAddress);
		} catch (RuntimeException e) {

		}

		String subtopic = request.getParameter(&quot;subtopic&quot;);
		if (subtopic == null) subtopic = &quot;flex&quot;;

		// Publish the message to specified destination and subtopic.
		AsyncMessage msg = new AsyncMessage();
		msg.setDestination(destination);
		msg.setHeader(&quot;DSSubtopic&quot;, subtopic);
		msg.setClientId(clientID);
		msg.setMessageId(UUIDUtils.createUUID());
		msg.setTimestamp(System.currentTimeMillis());
		msg.setBody(sampleRequest);
		messageBroker.routeMessageToService(msg, null);

		PrintWriter out = response.getWriter();
	        out.println(&quot;&lt;html&gt;&lt;body&gt;ok&lt;/body&gt;&lt;/html&gt;&quot;);

	}

}
</pre>
<p>The servlet is responsible for three things:</p>
<ol>
<li>Geolocate the IP address of the client requesting the sample. We currently use the MaxMind Geolocation API. The API is straightforward and the results seem pretty accurate.</li>
<li>Save the information about the loaded sample in a database. We keep track of historical data to be able to support future data visualization projects.</li>
<li>Publish the data about the loaded sample to a message destination. The servlet uses the Message Service Java API to directly push messages to the Flex destination (lines 97 to 104). Note that the same API exists for ColdFusion, so CF developers could use a CF page instead of this servlet to push messages to the client.</li>
</ol>
<h3>Channels</h3>
<p>The messaging destination is set up to support different communication channels: RTMP, long polling, and regular polling. The client-side developer can decide which channel to use to communicate with the server. For example, if you wanted to use RTMP as the primary channel, fall back to long polling if the RTMP connection fails, and fall back to regular polling if the long polling connection fails you could set up your client-side ChannelSet as follows:</p>
<pre class="brush: xml;">
&lt;mx:ChannelSet id=&quot;channelSet&quot;&gt;
	&lt;mx:RTMPChannel id=&quot;rtmp&quot; url=&quot;rtmp://hostname:2037&quot;/&gt;
	&lt;mx:AMFChannel url=&quot;http://hostname/context/messagebroker/amflongpolling&quot;/&gt;
	&lt;mx:AMFChannel url=&quot;http://hostname/context/messagebroker/amfpolling&quot;/&gt;
&lt;/mx:ChannelSet&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2009/05/tdfdashboard/feed/</wfw:commentRss>
		<slash:comments>52</slash:comments>
		</item>
		<item>
		<title>New Update to the Spring BlazeDS Integration Test Drive</title>
		<link>http://coenraets.org/blog/2009/05/new-update-to-the-spring-blazeds-integration-test-drive/</link>
		<comments>http://coenraets.org/blog/2009/05/new-update-to-the-spring-blazeds-integration-test-drive/#comments</comments>
		<pubDate>Tue, 12 May 2009 19:33:32 +0000</pubDate>
		<dc:creator>Christophe Coenraets</dc:creator>
				<category><![CDATA[BlazeDS]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/?p=119</guid>
		<description><![CDATA[I made some additional changes to the Spring BlazeDS Integration (RC1) Test Drive: The Test Drive now includes an annotation-based configuration sample (the Company Manager sample). Spring annotations such as @Service, @RemotingDestination, @Autowired, @RemotingInclude, and @RemotingExclude make it really easy to configure your beans and make them available through Remoting. As an example, here is [...]]]></description>
			<content:encoded><![CDATA[<p>I made some additional changes to the Spring BlazeDS Integration (RC1) Test Drive:</p>
<ul>
<li>The Test Drive now includes an annotation-based configuration sample (the Company Manager sample). Spring annotations such as @Service, @RemotingDestination, @Autowired, @RemotingInclude, and @RemotingExclude make it really easy to configure your beans and make them available through Remoting. As an example, here is the source code for the CompanyDAO class:
<p></p>
<pre class="brush: java;">
package flex.spring.samples.company;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.springframework.flex.remoting.RemotingDestination;
import org.springframework.flex.remoting.RemotingExclude;
import org.springframework.flex.remoting.RemotingInclude;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcInsert;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;

import flex.spring.samples.industry.IIndustryDAO;

@Service(&quot;companyService&quot;)
@RemotingDestination(channels={&quot;my-amf&quot;})
public class CompanyDAO implements ICompanyDAO {

	private final SimpleJdbcTemplate template;
	private final SimpleJdbcInsert insertCompany;

	private IIndustryDAO industryDAO;

	private final ParameterizedRowMapper&lt;Company&gt; rowMapper = new ParameterizedRowMapper&lt;Company&gt;(){
		public Company mapRow(ResultSet rs, int rowNum) throws SQLException {
			Company company = new Company();
			company.setId(rs.getInt(&quot;id&quot;));
			company.setName(rs.getString(&quot;name&quot;));
			company.setAddress(rs.getString(&quot;address&quot;));
			company.setCity(rs.getString(&quot;city&quot;));
			company.setState(rs.getString(&quot;state&quot;));
			company.setZip(rs.getString(&quot;zip&quot;));
			company.setPhone(rs.getString(&quot;phone&quot;));
			company.setIndustry(industryDAO.findById(rs.getInt(&quot;industry_id&quot;)));
			return company;
		}
	};

	@Autowired
	public CompanyDAO(DataSource dataSource, IIndustryDAO industryDAO) {
		template = new SimpleJdbcTemplate(dataSource);
		insertCompany = new SimpleJdbcInsert(dataSource).withTableName(&quot;COMPANY&quot;).usingGeneratedKeyColumns(&quot;ID&quot;);
		this.industryDAO = industryDAO;
	}

	@RemotingInclude
	public Company findById(int id) {
		return template.queryForObject(&quot;SELECT * FROM company WHERE id=?&quot;, rowMapper, id);
	}

	@RemotingInclude
	public List&lt;Company&gt; findAll() {
		return template.query(&quot;SELECT * FROM company ORDER BY name&quot;, rowMapper);
	}

	@RemotingInclude
	public List&lt;Company&gt; findByName(String name) {
		return template.query(&quot;SELECT * FROM company WHERE UPPER(name) LIKE ? ORDER BY name&quot;,
				rowMapper,
				&quot;%&quot; + name.toUpperCase() + &quot;%&quot;);
	}

	@RemotingInclude
	public Company create(Company company) {
		Map&lt;String, Object&gt; parameters = new HashMap&lt;String, Object&gt;();
        parameters.put(&quot;name&quot;, company.getName());
        parameters.put(&quot;address&quot;, company.getAddress());
        parameters.put(&quot;city&quot;, company.getCity());
        parameters.put(&quot;state&quot;, company.getState());
        parameters.put(&quot;zip&quot;, company.getZip());
        parameters.put(&quot;phone&quot;, company.getPhone());
        parameters.put(&quot;industry_id&quot;, company.getIndustry().getId());
        Number id = insertCompany.executeAndReturnKey(parameters);
		company.setId(id.intValue());
		return company;
	}

	@RemotingInclude
	public boolean update(Company company) {
        int count = template.update(&quot;UPDATE company SET name=?, address=?, city=?, state=?, zip=?, phone=?, industry_id=? WHERE id=?&quot;,
				company.getName(),
				company.getAddress(),
				company.getCity(),
				company.getState(),
				company.getZip(),
				company.getPhone(),
				company.getIndustry().getId(),
				company.getId());
		return (count == 1);
	}

	@RemotingExclude
	public boolean remove(Company company) {
		int count = template.update(&quot;DELETE FROM company WHERE id=?&quot;, company.getId());
		return (count == 1);
	}

}
</pre>
<p>
</li>
<li>The Test Drive is now using the M3 build of Spring 3 (as opposed to M2 in the previous builds of the Test Drive).</li>
<li>I modified the configuration of the long polling channel to support more persistent connections per domain based on the browser capabilities.</li>
<li>And of course compared to the M2 build, this version of the Test Drive includes a number of Messaging samples.
<p>Using the Messaging integration, setting up a destination can be as easy as:</p>
<pre class="brush: xml;">
&lt;flex:message-destination id=&quot;chat&quot; /&gt;
</pre>
<p>And here is how you configure a destination mapped to a JMS topic:</p>
<pre class="brush: xml;">
&lt;flex:jms-message-destination id=&quot;jms-chat&quot; jms-destination=&quot;chatTopic&quot; /&gt;
</pre>
</li>
</ul>
<h3>Installation Instructions:</h3>
<ol>
<li>Download the Spring / Flex TestDrive here: <a href="http://coenraets.org/downloads/spring-flex-testdrive-RC1v2.zip">http://coenraets.org/downloads/spring-flex-testdrive-RC1v2.zip</a></li>
<li>Unzip it in your root directory</li>
<li>Navigate to /spring-flex-testdrive/tomcat/bin and start Tomcat (for instance: catalina run)</li>
<li>Open a browser and access http://localhost:8080</li>
<li>Follow the instructions</li>
</ol>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2009/05/new-update-to-the-spring-blazeds-integration-test-drive/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>Speaking at the New England Java User Group on Thursday (May 14th)</title>
		<link>http://coenraets.org/blog/2009/05/speaking-at-the-new-england-java-user-group-on-thursday-may-14th/</link>
		<comments>http://coenraets.org/blog/2009/05/speaking-at-the-new-england-java-user-group-on-thursday-may-14th/#comments</comments>
		<pubDate>Mon, 11 May 2009 18:47:18 +0000</pubDate>
		<dc:creator>Christophe Coenraets</dc:creator>
				<category><![CDATA[BlazeDS]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/?p=118</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><img src="http://coenraets.org/downloads/nejug.gif" alt="" </p>
<p>I will be joined by Mark Fisher from SpringSource and we will talk about Flex, Spring, BlazeDS and the integration of these technologies. <a href="http://www.springsource.org/spring-flex">Spring BlazeDS integration</a> RC1 was released last week. One of the key features in RC1 is the integration of the Message service, and Mark is the lead developer on that feature.</p>
<p>I hope to see you there if you live in the greater Boston area.</p>
<p>Thu, May 14 6:00pm<br />
Sun Microsystems &#8211; 1 Network Way, Burlington, MA<br />
<a href="http://www.nejug.org/events/show/93">NEJUG Link</a></p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2009/05/speaking-at-the-new-england-java-user-group-on-thursday-may-14th/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>New Test Drive for Spring BlazeDS Integration RC1</title>
		<link>http://coenraets.org/blog/2009/05/new-test-drive-for-spring-blazeds-integration-rc1/</link>
		<comments>http://coenraets.org/blog/2009/05/new-test-drive-for-spring-blazeds-integration-rc1/#comments</comments>
		<pubDate>Fri, 08 May 2009 20:34:55 +0000</pubDate>
		<dc:creator>Christophe Coenraets</dc:creator>
				<category><![CDATA[BlazeDS]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[LCDS]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/?p=117</guid>
		<description><![CDATA[UPDATE: An updated version of this Test Drive is available here SpringSource just released the RC1 build for the Spring / BlazeDS integration project. The key new feature in RC1 is the integration of the BlazeDS Message Service. I updated my Spring BlazeDS Integration Test Drive to showcase the messaging integration. In addition to Remoting [...]]]></description>
			<content:encoded><![CDATA[<p><strong>UPDATE: An updated version of this Test Drive is available <a href="http://coenraets.org/blog/2009/05/new-update-to-the-spring-blazeds-integration-test-drive/">here</a></strong></p>
<p>SpringSource just released the RC1 build for the <a href="http://www.springsource.org/spring-flex">Spring / BlazeDS integration project</a>. The key new feature in RC1 is the integration of the BlazeDS Message Service.</p>
<p>I updated my Spring BlazeDS Integration Test Drive to showcase the messaging integration.</p>
<p>In addition to Remoting and Security samples, the Test Drive now includes the following Messaging samples:</p>
<ul>
<li><strong>Chat</strong>: Messaging basics</li>
<li><strong>Simple Data Push</strong>: A simple data push example</li>
<li><strong>Traderdesktop</strong>: A more sophisticated data push example showing how to use subtopics</li>
<li><strong>JMS Chat</strong>: A chat application using a JMS topic and exchanging messages with a Swing-based client</li>
<li><strong>Collaboration</strong>: An example showing how to use messaging to remotely drive another client&#8217;s application</li>
</ul>
<h3>Installation Instructions:</h3>
<ol>
<li>Download the Spring / Flex TestDrive here: <a href="http://coenraets.org/downloads/spring-flex-testdrive-RC1.zip">http://coenraets.org/downloads/spring-flex-testdrive-RC1.zip</a></li>
<li>Unzip it in your root directory</li>
<li>Navigate to /spring-flex-testdrive/tomcat/bin and start Tomcat (for instance: catalina run)</li>
<li>Open a browser and access http://localhost:8080</li>
<li>Follow the instructions</li>
</ol>
<p>As always, I&#8217;d love to hear your feedback and your ideas to improve this Test Drive.</p>
<p>I will probably have another version next week with a couple of additional samples and more documentation for the Message Service, but I already wanted to make this version available to allow you to experiment RC1 samples.</p>
<p>Christophe</p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2009/05/new-test-drive-for-spring-blazeds-integration-rc1/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Spring / BlazeDS Integration on Adobe TV</title>
		<link>http://coenraets.org/blog/2009/02/spring-blazeds-integration-on-adobe-tv/</link>
		<comments>http://coenraets.org/blog/2009/02/spring-blazeds-integration-on-adobe-tv/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 16:09:34 +0000</pubDate>
		<dc:creator>Christophe Coenraets</dc:creator>
				<category><![CDATA[BlazeDS]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/?p=105</guid>
		<description><![CDATA[In this new Adobe TV episode, I demonstrate how to build Flex applications that connect to a Spring back-end using the new Spring / BlazeDS Integration project. If you are interested in this integration, make sure you check out the Spring / BlazeDS Integration page on the SpringSource web site and the new Spring / [...]]]></description>
			<content:encoded><![CDATA[<p>In this new Adobe TV episode, I demonstrate how to build Flex applications that connect to a Spring back-end using the new Spring / BlazeDS Integration project.</p>
<p>If you are interested in this integration, make sure you check out the <a href="http://www.springsource.org/spring-flex">Spring / BlazeDS Integration page</a> on the SpringSource web site and the <a href="http://coenraets.org/blog/2009/01/new-springblazeds-integration-test-drive/">new Spring / BlazeDS Integration Test Drive</a>.</p>
<p><embed src="http://tv.adobe.com/Embed.swf" quality="high" bgcolor="#000000" width="600" height="385" name="AdobeTVPlayer" play="true" loop="false" quality="high" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" flashVars="v=~b64~aHR0cDovL2Fkb2JlLmVkZ2Vib3NzLm5ldC9mbGFzaC9hZG9iZS9hZG9iZXR2Mi9hZGNfcHJlc2VudHMvNjRfYWRjXzA5MC5mbHY/cnNzX2ZlZWRpZD0xNDcyJnhtbHZlcnM9Mg==&#038;w=600&#038;t=http://tv.adobe.com/#vi+f1472v1053&#038;h=385"></embed></p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2009/02/spring-blazeds-integration-on-adobe-tv/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>Sample application using the Swiz Framework and BlazeDS</title>
		<link>http://coenraets.org/blog/2009/02/sample-application-using-the-swiz-framework-and-blazeds/</link>
		<comments>http://coenraets.org/blog/2009/02/sample-application-using-the-swiz-framework-and-blazeds/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 18:30:28 +0000</pubDate>
		<dc:creator>Christophe Coenraets</dc:creator>
				<category><![CDATA[Air]]></category>
		<category><![CDATA[BlazeDS]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[LCDS]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/?p=101</guid>
		<description><![CDATA[There have been a lot of discussions around Flex Frameworks lately. Tony Hillerson has an interesting series here: 1 2 3 4 5 6 A relative newcomer on the list is Swiz, the work of Chris Scott. I figured I would give it a try, and create a Swiz version of the inSync application that [...]]]></description>
			<content:encoded><![CDATA[<p>There have been a lot of discussions around Flex Frameworks lately. Tony Hillerson has an interesting series here: <a href="http://www.insideria.com/2008/12/frameworkquest-2008-introducti.html">1</a> <a href="http://www.insideria.com/2008/12/frameworkquest-2008-part-2-get.html">2</a> <a href="http://www.insideria.com/2008/12/frameworkquest-2008-part-3-fra.html">3</a> <a href="http://www.insideria.com/2008/12/frameworkquest-2008-part-4-ioc.html">4</a> <a href="http://www.insideria.com/2008/12/frameworkquest-2008-part-5-mat.html">5</a> <a href="http://www.insideria.com/2009/01/frameworkquest-2008-part-6-the.html">6</a></p>
<p>A relative newcomer on the list is <a href="http://code.google.com/p/swizframework/">Swiz</a>, the work of <a href="http://cdscott.blogspot.com/">Chris Scott</a>. I figured I would give it a try, and create a Swiz version of the inSync application that I often use to try out and demonstrate different features and techniques in Flex and Adobe AIR. This is not an endorsement of Swiz over other frameworks. I simply wanted to share the sample application I built as part of my own research as a (neutral like a Swiss) Evangelist.</p>
<p><img src="http://coenraets.org/downloads/insync-swiz/insync-swiz.png"/></p>
<p><a href="http://coenraets.org/downloads/insync-swiz/srcview/index.html">View the source code</a>.</p>
<p><span id="more-101"></span></p>
<h3>Application Highlights:</h3>
<p>At his core, Swiz is a simple inversion of control framework. Using an IoC framework, the components of your application (for example, Views) don’t instantiate or even look up their dependencies (the objects they work with). The framework injects those dependencies when the components are created (hence the term “Dependency Injection” also used to describe this approach). The result is looser coupling and more reusable components. The components managed by the Swiz IoC framework are called beans.</p>
<h3>1. Defining your beans</h3>
<p>The beans of the inSync applications are defined in Beans.mxml:</p>
<pre class="brush: xml;">
&lt;BeanLoader xmlns=&quot;org.swizframework.util.*&quot; xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot; xmlns:controllers=&quot;insync.controllers.*&quot;&gt;

    &lt;DynamicChannelSet id=&quot;myAmfChannel&quot;&gt;
		&lt;serverPort&gt;8400&lt;/serverPort&gt;
		&lt;contextRoot&gt;/lcds-samples&lt;/contextRoot&gt;
    &lt;/DynamicChannelSet&gt;

    &lt;mx:RemoteObject id=&quot;contactService&quot; destination=&quot;contacts&quot; channelSet=&quot;{myAmfChannel}&quot;/&gt;

    &lt;controllers:ContactController id=&quot;contactController&quot;/&gt;

&lt;/BeanLoader&gt;
</pre>
<h3>2. Bootstrapping Swiz</h3>
<p>You bootstrap Swiz in the preinitialize event of the application. You can have multiple Beans configuration classes. You pass your configuration classes in an array as an argument of the loadBeans function. In inSync, we have only one configuration class (Beans.mxml).</p>
<pre class="brush: jscript;">
Swiz.loadBeans( [Beans] );
</pre>
<h3>3. Injecting dependencies</h3>
<p>Swiz uses the [Autowire] custom metadata to inject beans into other beans and views.<br />
In inSync, the contactService RemoteObject is injected into ContactController.as as follows:</p>
<pre class="brush: jscript;">
[Autowire(bean=&quot;contactService&quot;)]
public var contactService:RemoteObject;
</pre>
<p>… and contactController is injected in the Views. For example, in ContactForm.mxml:</p>
<pre class="brush: jscript;">
[Autowire(bean=&quot;contactController&quot;)]
public var controller:IContactController;
</pre>
<p>Because we use an interface, the View is not coupled to a specific implementation of the controller. If you don’t like to have a reference to the controller in your view, keep reading…</p>
<h3>4. Dynamic Mediators</h3>
<p>Swiz is an IoC framework. Beyond that, it doesn’t force you to use any specific design pattern. So, if you don’t like to have a controller in your view, you can, for example, set up the view to dispatch events instead. For example, in the save() function of ContactForm.mxml, you would replace:</p>
<pre class="brush: jscript;">
controller.save(contact);
</pre>
<p>with:</p>
<pre class="brush: jscript;">
Swiz.dispatchEvent(ContactEvent.SAVE, contact);
</pre>
<p>You could then listen to this event in some &#8220;mediator&#8221; class using Swiz.addEventListener(ContactEvent.UPDATE, someHandler), but the dynamic mediator feature of Swiz allows you to automate this process. For example, you could annotate the save() function of the ContactController class as follows:</p>
<pre class="brush: jscript;">
[Mediate(event=&quot;ContactEvent.SAVE&quot;, properties=&quot;contact&quot;)]
public function save(contact:Contact):void
{
	executeServiceCall(contactService.save(contact), save_result, null, [contact]);
}
</pre>
<p>Swiz will automatically set up an event listener, invoke the annotated method when the event is dispatched, and pass the specified event properties (in this case: &#8220;contact&#8221;) as the function parameters.</p>
<h3>5. Prototypes</h3>
<p>By default, components defined in your Beans configuration classes are singletons. In other words, the same instance of a Bean gets injected everytime it is autowired. In some situations, you may want to inject a new instance of a Bean everytime it is autowired. For example, if you open multiple instances of the same View, you may decide you need one controller per view. Prototypes allow you to define non-singleton Beans in your Beans configuration class using the following syntax:</p>
<p>More on prototypes <a href="http://cdscott.blogspot.com/2009/01/more-swiz-features-or-swiz-005-part-2.html">here</a>.</p>
<pre class="brush: xml;">
&lt;factory:Prototype xmlns:factory=&quot;org.swizframework.factory.*&quot;
        id=&quot;contactController&quot;
        className=&quot;insync.controllers.ContactController&quot;/&gt;
</pre>
<p></p>
<h3>Installation instructions:</h3>
<ol>
<li>Install the <a href="http://opensource.adobe.com/blazeds">BlazeDS turnkey server</a>. (To be clear: you don’t have to use BlazeDS to use Swiz… That’s just the sample I wanted to build.)</li>
<li>Download <a href="http://coenraets.org/downloads/insync-swiz/srcview/insync-swiz.zip">insync-swiz.zip</a>, and unzip it on your local file system.</li>
<li>Copy insync-swiz/java/classes/insync to blazeds/tomcat/webapps/samples/WEB-INF/classes/insync.</li>
<li>Add the following destination to blazeds/tomcat/webapps/samples/WEB-INF/flex/remoting-config.xml:</li>
<p><pre class="brush: xml;">
&lt;destination id=&quot;contacts&quot;&gt;
        &lt;properties&gt;
            &lt;source&gt;insync.dao.ContactDAO&lt;/source&gt;
            &lt;scope&gt;application&lt;/scope&gt;
        &lt;/properties&gt;
&lt;/destination&gt;
</pre>
</p>
<li>Copy insync-swiz/sampledb/insync to blazeds/sampledb/insync</li>
<li>Edit server.properties in blazeds/sampledb, and modify the file as follows to add the insync database to the startup procedure.
<p><pre class="brush: plain;">
server.database.0=file:flexdemodb/flexdemodb
server.dbname.0=flexdemodb
server.database.1=file:insync/insync
server.dbname.1=insync
server.port=9002
server.silent=true
server.trace=false
</pre>
</p>
</li>
<li>Start the database (startdb.bat or startdb.sh)</li>
<li>Start BlazeDS</li>
<li>In Flex Builder, create a new Flex project called insync-swiz. You don’t have to select any “Application server type”. </li>
<li>Copy the Swiz swc and the flexlib swc (used for the SuperTabNavigator) from insync-swiz/flex/lib to the lib directory of your project</li>
<li>Copy the files and folders from insync-swiz/flex/src to the src directory of your project</li>
<li>Open Beans.mxml and make sure the serverPort and contextRoot properties in DynamicChannelSet match your server setup.</li>
<li>Run the application</li>
</ol>
<h3>Summary</h3>
<p>Swiz was easy and enjoyable to work with. It is also non intrusive and definitely introduces some interesting ideas. A few lingering questions I didn’t have time to investigate&#8230;</p>
<ul>
<li>Swiz relies on introspection (describeType) to find its custom metadata in the objects added to the display list (with the exception of classes in the flash.* and mx.* packages). This has a performance impact. I’m not exactly sure how much of an impact it would have in real life apps yet…</li>
<li>How well does Swiz work with Modules or Marshall Plan subapplications?</li>
</ul>
<p>If you are looking for more information, check out the following resources:</p>
<ul>
<li><a href="http://link.brightcove.com/services/link/bcpid1753161885/bctid1738803894">Chris Scott’s presentation at Flex 360</a></li>
<li><a href="http://code.google.com/p/swizframework/wiki/GettingStarted">Getting Started</a></li>
<li><a href="http://cdscott.blogspot.com/">Chris Scott’s blog</a></li>
<li><a href="http://soenkerohde.com/2008/09/swiz-framework-brutally-simple/">Sönke Rohde’s blog</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2009/02/sample-application-using-the-swiz-framework-and-blazeds/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Adobe Collaborates with SpringSource for Enhanced Flex / Spring Integration</title>
		<link>http://coenraets.org/blog/2008/12/adobe-collaborates-with-springsource-for-enhanced-flex-spring-integration/</link>
		<comments>http://coenraets.org/blog/2008/12/adobe-collaborates-with-springsource-for-enhanced-flex-spring-integration/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 17:52:21 +0000</pubDate>
		<dc:creator>Christophe Coenraets</dc:creator>
				<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/?p=95</guid>
		<description><![CDATA[I have written several times about the Flex / Spring integration on this blog. Now things are about to get even simpler and more integrated. This is very exciting news! From the press release: Adobe Systems Incorporated today announced that it is working with SpringSource to simplify the development and deployment of rich enterprise Java(TM) [...]]]></description>
			<content:encoded><![CDATA[<p>I have written several times about the Flex / Spring integration on this blog. Now things are about to get even simpler and more integrated. This is very exciting news!</p>
<p>From the press release:</p>
<p>Adobe Systems Incorporated today announced that it is working with SpringSource to simplify the development and deployment of rich enterprise Java(TM) applications through a collaboration that will provide integration between the Adobe(R) Flash(R) and SpringSource platforms. This collaboration will make it easy for Java developers to create enterprise-class rich Internet applications (RIAs) using Adobe Flex(R) software, a cornerstone of the Adobe Flash Platform, and Spring, the de facto standard for enterprise Java.</p>
<p>With support from Adobe, SpringSource is introducing Spring BlazeDS Integration, a new open source project to provide tight integration between Spring and BlazeDS, Adobe&#8217;s open source server-based Java remoting and Web messaging technology. A beta version of the Spring BlazeDS Integration will be available from SpringSource in mid-December.<br />
Also in development for early next year is the SpringSource Adapter for Adobe(R) LiveCycle(R) Data Services ES(TM) which will provide integration with Adobe LiveCycle Data Services ES, enabling the creation of server push-based applications based on Adobe Flex for real-time and near real-time solutions.</p>
<p>Read the press release <a href="http://eon.businesswire.com/portal/site/eon/permalink/?ndmViewId=news_view&#038;newsId=20081207005032&#038;newsLang=en">here</a> or <a href="http://www.marketwatch.com/news/story/Adobe-Collaborates-SpringSource-Enhanced-Integration/story.aspx?guid={E06D4525-831D-4718-AA6F-39FD519C28F3}">here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2008/12/adobe-collaborates-with-springsource-for-enhanced-flex-spring-integration/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>&#8220;Zero Code&#8221; Data Access using LiveCycle Data Services Runtime Configuration</title>
		<link>http://coenraets.org/blog/2008/09/zero-code-data-access-using-livecycle-data-services-runtime-configuration/</link>
		<comments>http://coenraets.org/blog/2008/09/zero-code-data-access-using-livecycle-data-services-runtime-configuration/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 17:26:35 +0000</pubDate>
		<dc:creator>Christophe Coenraets</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[LiveCycle Data Services]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/?p=82</guid>
		<description><![CDATA[When using the LCDS data management service, developers usually create a custom assembler for each destination, or use the Hibernate assembler if they happen to use Hibernate as their persistence framework. Other developers don&#8217;t use the data management service at all because of its perceived complexity. The Data Management Service provides a set of low [...]]]></description>
			<content:encoded><![CDATA[<p>When using the LCDS data management service, developers usually create a custom assembler for each destination, or use the Hibernate assembler if they happen to use Hibernate as their persistence framework. Other developers don&#8217;t use the data management service at all because of its perceived complexity.</p>
<p>The Data Management Service provides a set of low level APIs on top of which you can build your own higher level / higher productivity framework. The Hibernate assembler provides an example of a &#8220;generic assembler&#8221;, but you can also create your own. When used in this fashion, the Data Management Service can provide, by far, the most productive way to build data-driven applications.</p>
<p>To illustrate this point, I have been showing a demo at a few conferences this year, and I finally decided to package it. The demo combines a generic assembler and the runtime configuration feature of LCDS to provide a zero (server-side) code, zero configuration strategy to build data-driven applications. The demo goes like this:</p>
<p><span id="more-82"></span></p>
<ol>
<li>Create a table in MySQL Query Browser&#8230; just to show that I was starting from scratch.</li>
<li>Add a few rows in the new table (still in MySQL Query Browser)</li>
<li>Create a new project in Flex Builder, and with the help of a DynamicDataService class, build a data maintenance application in literally three lines of code.</li>
</ol>
<p>The key point of the demo was that I didn’t have to write any server-side code, or even configure anything (no XML) at the server-side&#8230; a table was all I needed.</p>
<p>Here is a quick and rough version of the demo:</p>
<p><embed src="http://blip.tv/play/Ac2GbgA" type="application/x-shockwave-flash" width="640" height="480" allowscriptaccess="always" allowfullscreen="true"></embed></p>
<p>Follow the instruction below to try it on your system:</p>
<ol>
<li>Download <a href="/downloads/flex-dynamic-data.zip">flex-dynamic-data.zip</a> and unzip it on your local file system.</li>
<li>
<p>Copy bin/flex-dynamic-data.jar in /tomcat/webapps/lcds-samples/WEB-INF/lib.</p>
<p>flex-dynamic-data.jar includes two classes: DestinationService and DynamicJDBCAssembler. DestinationService creates data management destinations on the fly. Each destination created by DestinationService uses an instance of DynamicJDBCAssembler to dynamically generate the appropriate SQL statements for the fill, getItem, createItem, updateItem and deleteItem operations.  You never have to directly work with or configure these two classes: they are automatically invoked by the client-side DynamicDataService component. The source code is available in /flex-dynamic-data/src/java.</p>
</li>
<li>
<p>Open remoting-config.xml in lcds-samples\WEB-INF\flex and add the following destination:</p>
<pre class="brush: xml;">
&lt;destination id=&quot;destination-factory&quot;&gt;
    &lt;properties&gt;
        &lt;source&gt;flex.dynamic.data.DestinationService&lt;/source&gt;
    &lt;/properties&gt;
&lt;/destination&gt;
</pre>
</li>
<li>
<p>Copy flex-dynamic-data.properties in /tomcat/webapps/lcds-samples/WEB-INF/classes.</p>
<p>Open the file. Notice that the default database is set to the HSQLDB sample database (flexdemodb) shipping with the product.</p>
</li>
<li>
<p>Create a new Flex Builder project. Specify J2EE as the application server type, check the &#8220;Use remote object access service&#8221; checkbox, uncheck the &#8220;Create a combined Java/Flex project using WTP&#8221; checkbox, and point to the lcds-samples web application:</p>
<ul>
<li>Root folder: c:\lcds26\tomcat\webapps\lcds-samples</li>
<li>Root URL: http://localhost:8400/lcds-samples</li>
<li>Context root: /lcds-samples</li>
</ul>
</li>
<li>
<p>Add flex_dynamic_data.swc to your build path.</p>
<p>flex_dynamic_data.swc includes the DynamicDataService class. The source code is available in /flex-dynamic-data/src/as.</p>
</li>
<li>Code the application as follows.
<p><pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;mx:Application xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot; xmlns:data=&quot;flex.dynamic.data.*&quot;&gt;

	&lt;mx:ArrayCollection id=&quot;items&quot;/&gt;

	&lt;data:DynamicDataService id=&quot;ds&quot; destination=&quot;dynamic.company&quot;
		ready=&quot;ds.fill(items)&quot; /&gt;

	&lt;mx:DataGrid dataProvider=&quot;{items}&quot; width=&quot;100%&quot; height=&quot;100%&quot; editable=&quot;true&quot;/&gt;

&lt;/mx:Application&gt;
</pre>
</p>
</li>
<li>Run the application.</li>
<li>Modify data (not the primary key)</li>
<li>Click the refresh button and notice that the data has been persisted.</li>
<li>Open a second browser and access the same URL. Modify data in one browser and notice that changes are automatically being pushed to the other browser.</li>
</ol>
<p>Disclaimer: The mini framework provided with this sample is for demo purpose only. The goal is not to provide a production quality solution: I took many shortcuts and although it may be good for rapid prototyping, the specific strategy implemented here has serious limitations (single table, no support for associations, etc.). The goal is to illustrate what’s possible when building generic assemblers and runtime configuration, and hopefully generate a few ideas.</p>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2008/09/zero-code-data-access-using-livecycle-data-services-runtime-configuration/feed/</wfw:commentRss>
		<slash:comments>36</slash:comments>
		</item>
		<item>
		<title>Flex Test Drive Server for Java Developers (Tomcat-based)</title>
		<link>http://coenraets.org/blog/2007/01/flex-test-drive-server-for-java-developers-tomcat-based/</link>
		<comments>http://coenraets.org/blog/2007/01/flex-test-drive-server-for-java-developers-tomcat-based/#comments</comments>
		<pubDate>Fri, 12 Jan 2007 17:53:48 +0000</pubDate>
		<dc:creator>Christophe Coenraets</dc:creator>
				<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[hibernate]]></category>

		<guid isPermaLink="false">http://coenraets.org/blog/2007/01/flex-test-drive-server-for-java-developers-tomcat-based/</guid>
		<description><![CDATA[I have been working on a Tomcat-based “Flex Test Drive Server”. The Test Drive Server is a minimal and ready-to-use version of Tomcat (currently version 5.5.20) in which the Flex Data Services (version 2.0.1) WAR file has already been deployed and configured along with a variety of tutorials and sample applications. It allows you to [...]]]></description>
			<content:encoded><![CDATA[<p>I have been working on a Tomcat-based “Flex Test Drive Server”. The Test Drive Server is a minimal and ready-to-use version of Tomcat (currently version 5.5.20) in which the Flex Data Services (version 2.0.1) WAR file has already been deployed and configured along with a variety of tutorials and sample applications. It allows you to get up and running integrating Flex with Java back-ends in a matter of minutes. Download fds-tomcat.zip, expand the file, and run&#8230;</p>
<p>The Test Drive Server includes:</p>
<ol>
<li>An updated version of my 30 minutes Test drive for Java developers</li>
<li>A brand new Flex Data Management Services tutorial</li>
<li>Flex/Spring integration samples running &#8220;out-of-the-box&#8221;</li>
<li>Flex/Hibernate integration samples running &#8220;out-of-the-box&#8221;</li>
<li>Flex/JMS integration samples (JMS powered by ActiveMQ) running &#8220;out-of-the-box&#8221;</li>
<li>A new version of my Real Time Market Data application with advanced messaging features: Java API (no JMS in this version), subtopics, etc.</li>
<li>Collaboration Dashboard</li>
</ol>
<p><span id="more-19"></span></p>
<h5>Installation Instructions</h5>
<ol>
<li>Proceed to the Test Drive Server <a href="/download/fds-tomcat.zip">download page</a></li>
<li>Expand fds-tomcat.zip
<p>NOTE: The instructions in the documentation assume that you expand fds-tomcat in your root directory. You can expand fds-tomcat anywhere else. Just make sure you adjust the path in the samples and tutorial instructions accordingly.
</li>
<li>Open install.htm in the fds-tomcat directory for information on running the Test Drive Server.</li>
</ol>
<p>Disclaimer: The Test Drive Server is currently not an officially supported product. I’ll of course do my best to answer your questions, and your feedback is very much appreciated. It is intended to allow Java Developers to quickly evaluate or/and get started with Flex in a Java environment.</p>
<p>ERRATA: On page 4 in the tutorial PDF: “On the Java Settings page, specify fdms-tomcat/classes as the Default output folder, and click Finish”. The name of the folder is incorrect: it should read: Specify “fds-tomcat/classes” as the Default output folder (The screen shot is correct).</p>
<h5>More Info</h5>
<p>The Flex Test Drive Server includes the following products, frameworks, and libraries (All these products are configured to work together “out-of-the-box” when you install the Test Drive Server) :</p>
<ul>
<li><a href="http://tomcat.apache.org/">Tomcat</a> 5.5.20</li>
<li><a href="http://www.adobe.com/products/flex/dataservices/">Flex Data Services</a> (FDS 2.0.1)</li>
<li><a href="http://jotm.objectweb.org/">JOTM</a> (JTA implementation)
<p>The Flex Data Management Services leverage the Java Transaction API (JTA). Because<br />
      Tomcat doesn&rsquo;t provide a JTA implementation, the Test Drive Server includes JOTM (an open source implementation of the Java Transaction API).  You don&#8217;t need JOTM if your application server implements the full Java EE stack.</p>
</li>
<li><a href="http://www.activemq.org">ActiveMQ</a> (JMS implementation)
<p>The Flex Data Services integrate with JMS (see integration examples in the Test Drive Server). Because Tomcat doesn&#8217;t provide a JMS implementation, we use ActiveMQ (an open-source JMS provider) as part of this Test Drive Server. You don&#8217;t need ActiveMQ if your application server implements the full Java EE stack, or if your application doesn&#8217;t use JMS.</p>
</li>
<li><a href="http://www.springframework.org/">Spring</a> 2
<p>Flex integrates with the Spring framework through the Flex SpringFactory (see integration examples in the Test Drive Server). Spring 2 is part of the Flex Test Drive Server to demonstrate this Flex/Spring integration.</p>
</li>
<li><a href="http://www.hibernate.org/">Hibernate</a> 3.2
<p>Flex integrates with the Hibernate through the Flex HibernateAssembler(see integration examples in the Test Drive Server). Hibernate is part of the Flex Test Drive Server to demonstrate this Flex/Hibernate integration.</p>
</li>
<li><a href="http://hsqldb.org/">HSQLDB</a> 1.8
<p>To allow you to run the tutorial &ldquo;out-of-the-box&rdquo; without setting up a database, the Test Drive server<br />
      includes an HSQLDB database. HSQLDB is a lightweight Java RDBMS that is particularly well<br />
      suited to run samples. hsqldb.jar (in [tomcat_root]\webapps\ROOT\WEB-INF\lib) includes both<br />
      the RDBMS engine and the JDBC driver. The HSQLDB database server is automatically started as part of the Tomcat startup process.</p>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://coenraets.org/blog/2007/01/flex-test-drive-server-for-java-developers-tomcat-based/feed/</wfw:commentRss>
		<slash:comments>156</slash:comments>
		</item>
	</channel>
</rss>
