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:56:51 UTC
[3/3] cayenne git commit: CAY-2065 Update ROP tutorial docs
CAY-2065 Update ROP tutorial docs
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/a0e324fc
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/a0e324fc
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/a0e324fc
Branch: refs/heads/master
Commit: a0e324fcc5df0c5ec4d2ddf05741e8a3b795ff24
Parents: 812b1d8
Author: Dzmitry Kazimirchyk <dk...@gmail.com>
Authored: Tue Mar 1 19:54:01 2016 +0300
Committer: Dzmitry Kazimirchyk <dk...@gmail.com>
Committed: Tue Mar 1 19:54:01 2016 +0300
----------------------------------------------------------------------
.../src/docbkx/authentication.xml | 63 ++++++++++----------
.../src/docbkx/client-code.xml | 30 +++++-----
.../src/docbkx/client-project.xml | 6 +-
.../src/docbkx/web-service.xml | 6 +-
4 files changed, 50 insertions(+), 55 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/a0e324fc/docs/docbook/getting-started-rop/src/docbkx/authentication.xml
----------------------------------------------------------------------
diff --git a/docs/docbook/getting-started-rop/src/docbkx/authentication.xml b/docs/docbook/getting-started-rop/src/docbkx/authentication.xml
index 04e251f..0872044 100644
--- a/docs/docbook/getting-started-rop/src/docbkx/authentication.xml
+++ b/docs/docbook/getting-started-rop/src/docbkx/authentication.xml
@@ -88,41 +88,38 @@
<section xml:id="running-client">
<title>Running Client with Basic Authentication</title>
<para>If you run the client without any changes, you'll get the following error:</para>
- <programlisting language="java">org.apache.cayenne.remote.hessian.HessianConnection connect
-INFO: Connecting to [http://localhost:8080/tutorial/cayenne-service] - dedicated session.
-org.apache.cayenne.remote.hessian.HessianConnection connect
-INFO: Error establishing remote session. URL - http://localhost:8080/tutorial/cayenne-service;
- 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:1257)
- at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379)
- at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:168)
- at $Proxy0.establishSession(Unknown Source)
- at org.apache.cayenne.remote.hessian.HessianConnection.connect(HessianConnection.java:210)
- at org.apache.cayenne.remote.hessian.HessianConnection.getServerEventBridge(HessianConnection.java:114)
- at org.apache.cayenne.remote.ClientChannel.setupRemoteChannelListener(ClientChannel.java:337)
- at org.apache.cayenne.remote.ClientChannel.<init>(ClientChannel.java:108)
- at org.example.cayenne.Main.main(Main.java:25)
-Exception in thread "main" org.apache.cayenne.CayenneRuntimeException: [v.3.1M3 Sep 19 2011 07:12:41]
-Error establishing remote session. URL - http://localhost:8080/tutorial/cayenne-service;
-CAUSE - cannot retry due to server authentication, in streaming mode
- at org.apache.cayenne.remote.hessian.HessianConnection.connect(HessianConnection.java:229)
- at org.apache.cayenne.remote.hessian.HessianConnection.getServerEventBridge(HessianConnection.java:114)
- at org.apache.cayenne.remote.ClientChannel.setupRemoteChannelListener(ClientChannel.java:337)
- at org.apache.cayenne.remote.ClientChannel.<init>(ClientChannel.java:108)
- at org.example.cayenne.Main.main(Main.java:25)
-Caused by: java.net.HttpRetryException: cannot retry due to server authentication, in streaming mode
- at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1257)
- at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379)
- at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:168)
- at $Proxy0.establishSession(Unknown Source)
- at org.apache.cayenne.remote.hessian.HessianConnection.connect(HessianConnection.java:210)
- ... 4 more</programlisting>
+ <programlisting language="java">Mar 01, 2016 7:25:50 PM org.apache.cayenne.rop.http.HttpROPConnector logConnect
+INFO: Connecting to [cayenne-user@http://localhost:8080/tutorial-rop-server/cayenne-service] - dedicated session.
+Mar 01, 2016 7:25:50 PM org.apache.cayenne.rop.HttpClientConnection connect
+INFO: Server returned HTTP response code: 401 for URL: http://localhost:8080/tutorial-rop-server/cayenne-service
+java.rmi.RemoteException: Server returned HTTP response code: 401 for URL: http://localhost:8080/tutorial-rop-server/cayenne-service
+ at org.apache.cayenne.rop.ProxyRemoteService.establishSession(ProxyRemoteService.java:45)
+ at org.apache.cayenne.rop.HttpClientConnection.connect(HttpClientConnection.java:85)
+ at org.apache.cayenne.rop.HttpClientConnection.getServerEventBridge(HttpClientConnection.java:68)
+ at org.apache.cayenne.remote.ClientChannel.setupRemoteChannelListener(ClientChannel.java:279)
+ at org.apache.cayenne.remote.ClientChannel.<init>(ClientChannel.java:71)
+ at org.apache.cayenne.configuration.rop.client.ClientChannelProvider.get(ClientChannelProvider.java:48)
+ at org.apache.cayenne.configuration.rop.client.ClientChannelProvider.get(ClientChannelProvider.java:31)
+ at org.apache.cayenne.di.spi.CustomProvidersProvider.get(CustomProvidersProvider.java:39)
+ at org.apache.cayenne.di.spi.FieldInjectingProvider.get(FieldInjectingProvider.java:43)
+ at org.apache.cayenne.di.spi.DefaultScopeProvider.get(DefaultScopeProvider.java:50)
+ at org.apache.cayenne.di.spi.DefaultInjector.getInstance(DefaultInjector.java:139)
+ at org.apache.cayenne.di.spi.FieldInjectingProvider.value(FieldInjectingProvider.java:105)
+ at org.apache.cayenne.di.spi.FieldInjectingProvider.injectMember(FieldInjectingProvider.java:68)
+ at org.apache.cayenne.di.spi.FieldInjectingProvider.injectMembers(FieldInjectingProvider.java:59)
+ at org.apache.cayenne.di.spi.FieldInjectingProvider.get(FieldInjectingProvider.java:44)
+ at org.apache.cayenne.di.spi.DefaultScopeProvider.get(DefaultScopeProvider.java:50)
+ at org.apache.cayenne.di.spi.DefaultInjector.getInstance(DefaultInjector.java:134)
+ at org.apache.cayenne.configuration.CayenneRuntime.newContext(CayenneRuntime.java:134)
+ at org.apache.cayenne.tutorial.persistent.client.Main.main(Main.java:44)</programlisting>
<para>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:</para>
- <programlisting language="java">ClientConnection connection = new HessianConnection(
- "http://localhost:8080/tutorial/cayenne-service",
- "cayenne-user", "secret", null);</programlisting>
+ <programlisting language="java">Map<String,String> properties = new HashMap<>();
+properties.put(Constants.ROP_SERVICE_URL_PROPERTY, "http://localhost:8080/tutorial-rop-server/cayenne-service");
+properties.put(Constants.ROP_SERVICE_USERNAME_PROPERTY, "cayenne-user");
+properties.put(Constants.ROP_SERVICE_PASSWORD_PROPERTY, "secret");
+
+ClientRuntime runtime = new ClientRuntime(properties);</programlisting>
<para>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.</para>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/a0e324fc/docs/docbook/getting-started-rop/src/docbkx/client-code.xml
----------------------------------------------------------------------
diff --git a/docs/docbook/getting-started-rop/src/docbkx/client-code.xml b/docs/docbook/getting-started-rop/src/docbkx/client-code.xml
index ee8a3b6..6dc3902 100644
--- a/docs/docbook/getting-started-rop/src/docbkx/client-code.xml
+++ b/docs/docbook/getting-started-rop/src/docbkx/client-code.xml
@@ -36,10 +36,14 @@ public class Main {
}</programlisting>
<para>Now the part that is actually different from regular Cayenne - establishing the server
connection and obtaining the ObjectContext:</para>
- <programlisting language="java">ClientConnection connection = new HessianConnection("http://localhost:8080/tutorial/cayenne-service");
-DataChannel channel = new ClientChannel(connection, false, new DefaultEventManager(), false);
-ObjectContext context = new CayenneContext(channel);</programlisting>
- <para>Note that the "channel" can be used to create as many peer ObjectContexts as needed
+ <programlisting language="java">Map<String, String> properties = new HashMap<>();
+properties.put(Constants.ROP_SERVICE_URL_PROPERTY, "http://localhost:8080/tutorial-rop-server/cayenne-service");
+properties.put(Constants.ROP_SERVICE_USERNAME_PROPERTY, "cayenne-user");
+properties.put(Constants.ROP_SERVICE_PASSWORD_PROPERTY, "secret");
+
+ClientRuntime runtime = new ClientRuntime(properties);
+ObjectContext context = runtime.newContext(); </programlisting>
+ <para>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
@@ -70,20 +74,14 @@ stein.setGallery(metropolitan);
// saving all the changes above
context.commitChanges();</programlisting>
<para>Now let's select them back:</para>
- <programlisting language="java">// SelectQuery examples
-SelectQuery select1 = new SelectQuery(Painting.class);
-List<Painting> paintings1 = context.performQuery(select1);
+ <programlisting language="java">// ObjectSelect examples
+List<Painting> paintings1 = ObjectSelect.query(Painting.class).select(context);
-Expression qualifier2 = ExpressionFactory.likeIgnoreCaseExp(
- Painting.NAME_PROPERTY, "gi%");
-SelectQuery select2 = new SelectQuery(Painting.class, qualifier2);
-List<Painting> paintings2 = context.performQuery(select2);</programlisting>
+List<Painting> paintings2 = ObjectSelect.query(Painting.class)
+ .where(Painting.NAME.likeIgnoreCase("gi%")).select(context); </programlisting>
<para>Now, delete:</para>
- <programlisting language="java">Expression qualifier = ExpressionFactory.matchExp(Artist.NAME_PROPERTY,
- "Pablo Picasso");
-SelectQuery selectToDelete = new SelectQuery(Artist.class, qualifier);
-Artist picasso = (Artist) DataObjectUtils.objectForQuery(context,
- selectToDelete);
+ <programlisting language="java">// Delete object example
+Artist picasso = ObjectSelect.query(Artist.class).where(Artist.NAME.eq("Pablo Picasso")).selectOne(context);
if (picasso != null) {
context.deleteObject(picasso);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/a0e324fc/docs/docbook/getting-started-rop/src/docbkx/client-project.xml
----------------------------------------------------------------------
diff --git a/docs/docbook/getting-started-rop/src/docbkx/client-project.xml b/docs/docbook/getting-started-rop/src/docbkx/client-project.xml
index c5ead4b..9269675 100644
--- a/docs/docbook/getting-started-rop/src/docbkx/client-project.xml
+++ b/docs/docbook/getting-started-rop/src/docbkx/client-project.xml
@@ -96,12 +96,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>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/a0e324fc/docs/docbook/getting-started-rop/src/docbkx/web-service.xml
----------------------------------------------------------------------
diff --git a/docs/docbook/getting-started-rop/src/docbkx/web-service.xml b/docs/docbook/getting-started-rop/src/docbkx/web-service.xml
index 9532a04..ad60d44 100644
--- a/docs/docbook/getting-started-rop/src/docbkx/web-service.xml
+++ b/docs/docbook/getting-started-rop/src/docbkx/web-service.xml
@@ -29,8 +29,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>
@@ -83,7 +83,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>