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:49 UTC
[1/3] cayenne git commit: CAY-2065 Change Hessian dependency scope in
ROP tutorials from provided to compile to avoid ClassNotFoundException when
running them
Repository: cayenne
Updated Branches:
refs/heads/master c2e5d6deb -> a0e324fcc
CAY-2065 Change Hessian dependency scope in ROP tutorials from provided to compile to avoid ClassNotFoundException when running them
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/10c07901
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/10c07901
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/10c07901
Branch: refs/heads/master
Commit: 10c07901573cccb1922256dc916ae54e5cac4443
Parents: c2e5d6d
Author: Dzmitry Kazimirchyk <dk...@gmail.com>
Authored: Tue Mar 1 18:48:38 2016 +0300
Committer: Dzmitry Kazimirchyk <dk...@gmail.com>
Committed: Tue Mar 1 19:18:07 2016 +0300
----------------------------------------------------------------------
tutorials/tutorial-rop-client/pom.xml | 1 +
tutorials/tutorial-rop-server/pom.xml | 2 ++
2 files changed, 3 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/10c07901/tutorials/tutorial-rop-client/pom.xml
----------------------------------------------------------------------
diff --git a/tutorials/tutorial-rop-client/pom.xml b/tutorials/tutorial-rop-client/pom.xml
index ecb6ba9..37f8a33 100644
--- a/tutorials/tutorial-rop-client/pom.xml
+++ b/tutorials/tutorial-rop-client/pom.xml
@@ -33,6 +33,7 @@
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
+ <scope>compile</scope>
</dependency>
</dependencies>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/10c07901/tutorials/tutorial-rop-server/pom.xml
----------------------------------------------------------------------
diff --git a/tutorials/tutorial-rop-server/pom.xml b/tutorials/tutorial-rop-server/pom.xml
index ecc7b75..96a6286 100644
--- a/tutorials/tutorial-rop-server/pom.xml
+++ b/tutorials/tutorial-rop-server/pom.xml
@@ -34,10 +34,12 @@
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
+ <scope>compile</scope>
</dependency>
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
+ <scope>compile</scope>
</dependency>
</dependencies>
[2/3] cayenne git commit: CAY-2065 Update ROP client tutorial code to
use modern ObjectSelect instead of unparameterized SelectQuery
Posted by dk...@apache.org.
CAY-2065 Update ROP client tutorial code to use modern ObjectSelect instead of unparameterized SelectQuery
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/812b1d83
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/812b1d83
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/812b1d83
Branch: refs/heads/master
Commit: 812b1d837c152654a9d1715e95b624abcc758b45
Parents: 10c0790
Author: Dzmitry Kazimirchyk <dk...@gmail.com>
Authored: Tue Mar 1 19:22:35 2016 +0300
Committer: Dzmitry Kazimirchyk <dk...@gmail.com>
Committed: Tue Mar 1 19:22:35 2016 +0300
----------------------------------------------------------------------
.../cayenne/tutorial/persistent/client/Main.java | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/812b1d83/tutorials/tutorial-rop-client/src/main/java/org/apache/cayenne/tutorial/persistent/client/Main.java
----------------------------------------------------------------------
diff --git a/tutorials/tutorial-rop-client/src/main/java/org/apache/cayenne/tutorial/persistent/client/Main.java b/tutorials/tutorial-rop-client/src/main/java/org/apache/cayenne/tutorial/persistent/client/Main.java
index 3997b06..edfd4a8 100644
--- a/tutorials/tutorial-rop-client/src/main/java/org/apache/cayenne/tutorial/persistent/client/Main.java
+++ b/tutorials/tutorial-rop-client/src/main/java/org/apache/cayenne/tutorial/persistent/client/Main.java
@@ -27,6 +27,7 @@ import org.apache.cayenne.ObjectContext;
import org.apache.cayenne.configuration.Constants;
import org.apache.cayenne.configuration.rop.client.ClientRuntime;
import org.apache.cayenne.exp.Expression;
+import org.apache.cayenne.query.ObjectSelect;
import org.apache.cayenne.query.SelectQuery;
public class Main {
@@ -75,20 +76,16 @@ public class Main {
}
static void selectTutorial(ObjectContext context) {
- // SelectQuery examples
- SelectQuery<Painting> select1 = SelectQuery.query(Painting.class);
- List<Painting> paintings1 = context.select(select1);
+ // ObjectSelect examples
+ List<Painting> paintings1 = ObjectSelect.query(Painting.class).select(context);
- Expression qualifier2 = Painting.NAME.likeIgnoreCase("gi%");
- SelectQuery<Painting> select2 = SelectQuery.query(Painting.class, qualifier2);
- List<Painting> paintings2 = context.select(select2);
+ List<Painting> paintings2 = ObjectSelect.query(Painting.class)
+ .where(Painting.NAME.likeIgnoreCase("gi%")).select(context);
}
static void deleteTutorial(ObjectContext context) {
- // Delete object examples
- Expression qualifier = Artist.NAME.eq("Pablo Picasso");
- SelectQuery<Artist> selectToDelete = SelectQuery.query(Artist.class, qualifier);
- Artist picasso = (Artist) Cayenne.objectForQuery(context, selectToDelete);
+ // Delete object example
+ Artist picasso = ObjectSelect.query(Artist.class).where(Artist.NAME.eq("Pablo Picasso")).selectOne(context);
if (picasso != null) {
context.deleteObjects(picasso);
[3/3] cayenne git commit: CAY-2065 Update ROP tutorial docs
Posted by dk...@apache.org.
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>