<html><head> | |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> | |
<title xmlns:d="http://docbook.org/ns/docbook">Chapter 13. 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 III. Cayenne Framework - Remote Object Persistence"><link rel="prev" href="cayenne-guide-part3.html" title="Part III. Cayenne Framework - Remote Object Persistence"><link rel="next" href="rop-setup.html" title="Chapter 14. 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 13. Introduction to ROP</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="cayenne-guide-part3.html">Prev</a> </td><th width="60%" align="center"><a accesskey="u" href="cayenne-guide-part3.html">Part III. Cayenne Framework - Remote Object Persistence </a></th><td width="20%" align="right"> <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 13. 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> </td><td width="20%" align="center"><a accesskey="u" href="cayenne-guide-part3.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="rop-setup.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part III. Cayenne Framework - Remote Object Persistence </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 14. ROP Setup</td></tr></table></div></body></html> |