You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by dk...@apache.org on 2016/03/01 17:59:17 UTC
svn commit: r1733104 - in
/cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop: ch01.html ch02.html
ch03.html ch04.html ch05.html getting-started-rop-part1.html
getting-started-rop-part2.html index.html
Author: dkazimirchyk
Date: Tue Mar 1 16:59:17 2016
New Revision: 1733104
URL: http://svn.apache.org/viewvc?rev=1733104&view=rev
Log:
Update ROP tutorial docs.
Modified:
cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch01.html
cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch02.html
cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch03.html
cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch04.html
cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch05.html
cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/getting-started-rop-part1.html
cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/getting-started-rop-part2.html
cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/index.html
Modified: cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch01.html
URL: http://svn.apache.org/viewvc/cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch01.html?rev=1733104&r1=1733103&r2=1733104&view=diff
==============================================================================
--- cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch01.html (original)
+++ cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch01.html Tue Mar 1 16:59:17 2016
@@ -9,7 +9,7 @@
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.M3-SNAPSHOT)</th><th align="center">Chapter 1. Prerequisites</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="getting-started-rop-part1.html">Prev</a> </td><th width="60%" align="center"><a accesskey="u" href="getting-started-rop-part1.html">Part I. Prerequisites</a></th><td width="20%" align="right"> <a accesskey="n" href="getting-started-rop-part2.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 1. Prerequisites"><div class="titlepage"><div><div><h2 class="title"><a name="d0e23"></a>Chapter 1. Prerequisites</h2></div></div></div><p>This tutorial starts where "Getting Started with Cayenne" left
+ </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.M4-SNAPSHOT)</th><th align="center">Chapter 1. Prerequisites</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="getting-started-rop-part1.html">Prev</a> </td><th width="60%" align="center"><a accesskey="u" href="getting-started-rop-part1.html">Part I. Prerequisites</a></th><td width="20%" align="right"> <a accesskey="n" href="getting-started-rop-part2.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 1. Prerequisites"><div class="titlepage"><div><div><h2 class="title"><a name="d0e23"></a>Chapter 1. Prerequisites</h2></div></div></div><p>This tutorial starts where "Getting Started with Cayenne" left
off. If you have gone through the previous tutorial, and have the "tutorial" project open in
Eclipse, you can go directly to the
next step. If not, here are the compressed instructions to prepare you for work
Modified: cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch02.html
URL: http://svn.apache.org/viewvc/cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch02.html?rev=1733104&r1=1733103&r2=1733104&view=diff
==============================================================================
--- cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch02.html (original)
+++ cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch02.html Tue Mar 1 16:59:17 2016
@@ -9,7 +9,7 @@
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.M3-SNAPSHOT)</th><th align="center">Chapter 2. Starting Client Project</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="getting-started-rop-part2.html">Prev</a> </td><th width="60%" align="center"><a accesskey="u" href="getting-started-rop-part2.html">Part II. Remote Object Persistence Quick Start</a></th><td width="20%" align="right"> <a accesskey="n" href="ch03.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 2. Starting Client Project"><div class="titlepage"><div><div><h2 class="title"><a name="d0e51"></a>Chapter 2. Starting Client Project</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span clas
s="section"><a href="ch02.html#create-rop-client-project">Create an ROP Client Project in Eclipse</a></span></dt><dt><span class="section"><a href="ch02.html#create-client-java-classes">Create Client Java Classes</a></span></dt></dl></div><div class="section" title="Create an ROP Client Project in Eclipse"><div class="titlepage"><div><div><h2 class="title"><a name="create-rop-client-project"></a>Create an ROP Client Project in Eclipse</h2></div></div></div><p>Creation of a new Eclipse project has been discussed in some details in "Getting
+ </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.M4-SNAPSHOT)</th><th align="center">Chapter 2. Starting Client Project</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="getting-started-rop-part2.html">Prev</a> </td><th width="60%" align="center"><a accesskey="u" href="getting-started-rop-part2.html">Part II. Remote Object Persistence Quick Start</a></th><td width="20%" align="right"> <a accesskey="n" href="ch03.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 2. Starting Client Project"><div class="titlepage"><div><div><h2 class="title"><a name="d0e51"></a>Chapter 2. Starting Client Project</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span clas
s="section"><a href="ch02.html#create-rop-client-project">Create an ROP Client Project in Eclipse</a></span></dt><dt><span class="section"><a href="ch02.html#create-client-java-classes">Create Client Java Classes</a></span></dt></dl></div><div class="section" title="Create an ROP Client Project in Eclipse"><div class="titlepage"><div><div><h2 class="title"><a name="create-rop-client-project"></a>Create an ROP Client Project in Eclipse</h2></div></div></div><p>Creation of a new Eclipse project has been discussed in some details in "Getting
Started with Cayenne" guide, so we will omit the screenshots for the common
parts.</p><p>In Eclipse select "File > New > Other..." and then "Maven > Maven Project".
Click "Next". On the following screen check "Create a simple project" checkbox and click
@@ -45,12 +45,12 @@
<groupId>org.apache.cayenne</groupId>
<artifactId>cayenne-client</artifactId>
<!-- Here specify the version of Cayenne you are actually using -->
- <version>3.1M3</version>
+ <version>4.0.M3</version>
</dependency>
<dependency>
<groupId>com.caucho</groupId>
- <artifactId>resin-hessian</artifactId>
- <version>3.1.6</version>
+ <artifactId>hessian</artifactId>
+ <version>4.0.38</version>
</dependency>
</dependencies>
Modified: cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch03.html
URL: http://svn.apache.org/viewvc/cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch03.html?rev=1733104&r1=1733103&r2=1733104&view=diff
==============================================================================
--- cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch03.html (original)
+++ cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch03.html Tue Mar 1 16:59:17 2016
@@ -9,7 +9,7 @@
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.M3-SNAPSHOT)</th><th align="center">Chapter 3. Setting up Hessian Web Service</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02.html">Prev</a> </td><th width="60%" align="center"><a accesskey="u" href="getting-started-rop-part2.html">Part II. Remote Object Persistence Quick Start</a></th><td width="20%" align="right"> <a accesskey="n" href="ch04.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 3. Setting up Hessian Web Service"><div class="titlepage"><div><div><h2 class="title"><a name="d0e110"></a>Chapter 3. Setting up Hessian Web Service</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span cla
ss="section"><a href="ch03.html#setting-up-dependencies">Setting up Dependencies</a></span></dt><dt><span class="section"><a href="ch03.html#client-classes-on-server">Client Classes on the Server</a></span></dt><dt><span class="section"><a href="ch03.html#configuring-web-xml">Configuring web.xml</a></span></dt><dt><span class="section"><a href="ch03.html#running-rop-server">Running ROP Server</a></span></dt></dl></div><div class="section" title="Setting up Dependencies"><div class="titlepage"><div><div><h2 class="title"><a name="setting-up-dependencies"></a>Setting up Dependencies</h2></div></div></div><p>Now lets get back to the "tutorial" project that contains a web application and set up
+ </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.M4-SNAPSHOT)</th><th align="center">Chapter 3. Setting up Hessian Web Service</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02.html">Prev</a> </td><th width="60%" align="center"><a accesskey="u" href="getting-started-rop-part2.html">Part II. Remote Object Persistence Quick Start</a></th><td width="20%" align="right"> <a accesskey="n" href="ch04.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 3. Setting up Hessian Web Service"><div class="titlepage"><div><div><h2 class="title"><a name="d0e110"></a>Chapter 3. Setting up Hessian Web Service</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span cla
ss="section"><a href="ch03.html#setting-up-dependencies">Setting up Dependencies</a></span></dt><dt><span class="section"><a href="ch03.html#client-classes-on-server">Client Classes on the Server</a></span></dt><dt><span class="section"><a href="ch03.html#configuring-web-xml">Configuring web.xml</a></span></dt><dt><span class="section"><a href="ch03.html#running-rop-server">Running ROP Server</a></span></dt></dl></div><div class="section" title="Setting up Dependencies"><div class="titlepage"><div><div><h2 class="title"><a name="setting-up-dependencies"></a>Setting up Dependencies</h2></div></div></div><p>Now lets get back to the "tutorial" project that contains a web application and set up
dependencies. The only extra one that we don't have yet is resin-hessian.jar, just like
the client, so let's add it (and the caucho repo declaration) to the pom.xml.</p><pre class="programlisting"><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
@@ -18,8 +18,8 @@
...
<dependency>
<groupId>com.caucho</groupId>
- <artifactId>resin-hessian</artifactId>
- <version>3.1.6</version>
+ <artifactId>hessian</artifactId>
+ <version>4.0.38</version>
</dependency>
</dependencies>
@@ -58,7 +58,7 @@
<display-name>Cayenne Tutorial</display-name>
<servlet>
<servlet-name>cayenne-project</servlet-name>
- <servlet-class>org.apache.cayenne.configuration.rop.server.ROPHessianServlet</servlet-class>
+ <servlet-class>org.apache.cayenne.rop.ROPServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
Modified: cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch04.html
URL: http://svn.apache.org/viewvc/cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch04.html?rev=1733104&r1=1733103&r2=1733104&view=diff
==============================================================================
--- cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch04.html (original)
+++ cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch04.html Tue Mar 1 16:59:17 2016
@@ -9,7 +9,7 @@
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.M3-SNAPSHOT)</th><th align="center">Chapter 4. Porting Existing Code to Connect to a Web Service Instead of a Database</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03.html">Prev</a> </td><th width="60%" align="center"><a accesskey="u" href="getting-started-rop-part2.html">Part II. Remote Object Persistence Quick Start</a></th><td width="20%" align="right"> <a accesskey="n" href="ch05.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 4. Porting Existing Code to Connect to a Web Service Instead of a Database"><div class="titlepage"><div><div><h2 class="title"><a name="d0e157"></a>Chapter 4. Porting Existing Code to Connect to
a Web Service Instead of a Database</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="ch04.html#starting-command-line-cliet">Starting Command Line Client</a></span></dt></dl></div><div class="section" title="Starting Command Line Client"><div class="titlepage"><div><div><h2 class="title"><a name="starting-command-line-cliet"></a>Starting Command Line Client</h2></div></div></div><p>One of the benefits of ROP is that the client code is no different from the server
+ </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.M4-SNAPSHOT)</th><th align="center">Chapter 4. Porting Existing Code to Connect to a Web Service Instead of a Database</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03.html">Prev</a> </td><th width="60%" align="center"><a accesskey="u" href="getting-started-rop-part2.html">Part II. Remote Object Persistence Quick Start</a></th><td width="20%" align="right"> <a accesskey="n" href="ch05.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 4. Porting Existing Code to Connect to a Web Service Instead of a Database"><div class="titlepage"><div><div><h2 class="title"><a name="d0e157"></a>Chapter 4. Porting Existing Code to Connect to
a Web Service Instead of a Database</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="ch04.html#starting-command-line-cliet">Starting Command Line Client</a></span></dt></dl></div><div class="section" title="Starting Command Line Client"><div class="titlepage"><div><div><h2 class="title"><a name="starting-command-line-cliet"></a>Starting Command Line Client</h2></div></div></div><p>One of the benefits of ROP is that the client code is no different from the server
code - it uses the same ObjectContext interface for access, same query and commit API.
So the code below will be similar to the code presented in the first Cayenne
Getting Started Guide, although with a few ROP-specific parts required to bootstrap the
@@ -22,9 +22,13 @@
}
}</pre><p>Now the part that is actually different from regular Cayenne - establishing the server
- connection and obtaining the ObjectContext:</p><pre class="programlisting">ClientConnection connection = <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span> HessianConnection(<span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"http://localhost:8080/tutorial/cayenne-service"</span>);
-DataChannel channel = <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span> ClientChannel(connection, false, <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span> DefaultEventManager(), false);
-ObjectContext context = <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span> CayenneContext(channel);</pre><p>Note that the "channel" can be used to create as many peer ObjectContexts as needed
+ connection and obtaining the ObjectContext:</p><pre class="programlisting">Map<String, String> properties = <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span> HashMap<>();
+properties.put(Constants.ROP_SERVICE_URL_PROPERTY, <span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"http://localhost:8080/tutorial-rop-server/cayenne-service"</span>);
+properties.put(Constants.ROP_SERVICE_USERNAME_PROPERTY, <span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"cayenne-user"</span>);
+properties.put(Constants.ROP_SERVICE_PASSWORD_PROPERTY, <span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"secret"</span>);
+
+ClientRuntime runtime = <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span> ClientRuntime(properties);
+ObjectContext context = runtime.newContext(); </pre><p>Note that the "runtime" can be used to create as many peer ObjectContexts as needed
over the same connection, while ObjectContext is a kind of isolated "persistence
session", similar to the server-side context. A few more notes. Since we are using
HTTP(S) to communicate with ROP server, there's no need to explicitly close the
@@ -51,18 +55,12 @@ girl.setGallery(metropolitan);
stein.setGallery(metropolitan);
<span xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">// saving all the changes above</span>
-context.commitChanges();</pre><p>Now let's select them back:</p><pre class="programlisting"><span xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">// SelectQuery examples</span>
-SelectQuery select1 = <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span> SelectQuery(Painting.<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span>);
-List<Painting> paintings1 = context.performQuery(select1);
-
-Expression qualifier2 = ExpressionFactory.likeIgnoreCaseExp(
- Painting.NAME_PROPERTY, <span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"gi%"</span>);
-SelectQuery select2 = <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span> SelectQuery(Painting.<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span>, qualifier2);
-List<Painting> paintings2 = context.performQuery(select2);</pre><p>Now, delete:</p><pre class="programlisting">Expression qualifier = ExpressionFactory.matchExp(Artist.NAME_PROPERTY,
- <span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"Pablo Picasso"</span>);
-SelectQuery selectToDelete = <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span> SelectQuery(Artist.<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span>, qualifier);
-Artist picasso = (Artist) DataObjectUtils.objectForQuery(context,
- selectToDelete);
+context.commitChanges();</pre><p>Now let's select them back:</p><pre class="programlisting"><span xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">// ObjectSelect examples</span>
+List<Painting> paintings1 = ObjectSelect.query(Painting.<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span>).select(context);
+
+List<Painting> paintings2 = ObjectSelect.query(Painting.<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span>)
+ .where(Painting.NAME.likeIgnoreCase(<span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"gi%"</span>)).select(context); </pre><p>Now, delete:</p><pre class="programlisting"><span xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">// Delete object example</span>
+Artist picasso = ObjectSelect.query(Artist.<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span>).where(Artist.NAME.eq(<span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"Pablo Picasso"</span>)).selectOne(context);
<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">if</span> (picasso != null) {
context.deleteObject(picasso);
Modified: cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch05.html
URL: http://svn.apache.org/viewvc/cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch05.html?rev=1733104&r1=1733103&r2=1733104&view=diff
==============================================================================
--- cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch05.html (original)
+++ cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/ch05.html Tue Mar 1 16:59:17 2016
@@ -9,7 +9,7 @@
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.M3-SNAPSHOT)</th><th align="center">Chapter 5. Adding BASIC Authentication</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04.html">Prev</a> </td><th width="60%" align="center"><a accesskey="u" href="getting-started-rop-part2.html">Part II. Remote Object Persistence Quick Start</a></th><td width="20%" align="right"> </td></tr></table><hr></div><div class="chapter" title="Chapter 5. Adding BASIC Authentication"><div class="titlepage"><div><div><h2 class="title"><a name="d0e198"></a>Chapter 5. Adding BASIC Authentication</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="ch05.html#securing-rop-server
-app">Securing ROP Server Application</a></span></dt><dt><span class="section"><a href="ch05.html#configuring-jetty">Configuring Jetty for BASIC Authentication</a></span></dt><dt><span class="section"><a href="ch05.html#running-client">Running Client with Basic Authentication</a></span></dt></dl></div><p>You probably don't want everybody in the world to connect to your service and access (and
+ </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.M4-SNAPSHOT)</th><th align="center">Chapter 5. Adding BASIC Authentication</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04.html">Prev</a> </td><th width="60%" align="center"><a accesskey="u" href="getting-started-rop-part2.html">Part II. Remote Object Persistence Quick Start</a></th><td width="20%" align="right"> </td></tr></table><hr></div><div class="chapter" title="Chapter 5. Adding BASIC Authentication"><div class="titlepage"><div><div><h2 class="title"><a name="d0e198"></a>Chapter 5. Adding BASIC Authentication</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="ch05.html#securing-rop-server
-app">Securing ROP Server Application</a></span></dt><dt><span class="section"><a href="ch05.html#configuring-jetty">Configuring Jetty for BASIC Authentication</a></span></dt><dt><span class="section"><a href="ch05.html#running-client">Running Client with Basic Authentication</a></span></dt></dl></div><p>You probably don't want everybody in the world to connect to your service and access (and
update!) arbitrary data in the database. The first step in securing Cayenne service is
implementing client authentication. The easiest way to do it is to delegate the
authentication task to the web container that is running the service. HessianConnection used
@@ -57,38 +57,35 @@
if you go to <span class="italic">http://localhost:8080/tutorial/cayenne-service</span>, your browser should pop
up authentication dialog. Enter "<span class="italic">cayenne-user/secret</span>"
for user name / password, and you should see "<span class="italic">Hessian Requires
- POST</span>" message. So the server is now secured.</p></div><div class="section" title="Running Client with Basic Authentication"><div class="titlepage"><div><div><h2 class="title"><a name="running-client"></a>Running Client with Basic Authentication</h2></div></div></div><p>If you run the client without any changes, you'll get the following error:</p><pre class="programlisting">org.apache.cayenne.remote.hessian.HessianConnection connect
-INFO: Connecting to [http:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">//localhost:8080/tutorial/cayenne-service] - dedicated session.</span>
-org.apache.cayenne.remote.hessian.HessianConnection connect
-INFO: Error establishing remote session. URL - http:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">//localhost:8080/tutorial/cayenne-service; </span>
- CAUSE - cannot retry due to server authentication, in streaming mode
-java.net.HttpRetryException: cannot retry due to server authentication, in streaming mode
- at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">1257</span>)
- at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">379</span>)
- at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">168</span>)
- at $Proxy0.establishSession(Unknown Source)
- at org.apache.cayenne.remote.hessian.HessianConnection.connect(HessianConnection.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">210</span>)
- at org.apache.cayenne.remote.hessian.HessianConnection.getServerEventBridge(HessianConnection.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">114</span>)
- at org.apache.cayenne.remote.ClientChannel.setupRemoteChannelListener(ClientChannel.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">337</span>)
- at org.apache.cayenne.remote.ClientChannel.<init>(ClientChannel.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">108</span>)
- at org.example.cayenne.Main.main(Main.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">25</span>)
-Exception in thread <span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"main"</span> org.apache.cayenne.CayenneRuntimeException: [v.3.1M3 Sep <span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">19</span> <span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">2011</span> <span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">07</span>:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">12</span>:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">41</span>]
-Error establishing remote session. URL - http:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">//localhost:8080/tutorial/cayenne-service; </span>
-CAUSE - cannot retry due to server authentication, in streaming mode
- at org.apache.cayenne.remote.hessian.HessianConnection.connect(HessianConnection.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">229</span>)
- at org.apache.cayenne.remote.hessian.HessianConnection.getServerEventBridge(HessianConnection.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">114</span>)
- at org.apache.cayenne.remote.ClientChannel.setupRemoteChannelListener(ClientChannel.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">337</span>)
- at org.apache.cayenne.remote.ClientChannel.<init>(ClientChannel.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">108</span>)
- at org.example.cayenne.Main.main(Main.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">25</span>)
-Caused by: java.net.HttpRetryException: cannot retry due to server authentication, in streaming mode
- at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">1257</span>)
- at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">379</span>)
- at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">168</span>)
- at $Proxy0.establishSession(Unknown Source)
- at org.apache.cayenne.remote.hessian.HessianConnection.connect(HessianConnection.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">210</span>)
- ... <span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">4</span> more</pre><p>Which is exactly what you'd expect, as the client is not authenticating itself. So
- change the line in Main.java where we obtained an ROP connection to this:</p><pre class="programlisting">ClientConnection connection = <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span> HessianConnection(
- <span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"http://localhost:8080/tutorial/cayenne-service"</span>,
- <span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"cayenne-user"</span>, <span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"secret"</span>, null);</pre><p>Try running again, and everything should work as before. Obviously in production
+ POST</span>" message. So the server is now secured.</p></div><div class="section" title="Running Client with Basic Authentication"><div class="titlepage"><div><div><h2 class="title"><a name="running-client"></a>Running Client with Basic Authentication</h2></div></div></div><p>If you run the client without any changes, you'll get the following error:</p><pre class="programlisting">Mar <span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">01</span>, <span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">2016</span> <span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">7</span>:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">25</span>:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">50</span> PM org.apache.cayenne.rop.http.HttpROPConnector logConnect
+INFO: Connecting to [cayenne-user<span xmlns="http://www.w3.org/1999/xhtml" class="hl-annotation">@http://localhost:8080/tutorial-rop-server/cayenne-service]</span> - dedicated session.
+Mar <span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">01</span>, <span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">2016</span> <span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">7</span>:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">25</span>:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">50</span> PM org.apache.cayenne.rop.HttpClientConnection connect
+INFO: Server returned HTTP response code: <span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">401</span> <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">for</span> URL: http:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">//localhost:8080/tutorial-rop-server/cayenne-service</span>
+java.rmi.RemoteException: Server returned HTTP response code: <span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">401</span> <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">for</span> URL: http:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">//localhost:8080/tutorial-rop-server/cayenne-service</span>
+ at org.apache.cayenne.rop.ProxyRemoteService.establishSession(ProxyRemoteService.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">45</span>)
+ at org.apache.cayenne.rop.HttpClientConnection.connect(HttpClientConnection.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">85</span>)
+ at org.apache.cayenne.rop.HttpClientConnection.getServerEventBridge(HttpClientConnection.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">68</span>)
+ at org.apache.cayenne.remote.ClientChannel.setupRemoteChannelListener(ClientChannel.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">279</span>)
+ at org.apache.cayenne.remote.ClientChannel.<init>(ClientChannel.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">71</span>)
+ at org.apache.cayenne.configuration.rop.client.ClientChannelProvider.get(ClientChannelProvider.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">48</span>)
+ at org.apache.cayenne.configuration.rop.client.ClientChannelProvider.get(ClientChannelProvider.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">31</span>)
+ at org.apache.cayenne.di.spi.CustomProvidersProvider.get(CustomProvidersProvider.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">39</span>)
+ at org.apache.cayenne.di.spi.FieldInjectingProvider.get(FieldInjectingProvider.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">43</span>)
+ at org.apache.cayenne.di.spi.DefaultScopeProvider.get(DefaultScopeProvider.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">50</span>)
+ at org.apache.cayenne.di.spi.DefaultInjector.getInstance(DefaultInjector.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">139</span>)
+ at org.apache.cayenne.di.spi.FieldInjectingProvider.value(FieldInjectingProvider.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">105</span>)
+ at org.apache.cayenne.di.spi.FieldInjectingProvider.injectMember(FieldInjectingProvider.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">68</span>)
+ at org.apache.cayenne.di.spi.FieldInjectingProvider.injectMembers(FieldInjectingProvider.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">59</span>)
+ at org.apache.cayenne.di.spi.FieldInjectingProvider.get(FieldInjectingProvider.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">44</span>)
+ at org.apache.cayenne.di.spi.DefaultScopeProvider.get(DefaultScopeProvider.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">50</span>)
+ at org.apache.cayenne.di.spi.DefaultInjector.getInstance(DefaultInjector.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">134</span>)
+ at org.apache.cayenne.configuration.CayenneRuntime.newContext(CayenneRuntime.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">134</span>)
+ at org.apache.cayenne.tutorial.persistent.client.Main.main(Main.java:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">44</span>)</pre><p>Which is exactly what you'd expect, as the client is not authenticating itself. So
+ change the line in Main.java where we obtained an ROP connection to this:</p><pre class="programlisting">Map<String,String> properties = <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span> HashMap<>();
+properties.put(Constants.ROP_SERVICE_URL_PROPERTY, <span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"http://localhost:8080/tutorial-rop-server/cayenne-service"</span>);
+properties.put(Constants.ROP_SERVICE_USERNAME_PROPERTY, <span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"cayenne-user"</span>);
+properties.put(Constants.ROP_SERVICE_PASSWORD_PROPERTY, <span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"secret"</span>);
+
+ClientRuntime runtime = <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span> ClientRuntime(properties);</pre><p>Try running again, and everything should work as before. Obviously in production
environment, in addition to authentication you'll need to use HTTPS to access the server
to prevent third-party evesdropping on your password and data.</p><p>Congratulations, you are done with the ROP tutorial!</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="getting-started-rop-part2.html">Up</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top">Chapter 4. Porting Existing Code to Connect to a Web Service Instead of a Database </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
\ No newline at end of file
Modified: cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/getting-started-rop-part1.html
URL: http://svn.apache.org/viewvc/cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/getting-started-rop-part1.html?rev=1733104&r1=1733103&r2=1733104&view=diff
==============================================================================
--- cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/getting-started-rop-part1.html (original)
+++ cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/getting-started-rop-part1.html Tue Mar 1 16:59:17 2016
@@ -9,4 +9,4 @@
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.M3-SNAPSHOT)</th><th align="center">Part I. Prerequisites</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch01.html">Next</a></td></tr></table><hr></div><div class="part" title="Part I. Prerequisites"><div class="titlepage"><div><div><h1 class="title"><a name="getting-started-rop-part1"></a>Part I. Prerequisites</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="ch01.html">1. Prerequisites</a></span></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation foo
ter"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ch01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Getting Started with Cayenne ROP (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 1. Prerequisites</td></tr></table></div></body></html>
\ No newline at end of file
+ </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.M4-SNAPSHOT)</th><th align="center">Part I. Prerequisites</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch01.html">Next</a></td></tr></table><hr></div><div class="part" title="Part I. Prerequisites"><div class="titlepage"><div><div><h1 class="title"><a name="getting-started-rop-part1"></a>Part I. Prerequisites</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="ch01.html">1. Prerequisites</a></span></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation foo
ter"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ch01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Getting Started with Cayenne ROP (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 1. Prerequisites</td></tr></table></div></body></html>
\ No newline at end of file
Modified: cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/getting-started-rop-part2.html
URL: http://svn.apache.org/viewvc/cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/getting-started-rop-part2.html?rev=1733104&r1=1733103&r2=1733104&view=diff
==============================================================================
--- cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/getting-started-rop-part2.html (original)
+++ cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/getting-started-rop-part2.html Tue Mar 1 16:59:17 2016
@@ -9,4 +9,4 @@
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.M3-SNAPSHOT)</th><th align="center">Part II. Remote Object Persistence Quick Start</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch01.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch02.html">Next</a></td></tr></table><hr></div><div class="part" title="Part II. Remote Object Persistence Quick Start"><div class="titlepage"><div><div><h1 class="title"><a name="getting-started-rop-part2"></a>Part II. Remote Object Persistence Quick Start</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="ch02.html">2. Starting Client Project</a></span></dt><dd
><dl><dt><span class="section"><a href="ch02.html#create-rop-client-project">Create an ROP Client Project in Eclipse</a></span></dt><dt><span class="section"><a href="ch02.html#create-client-java-classes">Create Client Java Classes</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch03.html">3. Setting up Hessian Web Service</a></span></dt><dd><dl><dt><span class="section"><a href="ch03.html#setting-up-dependencies">Setting up Dependencies</a></span></dt><dt><span class="section"><a href="ch03.html#client-classes-on-server">Client Classes on the Server</a></span></dt><dt><span class="section"><a href="ch03.html#configuring-web-xml">Configuring web.xml</a></span></dt><dt><span class="section"><a href="ch03.html#running-rop-server">Running ROP Server</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch04.html">4. Porting Existing Code to Connect to a Web Service Instead of a Database</a></span></dt><dd><dl><dt><span class="section"><a href="ch04.html#starting-comma
nd-line-cliet">Starting Command Line Client</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch05.html">5. Adding BASIC Authentication</a></span></dt><dd><dl><dt><span class="section"><a href="ch05.html#securing-rop-server-app">Securing ROP Server Application</a></span></dt><dt><span class="section"><a href="ch05.html#configuring-jetty">Configuring Jetty for BASIC Authentication</a></span></dt><dt><span class="section"><a href="ch05.html#running-client">Running Client with Basic Authentication</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch01.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ch02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 1. Prerequisites </td><td width="20%" align="center"><a accesskey="h" href="index.htm
l">Home</a></td><td width="40%" align="right" valign="top"> Chapter 2. Starting Client Project</td></tr></table></div></body></html>
\ No newline at end of file
+ </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.M4-SNAPSHOT)</th><th align="center">Part II. Remote Object Persistence Quick Start</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch01.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch02.html">Next</a></td></tr></table><hr></div><div class="part" title="Part II. Remote Object Persistence Quick Start"><div class="titlepage"><div><div><h1 class="title"><a name="getting-started-rop-part2"></a>Part II. Remote Object Persistence Quick Start</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="ch02.html">2. Starting Client Project</a></span></dt><dd
><dl><dt><span class="section"><a href="ch02.html#create-rop-client-project">Create an ROP Client Project in Eclipse</a></span></dt><dt><span class="section"><a href="ch02.html#create-client-java-classes">Create Client Java Classes</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch03.html">3. Setting up Hessian Web Service</a></span></dt><dd><dl><dt><span class="section"><a href="ch03.html#setting-up-dependencies">Setting up Dependencies</a></span></dt><dt><span class="section"><a href="ch03.html#client-classes-on-server">Client Classes on the Server</a></span></dt><dt><span class="section"><a href="ch03.html#configuring-web-xml">Configuring web.xml</a></span></dt><dt><span class="section"><a href="ch03.html#running-rop-server">Running ROP Server</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch04.html">4. Porting Existing Code to Connect to a Web Service Instead of a Database</a></span></dt><dd><dl><dt><span class="section"><a href="ch04.html#starting-comma
nd-line-cliet">Starting Command Line Client</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch05.html">5. Adding BASIC Authentication</a></span></dt><dd><dl><dt><span class="section"><a href="ch05.html#securing-rop-server-app">Securing ROP Server Application</a></span></dt><dt><span class="section"><a href="ch05.html#configuring-jetty">Configuring Jetty for BASIC Authentication</a></span></dt><dt><span class="section"><a href="ch05.html#running-client">Running Client with Basic Authentication</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch01.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ch02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 1. Prerequisites </td><td width="20%" align="center"><a accesskey="h" href="index.htm
l">Home</a></td><td width="40%" align="right" valign="top"> Chapter 2. Starting Client Project</td></tr></table></div></body></html>
\ No newline at end of file
Modified: cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/index.html
URL: http://svn.apache.org/viewvc/cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/index.html?rev=1733104&r1=1733103&r2=1733104&view=diff
==============================================================================
--- cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/index.html (original)
+++ cayenne/site/cms/trunk/content/docs/4.0/tutorial-rop/index.html Tue Mar 1 16:59:17 2016
@@ -9,7 +9,7 @@
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.M3-SNAPSHOT)</th><th align="center">Getting Started with Cayenne ROP (Remote Object Persistence)</th><th></th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="getting-started-rop-part1.html">Next</a></td></tr></table><hr></div><div class="book" title="Getting Started with Cayenne ROP (Remote Object Persistence)"><div class="titlepage"><div><div><h1 class="title"><a name="getting-started-rop"></a>Getting Started with Cayenne ROP (Remote Object Persistence)</h1></div><div><p class="copyright">Copyright © 2011-2014 Apache Software Foundation and individual authors</p></div><div><div class="legalnotice" title="License"><a name="d0e
11"></a><p class="legalnotice-title"><b>License</b></p><p>Licensed to the Apache Software Foundation (ASF) under one or more contributor
+ </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.M4-SNAPSHOT)</th><th align="center">Getting Started with Cayenne ROP (Remote Object Persistence)</th><th></th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="getting-started-rop-part1.html">Next</a></td></tr></table><hr></div><div class="book" title="Getting Started with Cayenne ROP (Remote Object Persistence)"><div class="titlepage"><div><div><h1 class="title"><a name="getting-started-rop"></a>Getting Started with Cayenne ROP (Remote Object Persistence)</h1></div><div><p class="copyright">Copyright © 2011-2014 Apache Software Foundation and individual authors</p></div><div><div class="legalnotice" title="License"><a name="d0e
11"></a><p class="legalnotice-title"><b>License</b></p><p>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