<!--
  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=iso-8859-1" />
<link href="main.css" rel="stylesheet" type="text/css" />
</head>
<body>
<p>In addition to the RPC services, the LiveCycle Data Services ES Data Management Service feature provides an innovative and highly  
productive approach to synchronizing data across tiers and between clients. The Data Management Service feature consists of a 
client-side API and server-side service. </p>
<p>On the client side, managed objects keep track of changes made to the data, and notify the backend of these changes. To implement
this sample, simply:</p>

<ul>
  <li>Define a DataService pointing to the "product2" destination defined in data-management-config.xml.</li>
  <li>Invoke the DataService's <code>fill()</code> method to populate the products array.</li>
  <li>Bind the DataGrid to the products array.</li>
</ul>

<p>You don't have to keep track of changes made to the data, nor do you have to invoke remote services to notify the backend of the 
changes (create, update, delete) made on the client side. </p>
<p>On the server side, the Data Management Service receives the list of changes and passes it to your server-side persistence 
components. The Data Management Service also pushes the changes to other clients. In this example, the product2 destination configured 
in the data-management-config.xml file uses the java-dao adapter, which indicates that custom Java classes handle the persistence code 
(another option is to use the SQL or Hibernate adapter). There is no specific contract imposed on the Java class that provides 
the persistence implementation. You map methods such as fill and sync to actual methods in an assembler class (in this case, 
ProductAssembler). In the assembler class, you typically delegate the actual persistence implementation to existing persistence classes 
or a DAO layer, such as shown in this example.</p>

<p>A list of links to the server side files used in this sample are listed below for further reference. </p>
<table>
<tr><td><a href="http://tourdeflex.adobe.com/remotesamples/DataAccess/server-source-code/flex/samples/product2/ProductAssembler.java.txt">ProductAssembler.java</a></td></tr>
<tr><td><a href="http://tourdeflex.adobe.com/remotesamples/DataAccess/server-source-code/flex/samples/product2/Product.java.txt">Product.java</a></td></tr>
<tr><td><a href="http://tourdeflex.adobe.com/remotesamples/DataAccess/server-source-code/flex/samples/product2/ProductDAO.java.txt">ProductDAO.java</a></td></tr>
<tr><td><a href="http://tourdeflex.adobe.com/remotesamples/DataAccess/server-source-code/flex/samples/product2/BaseDAO.java.txt">BaseDAO.java</a></td></tr>
<tr><td><a href="http://tourdeflex.adobe.com/remotesamples/DataAccess/server-source-code/flex/samples/product2/ConcurrencyException.java.txt">ConcurrencyException.java</a></td></tr>

</table>

</body>
</html>