<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Online Resources</title>
<link href="http://tourdelc.adobe.com/content/Assets/main.css" rel="stylesheet" type="text/css" />
</head>

<body>
<p>
<h1>Online Resources</h1>
</p>
<img src="http://tourdelc.adobe.com/content/Assets/LCDSicon02.gif" alt="Icon"/>
<UL>
<LI>Adobe LiveCycle Data Services ES <a href="http://www.adobe.com/products/livecycle/dataservices">main product site</a>. <a href="http://www.adobe.com/products/livecycle/dataservices"></a></p>
<LI>Adobe LiveCycle Data Services ES <a href="http://www.adobe.com/support/documentation/en/livecycledataservices/">resources and documentation.</a></p>
<LI>Adobe LiveCycle Data Services ES, Adobe LiveCycle Data Services  Community Edition, and BlazeDS <a href="http://www.adobe.com/products/livecycle/dataservices/compare.html">product comparison matrix.</a></p>
</UL>
<UL>
<LI><A target="_new" HREF="http://devgirl.wordpress.com/2009/06/16/livecycle-data-services-lcds-quick-start/">Holly Schinsky's Data Services Quick Start</A>
</UL>
<HR>
<a href="#BlazeDS"><img src="http://tourdelc.adobe.com/content/Assets/blazeds_low_44x46.jpg" alt="BlazeDS Logo" width="44" height="46"/></a>
<UL>
<LI>BlazeDS open source project homepage <a href="http://opensource.adobe.com/blazeds">homepage.</a></p>
<LI>BlazeDS  <a href="http://opensource.adobe.com/wiki/display/blazeds/Developer+Documentation">installation and developer documentation.</a></p>
</UL>
<HR>
<H4>Introduction to BlazeDS and LiveCycle Data Services by Christophe Coenraets</H4>
<embed src="http://tv.adobe.com/Embed.swf" quality="high" bgcolor="#000000" width="467" height="300" 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~aHR0cDovL2Fkb2JlLmVkZ2Vib3NzLm5ldC9mbGFzaC9hZG9iZS9hZG9iZXR2Mi9tYXhfMjAwOF9kZXZlbG9wLzE1OTY3NDE2MTNfMjQ4MjMwNzAwMV9jaHJpc3RvcGhlLWNvZW5yYWV0cy1tb24tNXBtLWRldmVsb3Blci5mbHY/cnNzX2ZlZWRpZD0xNTM4NCZ4bWx2ZXJzPTI=&w=467&t=http://tv.adobe.com/?pd+LiveCycle#vi+f15384v1052&h=300"></embed>
<BR>
<BR>
Additional video content can be found at <A HREF="http://tv.adobe.com">Adobe TV</A>
</html>
