You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2018/01/12 14:31:10 UTC
cayenne git commit: Update tutorial for 4.1 features
Repository: cayenne
Updated Branches:
refs/heads/master a52592cde -> 8d79f4594
Update tutorial for 4.1 features
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/8d79f459
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/8d79f459
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/8d79f459
Branch: refs/heads/master
Commit: 8d79f4594a916415d1776d2011b2636712fa4ae2
Parents: a52592c
Author: Nikita Timofeev <st...@gmail.com>
Authored: Fri Jan 12 17:31:04 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Fri Jan 12 17:31:04 2018 +0300
----------------------------------------------------------------------
.../_getting-started-guide/java-classes.adoc | 12 +--
.../asciidoc/_getting-started-guide/setup.adoc | 2 +-
.../asciidoc/images/idea-generated-classes.png | Bin 207620 -> 189767 bytes
.../tutorial/persistent/auto/_Artist.java | 90 +++++++++++++++++--
.../tutorial/persistent/auto/_Gallery.java | 75 +++++++++++++++-
.../tutorial/persistent/auto/_Painting.java | 83 +++++++++++++++--
.../src/main/resources/cayenne-project.xml | 9 +-
.../tutorial/src/main/resources/datamap.map.xml | 10 +--
8 files changed, 248 insertions(+), 33 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8d79f459/docs/asciidoc/getting-started-guide/src/docs/asciidoc/_getting-started-guide/java-classes.adoc
----------------------------------------------------------------------
diff --git a/docs/asciidoc/getting-started-guide/src/docs/asciidoc/_getting-started-guide/java-classes.adoc b/docs/asciidoc/getting-started-guide/src/docs/asciidoc/_getting-started-guide/java-classes.adoc
index 456c7c5..a784eed 100644
--- a/docs/asciidoc/getting-started-guide/src/docs/asciidoc/_getting-started-guide/java-classes.adoc
+++ b/docs/asciidoc/getting-started-guide/src/docs/asciidoc/_getting-started-guide/java-classes.adoc
@@ -32,7 +32,7 @@ Now go back to IDEA - you
should see pairs of classes generated for each mapped entity. You probably also see that
there's a bunch of red squiggles next to the newly generated Java classes in IDEA.
This is because our project does not include Cayenne as a Maven dependency yet. Let's
-fix it now by adding "cayenne-server" and "cayenne-java8" artifacts in the bottom of the `pom.xml` file.
+fix it now by adding "cayenne-server" artifact in the bottom of the `pom.xml` file.
Also we should tell Maven compile plugin that our project needs Java 8.
The resulting POM should look like this:
@@ -44,7 +44,9 @@ The resulting POM should look like this:
<groupId>org.example.cayenne</groupId>
<artifactId>tutorial</artifactId>
<version>0.0.1-SNAPSHOT</version>
- <cayenne.version>{project-version}</version> <!--1-->
+ <properties>
+ <cayenne.version>{project-version}</cayenne.version> <!--1-->
+ </properties>
<dependencies>
<dependency>
@@ -52,12 +54,6 @@ The resulting POM should look like this:
<artifactId>cayenne-server</artifactId>
<version>${cayenne.version}</version>
</dependency>
- <!-- For java.time.* types you need to use this dependency-->
- <dependency>
- <groupId>org.apache.cayenne</groupId>
- <artifactId>cayenne-java8</artifactId>
- <version>${cayenne.version}</version>
- </dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8d79f459/docs/asciidoc/getting-started-guide/src/docs/asciidoc/_getting-started-guide/setup.adoc
----------------------------------------------------------------------
diff --git a/docs/asciidoc/getting-started-guide/src/docs/asciidoc/_getting-started-guide/setup.adoc b/docs/asciidoc/getting-started-guide/src/docs/asciidoc/_getting-started-guide/setup.adoc
index 5a81104..cf2fe51 100644
--- a/docs/asciidoc/getting-started-guide/src/docs/asciidoc/_getting-started-guide/setup.adoc
+++ b/docs/asciidoc/getting-started-guide/src/docs/asciidoc/_getting-started-guide/setup.adoc
@@ -18,7 +18,7 @@ installed) a minimally needed set of software to build a Cayenne application.
=== Install Java
-Obviously, JDK has to be installed. Cayenne 4.0 requires JDK 1.7 or newer.
+Obviously, JDK has to be installed. Cayenne 4.1 requires JDK 1.8 or newer.
=== Install IntelliJ IDEA
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8d79f459/docs/asciidoc/getting-started-guide/src/docs/asciidoc/images/idea-generated-classes.png
----------------------------------------------------------------------
diff --git a/docs/asciidoc/getting-started-guide/src/docs/asciidoc/images/idea-generated-classes.png b/docs/asciidoc/getting-started-guide/src/docs/asciidoc/images/idea-generated-classes.png
index 504dce5..66ac6cb 100644
Binary files a/docs/asciidoc/getting-started-guide/src/docs/asciidoc/images/idea-generated-classes.png and b/docs/asciidoc/getting-started-guide/src/docs/asciidoc/images/idea-generated-classes.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8d79f459/tutorials/tutorial/src/main/java/org/apache/cayenne/tutorial/persistent/auto/_Artist.java
----------------------------------------------------------------------
diff --git a/tutorials/tutorial/src/main/java/org/apache/cayenne/tutorial/persistent/auto/_Artist.java b/tutorials/tutorial/src/main/java/org/apache/cayenne/tutorial/persistent/auto/_Artist.java
index 147f9f7..e61b543 100644
--- a/tutorials/tutorial/src/main/java/org/apache/cayenne/tutorial/persistent/auto/_Artist.java
+++ b/tutorials/tutorial/src/main/java/org/apache/cayenne/tutorial/persistent/auto/_Artist.java
@@ -1,9 +1,12 @@
package org.apache.cayenne.tutorial.persistent.auto;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
import java.time.LocalDate;
import java.util.List;
-import org.apache.cayenne.CayenneDataObject;
+import org.apache.cayenne.BaseDataObject;
import org.apache.cayenne.exp.Property;
import org.apache.cayenne.tutorial.persistent.Painting;
@@ -13,7 +16,7 @@ import org.apache.cayenne.tutorial.persistent.Painting;
* since it may be overwritten next time code is regenerated.
* If you need to make any customizations, please use subclass.
*/
-public abstract class _Artist extends CayenneDataObject {
+public abstract class _Artist extends BaseDataObject {
private static final long serialVersionUID = 1L;
@@ -23,30 +26,105 @@ public abstract class _Artist extends CayenneDataObject {
public static final Property<String> NAME = Property.create("name", String.class);
public static final Property<List<Painting>> PAINTINGS = Property.create("paintings", List.class);
+ protected LocalDate dateOfBirth;
+ protected String name;
+
+ protected Object paintings;
+
public void setDateOfBirth(LocalDate dateOfBirth) {
- writeProperty("dateOfBirth", dateOfBirth);
+ beforePropertyWrite("dateOfBirth", this.dateOfBirth, dateOfBirth);
+ this.dateOfBirth = dateOfBirth;
}
+
public LocalDate getDateOfBirth() {
- return (LocalDate)readProperty("dateOfBirth");
+ beforePropertyRead("dateOfBirth");
+ return this.dateOfBirth;
}
public void setName(String name) {
- writeProperty("name", name);
+ beforePropertyWrite("name", this.name, name);
+ this.name = name;
}
+
public String getName() {
- return (String)readProperty("name");
+ beforePropertyRead("name");
+ return this.name;
}
public void addToPaintings(Painting obj) {
addToManyTarget("paintings", obj, true);
}
+
public void removeFromPaintings(Painting obj) {
removeToManyTarget("paintings", obj, true);
}
+
@SuppressWarnings("unchecked")
public List<Painting> getPaintings() {
return (List<Painting>)readProperty("paintings");
}
+ @Override
+ public Object readPropertyDirectly(String propName) {
+ if(propName == null) {
+ throw new IllegalArgumentException();
+ }
+
+ switch(propName) {
+ case "dateOfBirth":
+ return this.dateOfBirth;
+ case "name":
+ return this.name;
+ case "paintings":
+ return this.paintings;
+ default:
+ return super.readPropertyDirectly(propName);
+ }
+ }
+
+ @Override
+ public void writePropertyDirectly(String propName, Object val) {
+ if(propName == null) {
+ throw new IllegalArgumentException();
+ }
+
+ switch (propName) {
+ case "dateOfBirth":
+ this.dateOfBirth = (LocalDate)val;
+ break;
+ case "name":
+ this.name = (String)val;
+ break;
+ case "paintings":
+ this.paintings = val;
+ break;
+ default:
+ super.writePropertyDirectly(propName, val);
+ }
+ }
+
+ private void writeObject(ObjectOutputStream out) throws IOException {
+ writeSerialized(out);
+ }
+
+ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ readSerialized(in);
+ }
+
+ @Override
+ protected void writeState(ObjectOutputStream out) throws IOException {
+ super.writeState(out);
+ out.writeObject(this.dateOfBirth);
+ out.writeObject(this.name);
+ out.writeObject(this.paintings);
+ }
+
+ @Override
+ protected void readState(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ super.readState(in);
+ this.dateOfBirth = (LocalDate)in.readObject();
+ this.name = (String)in.readObject();
+ this.paintings = in.readObject();
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8d79f459/tutorials/tutorial/src/main/java/org/apache/cayenne/tutorial/persistent/auto/_Gallery.java
----------------------------------------------------------------------
diff --git a/tutorials/tutorial/src/main/java/org/apache/cayenne/tutorial/persistent/auto/_Gallery.java b/tutorials/tutorial/src/main/java/org/apache/cayenne/tutorial/persistent/auto/_Gallery.java
index d4ed6aa..c73de7e 100644
--- a/tutorials/tutorial/src/main/java/org/apache/cayenne/tutorial/persistent/auto/_Gallery.java
+++ b/tutorials/tutorial/src/main/java/org/apache/cayenne/tutorial/persistent/auto/_Gallery.java
@@ -1,8 +1,11 @@
package org.apache.cayenne.tutorial.persistent.auto;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
import java.util.List;
-import org.apache.cayenne.CayenneDataObject;
+import org.apache.cayenne.BaseDataObject;
import org.apache.cayenne.exp.Property;
import org.apache.cayenne.tutorial.persistent.Painting;
@@ -12,7 +15,7 @@ import org.apache.cayenne.tutorial.persistent.Painting;
* since it may be overwritten next time code is regenerated.
* If you need to make any customizations, please use subclass.
*/
-public abstract class _Gallery extends CayenneDataObject {
+public abstract class _Gallery extends BaseDataObject {
private static final long serialVersionUID = 1L;
@@ -21,23 +24,87 @@ public abstract class _Gallery extends CayenneDataObject {
public static final Property<String> NAME = Property.create("name", String.class);
public static final Property<List<Painting>> PAINTINGS = Property.create("paintings", List.class);
+ protected String name;
+
+ protected Object paintings;
+
public void setName(String name) {
- writeProperty("name", name);
+ beforePropertyWrite("name", this.name, name);
+ this.name = name;
}
+
public String getName() {
- return (String)readProperty("name");
+ beforePropertyRead("name");
+ return this.name;
}
public void addToPaintings(Painting obj) {
addToManyTarget("paintings", obj, true);
}
+
public void removeFromPaintings(Painting obj) {
removeToManyTarget("paintings", obj, true);
}
+
@SuppressWarnings("unchecked")
public List<Painting> getPaintings() {
return (List<Painting>)readProperty("paintings");
}
+ @Override
+ public Object readPropertyDirectly(String propName) {
+ if(propName == null) {
+ throw new IllegalArgumentException();
+ }
+
+ switch(propName) {
+ case "name":
+ return this.name;
+ case "paintings":
+ return this.paintings;
+ default:
+ return super.readPropertyDirectly(propName);
+ }
+ }
+
+ @Override
+ public void writePropertyDirectly(String propName, Object val) {
+ if(propName == null) {
+ throw new IllegalArgumentException();
+ }
+
+ switch (propName) {
+ case "name":
+ this.name = (String)val;
+ break;
+ case "paintings":
+ this.paintings = val;
+ break;
+ default:
+ super.writePropertyDirectly(propName, val);
+ }
+ }
+
+ private void writeObject(ObjectOutputStream out) throws IOException {
+ writeSerialized(out);
+ }
+
+ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ readSerialized(in);
+ }
+
+ @Override
+ protected void writeState(ObjectOutputStream out) throws IOException {
+ super.writeState(out);
+ out.writeObject(this.name);
+ out.writeObject(this.paintings);
+ }
+
+ @Override
+ protected void readState(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ super.readState(in);
+ this.name = (String)in.readObject();
+ this.paintings = in.readObject();
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8d79f459/tutorials/tutorial/src/main/java/org/apache/cayenne/tutorial/persistent/auto/_Painting.java
----------------------------------------------------------------------
diff --git a/tutorials/tutorial/src/main/java/org/apache/cayenne/tutorial/persistent/auto/_Painting.java b/tutorials/tutorial/src/main/java/org/apache/cayenne/tutorial/persistent/auto/_Painting.java
index 0c39d79..a75e249 100644
--- a/tutorials/tutorial/src/main/java/org/apache/cayenne/tutorial/persistent/auto/_Painting.java
+++ b/tutorials/tutorial/src/main/java/org/apache/cayenne/tutorial/persistent/auto/_Painting.java
@@ -1,6 +1,10 @@
package org.apache.cayenne.tutorial.persistent.auto;
-import org.apache.cayenne.CayenneDataObject;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+import org.apache.cayenne.BaseDataObject;
import org.apache.cayenne.exp.Property;
import org.apache.cayenne.tutorial.persistent.Artist;
import org.apache.cayenne.tutorial.persistent.Gallery;
@@ -11,7 +15,7 @@ import org.apache.cayenne.tutorial.persistent.Gallery;
* since it may be overwritten next time code is regenerated.
* If you need to make any customizations, please use subclass.
*/
-public abstract class _Painting extends CayenneDataObject {
+public abstract class _Painting extends BaseDataObject {
private static final long serialVersionUID = 1L;
@@ -21,11 +25,19 @@ public abstract class _Painting extends CayenneDataObject {
public static final Property<Artist> ARTIST = Property.create("artist", Artist.class);
public static final Property<Gallery> GALLERY = Property.create("gallery", Gallery.class);
+ protected String name;
+
+ protected Object artist;
+ protected Object gallery;
+
public void setName(String name) {
- writeProperty("name", name);
+ beforePropertyWrite("name", this.name, name);
+ this.name = name;
}
+
public String getName() {
- return (String)readProperty("name");
+ beforePropertyRead("name");
+ return this.name;
}
public void setArtist(Artist artist) {
@@ -36,7 +48,6 @@ public abstract class _Painting extends CayenneDataObject {
return (Artist)readProperty("artist");
}
-
public void setGallery(Gallery gallery) {
setToOneTarget("gallery", gallery, true);
}
@@ -45,5 +56,67 @@ public abstract class _Painting extends CayenneDataObject {
return (Gallery)readProperty("gallery");
}
+ @Override
+ public Object readPropertyDirectly(String propName) {
+ if(propName == null) {
+ throw new IllegalArgumentException();
+ }
+
+ switch(propName) {
+ case "name":
+ return this.name;
+ case "artist":
+ return this.artist;
+ case "gallery":
+ return this.gallery;
+ default:
+ return super.readPropertyDirectly(propName);
+ }
+ }
+
+ @Override
+ public void writePropertyDirectly(String propName, Object val) {
+ if(propName == null) {
+ throw new IllegalArgumentException();
+ }
+
+ switch (propName) {
+ case "name":
+ this.name = (String)val;
+ break;
+ case "artist":
+ this.artist = val;
+ break;
+ case "gallery":
+ this.gallery = val;
+ break;
+ default:
+ super.writePropertyDirectly(propName, val);
+ }
+ }
+
+ private void writeObject(ObjectOutputStream out) throws IOException {
+ writeSerialized(out);
+ }
+
+ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ readSerialized(in);
+ }
+
+ @Override
+ protected void writeState(ObjectOutputStream out) throws IOException {
+ super.writeState(out);
+ out.writeObject(this.name);
+ out.writeObject(this.artist);
+ out.writeObject(this.gallery);
+ }
+
+ @Override
+ protected void readState(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ super.readState(in);
+ this.name = (String)in.readObject();
+ this.artist = in.readObject();
+ this.gallery = in.readObject();
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8d79f459/tutorials/tutorial/src/main/resources/cayenne-project.xml
----------------------------------------------------------------------
diff --git a/tutorials/tutorial/src/main/resources/cayenne-project.xml b/tutorials/tutorial/src/main/resources/cayenne-project.xml
index 1c7f367..27b1c1b 100644
--- a/tutorials/tutorial/src/main/resources/cayenne-project.xml
+++ b/tutorials/tutorial/src/main/resources/cayenne-project.xml
@@ -1,11 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
-<domain project-version="9">
+<domain xmlns="http://cayenne.apache.org/schema/10/domain"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/10/domain http://cayenne.apache.org/schema/10/domain.xsd"
+ project-version="10">
<map name="datamap"/>
-
<node name="datanode"
factory="org.apache.cayenne.configuration.server.XMLPoolingDataSourceFactory"
- schema-update-strategy="org.apache.cayenne.access.dbsync.CreateIfNoSchemaStrategy"
- >
+ schema-update-strategy="org.apache.cayenne.access.dbsync.CreateIfNoSchemaStrategy">
<map-ref name="datamap"/>
<data-source>
<driver value="org.apache.derby.jdbc.EmbeddedDriver"/>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8d79f459/tutorials/tutorial/src/main/resources/datamap.map.xml
----------------------------------------------------------------------
diff --git a/tutorials/tutorial/src/main/resources/datamap.map.xml b/tutorials/tutorial/src/main/resources/datamap.map.xml
index d7a4ff0..b2c2e5f 100644
--- a/tutorials/tutorial/src/main/resources/datamap.map.xml
+++ b/tutorials/tutorial/src/main/resources/datamap.map.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
-<data-map xmlns="http://cayenne.apache.org/schema/9/modelMap"
+<data-map xmlns="http://cayenne.apache.org/schema/10/modelMap"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://cayenne.apache.org/schema/9/modelMap http://cayenne.apache.org/schema/9/modelMap.xsd"
- project-version="9">
+ xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap http://cayenne.apache.org/schema/10/modelMap.xsd"
+ project-version="10">
<property name="defaultPackage" value="org.apache.cayenne.tutorial.persistent"/>
<db-entity name="ARTIST">
<db-attribute name="DATE_OF_BIRTH" type="DATE"/>
@@ -35,10 +35,10 @@
<db-relationship name="paintings" source="GALLERY" target="PAINTING" toMany="true">
<db-attribute-pair source="ID" target="GALLERY_ID"/>
</db-relationship>
- <db-relationship name="artist" source="PAINTING" target="ARTIST" toMany="false">
+ <db-relationship name="artist" source="PAINTING" target="ARTIST">
<db-attribute-pair source="ARTIST_ID" target="ID"/>
</db-relationship>
- <db-relationship name="gallery" source="PAINTING" target="GALLERY" toMany="false">
+ <db-relationship name="gallery" source="PAINTING" target="GALLERY">
<db-attribute-pair source="GALLERY_ID" target="ID"/>
</db-relationship>
<obj-relationship name="paintings" source="Artist" target="Painting" deleteRule="Cascade" db-relationship-path="paintings"/>