blob: fa0e5e950958b07eac94a82d3496a65e768ed522 [file] [log] [blame]
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title xmlns:d="http://docbook.org/ns/docbook">Chapter&nbsp;13.&nbsp;Introduction to ROP</title><link rel="stylesheet" type="text/css" href="css/cayenne-doc.css"><meta xmlns:d="http://docbook.org/ns/docbook" name="keywords" content="Cayenne 4.0 documentation"><meta xmlns:d="http://docbook.org/ns/docbook" name="description" content="User documentation for Apache Cayenne version 4.0"><link rel="home" href="index.html" title="Cayenne Guide"><link rel="up" href="cayenne-guide-part3.html" title="Part&nbsp;III.&nbsp;Cayenne Framework - Remote Object Persistence"><link rel="prev" href="cayenne-guide-part3.html" title="Part&nbsp;III.&nbsp;Cayenne Framework - Remote Object Persistence"><link rel="next" href="rop-setup.html" title="Chapter&nbsp;14.&nbsp;ROP Setup"><script xmlns:d="http://docbook.org/ns/docbook" type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-7036673-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div xmlns:d="http://docbook.org/ns/docbook" class="navheader"><table width="100%" summary="Navigation header"><tr><th class="versioninfo">v.4.0 (4.0.M5)</th><th align="center">Chapter&nbsp;13.&nbsp;Introduction to ROP</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="cayenne-guide-part3.html">Prev</a>&nbsp;</td><th width="60%" align="center"><a accesskey="u" href="cayenne-guide-part3.html">Part&nbsp;III.&nbsp;Cayenne Framework - Remote Object Persistence </a></th><td width="20%" align="right">&nbsp;<a accesskey="n" href="rop-setup.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="introduction-to-rop"></a>Chapter&nbsp;13.&nbsp;Introduction to ROP</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="introduction-to-rop.html#what-is-rop">What is ROP</a></span></dt><dt><span class="section"><a href="introduction-to-rop.html#main-features">Main Features</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="what-is-rop"></a>What is ROP</h2></div></div></div><p>"Remote Object Persistence" is a low-overhead web services-based technology that
provides lightweight object persistence and query functionality to 'remote'
applications. In other words it provides familiar Cayenne API to applications that do
not have direct access to the database. Instead such applications would access Cayenne
Web Service (CWS). A single abstract data model (expressed as Cayenne XML DataMap) is
used on the server and on the client, while execution logic can be partitioned between
the tiers.The following picture compares a regular Cayenne web application and a rich
client application that uses remote object persistence technology:</p><p><span class="inlinemediaobject"><img src="images/remote-object-persistence.jpg"></span></p><p>Persistence stack above consists of the following parts:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>ORM Tier: a server-side Cayenne Java application that directly connects to
the database via JDBC.</p></li><li class="listitem"><p>CWS (Cayenne Web Service): A wrapper around an ORM tier that makes it
accessible to remote CWS clients.</p></li><li class="listitem"><p>Remote Tier (aka Client Tier): A Java application that has no direct DB
connection and persists its objects by connecting to remote Cayenne Web
Service (CWS). Note that CWS Client doesn't have to be a desktop
application. It can be another server-side application. The word "client"
means a client of Cayenne Web Service.</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="main-features"></a>Main Features</h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Unified approach to lightweight object persistence across multiple
tiers of a distributed system.</p></li><li class="listitem"><p>Same abstract object model on the server and on the client.</p></li><li class="listitem"><p>Client can "bootstrap" from the server by dynamically loading
persistence metadata.</p></li><li class="listitem"><p>An ability to define client objects differently than the server ones,
and still have seamless persistence.</p></li><li class="listitem"><p>Generic web service interface that doesn't change when object model
changes.</p></li><li class="listitem"><p>An ability to work in two modes: dedicated session mode or shared
("chat") mode when multiple remote clients collaboratively work on the
same data.</p></li><li class="listitem"><p>Lazy object and collection faulting.</p></li><li class="listitem"><p>Full context lifecycle</p></li><li class="listitem"><p>Queries, expressions, local query caching, paginated queries.</p></li><li class="listitem"><p>Validation</p></li><li class="listitem"><p>Delete Rules</p></li></ul></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="cayenne-guide-part3.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="cayenne-guide-part3.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="rop-setup.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part&nbsp;III.&nbsp;Cayenne Framework - Remote Object Persistence &nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;14.&nbsp;ROP Setup</td></tr></table></div></body></html>