From 320feceacb4d473e30ed14b2366e4c33ee6580ac Mon Sep 17 00:00:00 2001 From: Arseni Bulatski Date: Thu, 5 Sep 2019 11:53:47 +0300 Subject: [PATCH] Add cayenne-java-modules example --- cayenne-java-modules/.gitignore | 15 +++ cayenne-java-modules/README.md | 22 ++++ cayenne-java-modules/pom.xml | 81 +++++++++++++ .../src/main/java/module-info.java | 5 + .../java/org/apache/cayenne/example/Main.java | 34 ++++++ .../cayenne/example/persistent/Artist.java | 9 ++ .../cayenne/example/persistent/Painting.java | 9 ++ .../example/persistent/auto/_Artist.java | 110 ++++++++++++++++++ .../example/persistent/auto/_Painting.java | 104 +++++++++++++++++ .../src/main/resources/cayenne-project.xml | 18 +++ .../src/main/resources/datamap.map.xml | 30 +++++ 11 files changed, 437 insertions(+) create mode 100644 cayenne-java-modules/.gitignore create mode 100644 cayenne-java-modules/README.md create mode 100644 cayenne-java-modules/pom.xml create mode 100644 cayenne-java-modules/src/main/java/module-info.java create mode 100644 cayenne-java-modules/src/main/java/org/apache/cayenne/example/Main.java create mode 100644 cayenne-java-modules/src/main/java/org/apache/cayenne/example/persistent/Artist.java create mode 100644 cayenne-java-modules/src/main/java/org/apache/cayenne/example/persistent/Painting.java create mode 100644 cayenne-java-modules/src/main/java/org/apache/cayenne/example/persistent/auto/_Artist.java create mode 100644 cayenne-java-modules/src/main/java/org/apache/cayenne/example/persistent/auto/_Painting.java create mode 100644 cayenne-java-modules/src/main/resources/cayenne-project.xml create mode 100644 cayenne-java-modules/src/main/resources/datamap.map.xml diff --git a/cayenne-java-modules/.gitignore b/cayenne-java-modules/.gitignore new file mode 100644 index 0000000..bb172de --- /dev/null +++ b/cayenne-java-modules/.gitignore @@ -0,0 +1,15 @@ +target +out +.classpath +.project +.settings/ +.externalToolBuilders +.DS_Store +derby.log +.metadata +bin/ +.idea +*.iml +.factorypath +build +.gradle \ No newline at end of file diff --git a/cayenne-java-modules/README.md b/cayenne-java-modules/README.md new file mode 100644 index 0000000..d9bdfde --- /dev/null +++ b/cayenne-java-modules/README.md @@ -0,0 +1,22 @@ +Apache Cayenne example with java modules +============= + +Example shows how to use Apache Cayenne in application with java modules. + +- Clone: +```bash +git clone https://github.com/apache/cayenne-examples +cd cayenne-java-modules +``` + +- Run instance of mysql database and change url, username and password in cayenne-project.xml. + +- Build: +```bash +mvn clean install +``` + +- Run: +```bash +java --module-path target/cayenne-java-modules-1.0-SNAPSHOT.jar:target/lib/cayenne-server-4.1.B2.jar:target/lib/cayenne-di-4.1.B2.jar:target/lib/slf4j-api-1.7.25.jar:target/lib/mysql-connector-java-8.0.17.jar:target/lib/protobuf-java-3.6.1.jar:target/lib/slf4j-simple-1.7.25.jar --module cayenne.java.module/org.apache.cayenne.example.Main +``` \ No newline at end of file diff --git a/cayenne-java-modules/pom.xml b/cayenne-java-modules/pom.xml new file mode 100644 index 0000000..421f286 --- /dev/null +++ b/cayenne-java-modules/pom.xml @@ -0,0 +1,81 @@ + + + 4.0.0 + + jar + + org.apache.cayenne.example + cayenne-java-modules + 1.0-SNAPSHOT + + + 4.1.B2 + + + + + org.apache.cayenne + cayenne-server + ${cayenne.version} + + + org.slf4j + slf4j-simple + 1.7.25 + + + mysql + mysql-connector-java + 8.0.17 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 11 + 11 + + + + org.apache.maven.plugins + maven-dependency-plugin + + + copy-dependencies + prepare-package + + copy-dependencies + + + ${project.build.directory}/lib + false + false + true + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.1.0 + + + + org.apache.cayenne.example.Main + + + + + + + + diff --git a/cayenne-java-modules/src/main/java/module-info.java b/cayenne-java-modules/src/main/java/module-info.java new file mode 100644 index 0000000..f063342 --- /dev/null +++ b/cayenne-java-modules/src/main/java/module-info.java @@ -0,0 +1,5 @@ +module cayenne.java.module { + requires java.sql; + requires cayenne.server; + exports org.apache.cayenne.example.persistent; +} \ No newline at end of file diff --git a/cayenne-java-modules/src/main/java/org/apache/cayenne/example/Main.java b/cayenne-java-modules/src/main/java/org/apache/cayenne/example/Main.java new file mode 100644 index 0000000..5a8a7cd --- /dev/null +++ b/cayenne-java-modules/src/main/java/org/apache/cayenne/example/Main.java @@ -0,0 +1,34 @@ +package org.apache.cayenne.example; + +import java.util.List; + +import org.apache.cayenne.example.persistent.Artist; +import org.apache.cayenne.example.persistent.Painting; +import org.apache.cayenne.ObjectContext; +import org.apache.cayenne.configuration.server.ServerRuntime; +import org.apache.cayenne.query.ObjectSelect; + +public class Main { + public static void main(String[] args) { + ServerRuntime cayenneRuntime = ServerRuntime.builder() + .addConfig("cayenne-project.xml") + .build(); + ObjectContext context = cayenneRuntime.newContext(); + Artist artist = context.newObject(Artist.class); + artist.setArtistName("Pablo Picasso"); + + Painting painting = context.newObject(Painting.class); + painting.setPaintingTitle("Girl Reading at a Table"); + + artist.addToPaintings(painting); + + context.commitChanges(); + + List artists = ObjectSelect.query(Artist.class) + .prefetch(Artist.PAINTINGS.disjoint()) + .select(context); + + System.out.println(artists.get(0).getArtistName()); + System.out.println(artists.get(0).getPaintings().get(0).getPaintingTitle()); + } +} diff --git a/cayenne-java-modules/src/main/java/org/apache/cayenne/example/persistent/Artist.java b/cayenne-java-modules/src/main/java/org/apache/cayenne/example/persistent/Artist.java new file mode 100644 index 0000000..900b2c5 --- /dev/null +++ b/cayenne-java-modules/src/main/java/org/apache/cayenne/example/persistent/Artist.java @@ -0,0 +1,9 @@ +package org.apache.cayenne.example.persistent; + +import org.apache.cayenne.example.persistent.auto._Artist; + +public class Artist extends _Artist { + + private static final long serialVersionUID = 1L; + +} diff --git a/cayenne-java-modules/src/main/java/org/apache/cayenne/example/persistent/Painting.java b/cayenne-java-modules/src/main/java/org/apache/cayenne/example/persistent/Painting.java new file mode 100644 index 0000000..0cc90de --- /dev/null +++ b/cayenne-java-modules/src/main/java/org/apache/cayenne/example/persistent/Painting.java @@ -0,0 +1,9 @@ +package org.apache.cayenne.example.persistent; + +import org.apache.cayenne.example.persistent.auto._Painting; + +public class Painting extends _Painting { + + private static final long serialVersionUID = 1L; + +} diff --git a/cayenne-java-modules/src/main/java/org/apache/cayenne/example/persistent/auto/_Artist.java b/cayenne-java-modules/src/main/java/org/apache/cayenne/example/persistent/auto/_Artist.java new file mode 100644 index 0000000..20648ab --- /dev/null +++ b/cayenne-java-modules/src/main/java/org/apache/cayenne/example/persistent/auto/_Artist.java @@ -0,0 +1,110 @@ +package org.apache.cayenne.example.persistent.auto; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.List; + +import org.apache.cayenne.BaseDataObject; +import org.apache.cayenne.example.persistent.Painting; +import org.apache.cayenne.exp.Property; + +/** + * Class _Artist was generated by Cayenne. + * It is probably a good idea to avoid changing this class manually, + * 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 BaseDataObject { + + private static final long serialVersionUID = 1L; + + public static final String ID_PK_COLUMN = "ID"; + + public static final Property ARTIST_NAME = Property.create("artistName", String.class); + public static final Property> PAINTINGS = Property.create("paintings", List.class); + + protected String artistName; + + protected Object paintings; + + public void setArtistName(String artistName) { + beforePropertyWrite("artistName", this.artistName, artistName); + this.artistName = artistName; + } + + public String getArtistName() { + beforePropertyRead("artistName"); + return this.artistName; + } + + public void addToPaintings(Painting obj) { + addToManyTarget("paintings", obj, true); + } + + public void removeFromPaintings(Painting obj) { + removeToManyTarget("paintings", obj, true); + } + + @SuppressWarnings("unchecked") + public List getPaintings() { + return (List)readProperty("paintings"); + } + + @Override + public Object readPropertyDirectly(String propName) { + if(propName == null) { + throw new IllegalArgumentException(); + } + + switch(propName) { + case "artistName": + return this.artistName; + 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 "artistName": + this.artistName = (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.artistName); + out.writeObject(this.paintings); + } + + @Override + protected void readState(ObjectInputStream in) throws IOException, ClassNotFoundException { + super.readState(in); + this.artistName = (String)in.readObject(); + this.paintings = in.readObject(); + } + +} diff --git a/cayenne-java-modules/src/main/java/org/apache/cayenne/example/persistent/auto/_Painting.java b/cayenne-java-modules/src/main/java/org/apache/cayenne/example/persistent/auto/_Painting.java new file mode 100644 index 0000000..c3961d0 --- /dev/null +++ b/cayenne-java-modules/src/main/java/org/apache/cayenne/example/persistent/auto/_Painting.java @@ -0,0 +1,104 @@ +package org.apache.cayenne.example.persistent.auto; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; + +import org.apache.cayenne.BaseDataObject; +import org.apache.cayenne.example.persistent.Artist; +import org.apache.cayenne.exp.Property; + +/** + * Class _Painting was generated by Cayenne. + * It is probably a good idea to avoid changing this class manually, + * 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 BaseDataObject { + + private static final long serialVersionUID = 1L; + + public static final String ID_PK_COLUMN = "ID"; + + public static final Property PAINTING_TITLE = Property.create("paintingTitle", String.class); + public static final Property TO_ARTIST = Property.create("toArtist", Artist.class); + + protected String paintingTitle; + + protected Object toArtist; + + public void setPaintingTitle(String paintingTitle) { + beforePropertyWrite("paintingTitle", this.paintingTitle, paintingTitle); + this.paintingTitle = paintingTitle; + } + + public String getPaintingTitle() { + beforePropertyRead("paintingTitle"); + return this.paintingTitle; + } + + public void setToArtist(Artist toArtist) { + setToOneTarget("toArtist", toArtist, true); + } + + public Artist getToArtist() { + return (Artist)readProperty("toArtist"); + } + + @Override + public Object readPropertyDirectly(String propName) { + if(propName == null) { + throw new IllegalArgumentException(); + } + + switch(propName) { + case "paintingTitle": + return this.paintingTitle; + case "toArtist": + return this.toArtist; + default: + return super.readPropertyDirectly(propName); + } + } + + @Override + public void writePropertyDirectly(String propName, Object val) { + if(propName == null) { + throw new IllegalArgumentException(); + } + + switch (propName) { + case "paintingTitle": + this.paintingTitle = (String)val; + break; + case "toArtist": + this.toArtist = 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.paintingTitle); + out.writeObject(this.toArtist); + } + + @Override + protected void readState(ObjectInputStream in) throws IOException, ClassNotFoundException { + super.readState(in); + this.paintingTitle = (String)in.readObject(); + this.toArtist = in.readObject(); + } + +} diff --git a/cayenne-java-modules/src/main/resources/cayenne-project.xml b/cayenne-java-modules/src/main/resources/cayenne-project.xml new file mode 100644 index 0000000..ff1373b --- /dev/null +++ b/cayenne-java-modules/src/main/resources/cayenne-project.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + diff --git a/cayenne-java-modules/src/main/resources/datamap.map.xml b/cayenne-java-modules/src/main/resources/datamap.map.xml new file mode 100644 index 0000000..c869081 --- /dev/null +++ b/cayenne-java-modules/src/main/resources/datamap.map.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +