You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2006/07/04 22:28:20 UTC

svn commit: r419083 - in /incubator/cayenne/examples/trunk/cross-db-example: ./ lib/ src/ src/test/ src/test/db1/ src/test/db1/auto/ src/test/db2/ src/test/db2/auto/

Author: aadamchik
Date: Tue Jul  4 13:28:18 2006
New Revision: 419083

URL: http://svn.apache.org/viewvc?rev=419083&view=rev
Log:
checking in some examples already shown on Wiki, that are not intended for official release.

Added:
    incubator/cayenne/examples/trunk/cross-db-example/.classpath
    incubator/cayenne/examples/trunk/cross-db-example/.project
    incubator/cayenne/examples/trunk/cross-db-example/README.txt   (with props)
    incubator/cayenne/examples/trunk/cross-db-example/lib/
    incubator/cayenne/examples/trunk/cross-db-example/lib/cayenne-1.2RC2.jar   (with props)
    incubator/cayenne/examples/trunk/cross-db-example/lib/hsqldb-1.8.0.2.jar   (with props)
    incubator/cayenne/examples/trunk/cross-db-example/src/
    incubator/cayenne/examples/trunk/cross-db-example/src/cayenne.xml
    incubator/cayenne/examples/trunk/cross-db-example/src/db1.driver.xml
    incubator/cayenne/examples/trunk/cross-db-example/src/db2.driver.xml
    incubator/cayenne/examples/trunk/cross-db-example/src/map1.map.xml
    incubator/cayenne/examples/trunk/cross-db-example/src/map2.map.xml
    incubator/cayenne/examples/trunk/cross-db-example/src/test/
    incubator/cayenne/examples/trunk/cross-db-example/src/test/Main.java
    incubator/cayenne/examples/trunk/cross-db-example/src/test/db1/
    incubator/cayenne/examples/trunk/cross-db-example/src/test/db1/Department.java
    incubator/cayenne/examples/trunk/cross-db-example/src/test/db1/auto/
    incubator/cayenne/examples/trunk/cross-db-example/src/test/db1/auto/_Department.java
    incubator/cayenne/examples/trunk/cross-db-example/src/test/db2/
    incubator/cayenne/examples/trunk/cross-db-example/src/test/db2/Person.java
    incubator/cayenne/examples/trunk/cross-db-example/src/test/db2/auto/
    incubator/cayenne/examples/trunk/cross-db-example/src/test/db2/auto/_Person.java

Added: incubator/cayenne/examples/trunk/cross-db-example/.classpath
URL: http://svn.apache.org/viewvc/incubator/cayenne/examples/trunk/cross-db-example/.classpath?rev=419083&view=auto
==============================================================================
--- incubator/cayenne/examples/trunk/cross-db-example/.classpath (added)
+++ incubator/cayenne/examples/trunk/cross-db-example/.classpath Tue Jul  4 13:28:18 2006
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="lib" path="lib/hsqldb-1.8.0.2.jar"/>
+	<classpathentry kind="lib" path="lib/cayenne-1.2RC2.jar"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>

Added: incubator/cayenne/examples/trunk/cross-db-example/.project
URL: http://svn.apache.org/viewvc/incubator/cayenne/examples/trunk/cross-db-example/.project?rev=419083&view=auto
==============================================================================
--- incubator/cayenne/examples/trunk/cross-db-example/.project (added)
+++ incubator/cayenne/examples/trunk/cross-db-example/.project Tue Jul  4 13:28:18 2006
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>cross-db-example</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>

Added: incubator/cayenne/examples/trunk/cross-db-example/README.txt
URL: http://svn.apache.org/viewvc/incubator/cayenne/examples/trunk/cross-db-example/README.txt?rev=419083&view=auto
==============================================================================
--- incubator/cayenne/examples/trunk/cross-db-example/README.txt (added)
+++ incubator/cayenne/examples/trunk/cross-db-example/README.txt Tue Jul  4 13:28:18 2006
@@ -0,0 +1,17 @@
+Copyright 2005, Andrus Adamchik. 
+This example is distributed under the terms of ObjectStyle open source license.
+
+This example shows how Cayenne can be used with multiple
+databases at once, even with a relationship between tables across DBs.
+
+HOW TO RUN:
+
+This example is self-contained Eclipse project, including Cayenne 1.2RC2 jar. 
+Just import it in Eclipse (3.1 or newer is recommended) and run "test.Main" 
+class as "Java Application". As in-memory HSQLDB is used, no extra DB setup is required.
+
+MAPPING DETAILS:
+
+You can open and inspect mapping in CayenneModeler. XML files are located
+under "cross-db-example/src". Each database schema has its own DataMap, with
+relationship spanning across two DataMaps.
\ No newline at end of file

Propchange: incubator/cayenne/examples/trunk/cross-db-example/README.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/cayenne/examples/trunk/cross-db-example/lib/cayenne-1.2RC2.jar
URL: http://svn.apache.org/viewvc/incubator/cayenne/examples/trunk/cross-db-example/lib/cayenne-1.2RC2.jar?rev=419083&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/cayenne/examples/trunk/cross-db-example/lib/cayenne-1.2RC2.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/cayenne/examples/trunk/cross-db-example/lib/hsqldb-1.8.0.2.jar
URL: http://svn.apache.org/viewvc/incubator/cayenne/examples/trunk/cross-db-example/lib/hsqldb-1.8.0.2.jar?rev=419083&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/cayenne/examples/trunk/cross-db-example/lib/hsqldb-1.8.0.2.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/cayenne/examples/trunk/cross-db-example/src/cayenne.xml
URL: http://svn.apache.org/viewvc/incubator/cayenne/examples/trunk/cross-db-example/src/cayenne.xml?rev=419083&view=auto
==============================================================================
--- incubator/cayenne/examples/trunk/cross-db-example/src/cayenne.xml (added)
+++ incubator/cayenne/examples/trunk/cross-db-example/src/cayenne.xml Tue Jul  4 13:28:18 2006
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<domains project-version="1.1">
+<domain name="cross-db">
+	<map name="map1" location="map1.map.xml"/>
+	<map name="map2" location="map2.map.xml"/>
+
+	<node name="db1"
+		 datasource="db1.driver.xml"
+		 factory="org.objectstyle.cayenne.conf.DriverDataSourceFactory">
+			<map-ref name="map1"/>
+	 </node>
+	<node name="db2"
+		 datasource="db2.driver.xml"
+		 factory="org.objectstyle.cayenne.conf.DriverDataSourceFactory">
+			<map-ref name="map2"/>
+	 </node>
+</domain>
+</domains>

Added: incubator/cayenne/examples/trunk/cross-db-example/src/db1.driver.xml
URL: http://svn.apache.org/viewvc/incubator/cayenne/examples/trunk/cross-db-example/src/db1.driver.xml?rev=419083&view=auto
==============================================================================
--- incubator/cayenne/examples/trunk/cross-db-example/src/db1.driver.xml (added)
+++ incubator/cayenne/examples/trunk/cross-db-example/src/db1.driver.xml Tue Jul  4 13:28:18 2006
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<driver project-version="1.1" class="org.hsqldb.jdbcDriver">
+	<url value="jdbc:hsqldb:mem:db1"/>
+	<connectionPool min="1" max="1" />
+	<login userName="sa"/>
+</driver>

Added: incubator/cayenne/examples/trunk/cross-db-example/src/db2.driver.xml
URL: http://svn.apache.org/viewvc/incubator/cayenne/examples/trunk/cross-db-example/src/db2.driver.xml?rev=419083&view=auto
==============================================================================
--- incubator/cayenne/examples/trunk/cross-db-example/src/db2.driver.xml (added)
+++ incubator/cayenne/examples/trunk/cross-db-example/src/db2.driver.xml Tue Jul  4 13:28:18 2006
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<driver project-version="1.1" class="org.hsqldb.jdbcDriver">
+	<url value="jdbc:hsqldb:mem:db2"/>
+	<connectionPool min="1" max="1" />
+	<login userName="sa"/>
+</driver>

Added: incubator/cayenne/examples/trunk/cross-db-example/src/map1.map.xml
URL: http://svn.apache.org/viewvc/incubator/cayenne/examples/trunk/cross-db-example/src/map1.map.xml?rev=419083&view=auto
==============================================================================
--- incubator/cayenne/examples/trunk/cross-db-example/src/map1.map.xml (added)
+++ incubator/cayenne/examples/trunk/cross-db-example/src/map1.map.xml Tue Jul  4 13:28:18 2006
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<data-map project-version="1.1">
+	<property name="defaultPackage" value="test.db1"/>
+	<db-entity name="department">
+		<db-attribute name="id" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
+		<db-attribute name="name" type="VARCHAR" length="200"/>
+	</db-entity>
+	<obj-entity name="Department" className="test.db1.Department" dbEntityName="department">
+		<obj-attribute name="name" type="java.lang.String" db-attribute-path="name"/>
+	</obj-entity>
+	<db-relationship name="people" source="department" target="person" toMany="true">
+		<db-attribute-pair source="id" target="department_id"/>
+	</db-relationship>
+	<obj-relationship name="people" source="Department" target="Person" deleteRule="Nullify" db-relationship-path="people"/>
+</data-map>

Added: incubator/cayenne/examples/trunk/cross-db-example/src/map2.map.xml
URL: http://svn.apache.org/viewvc/incubator/cayenne/examples/trunk/cross-db-example/src/map2.map.xml?rev=419083&view=auto
==============================================================================
--- incubator/cayenne/examples/trunk/cross-db-example/src/map2.map.xml (added)
+++ incubator/cayenne/examples/trunk/cross-db-example/src/map2.map.xml Tue Jul  4 13:28:18 2006
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<data-map project-version="1.1">
+	<property name="defaultPackage" value="test.db2"/>
+	<db-entity name="person">
+		<db-attribute name="department_id" type="INTEGER"/>
+		<db-attribute name="full_name" type="VARCHAR" length="200"/>
+		<db-attribute name="id" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
+	</db-entity>
+	<obj-entity name="Person" className="test.db2.Person" lock-type="optimistic" dbEntityName="person">
+		<obj-attribute name="fullName" type="java.lang.String" db-attribute-path="full_name"/>
+	</obj-entity>
+	<db-relationship name="department" source="person" target="department" toMany="false">
+		<db-attribute-pair source="department_id" target="id"/>
+	</db-relationship>
+	<obj-relationship name="department" source="Person" target="Department" deleteRule="Nullify" db-relationship-path="department"/>
+</data-map>

Added: incubator/cayenne/examples/trunk/cross-db-example/src/test/Main.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/examples/trunk/cross-db-example/src/test/Main.java?rev=419083&view=auto
==============================================================================
--- incubator/cayenne/examples/trunk/cross-db-example/src/test/Main.java (added)
+++ incubator/cayenne/examples/trunk/cross-db-example/src/test/Main.java Tue Jul  4 13:28:18 2006
@@ -0,0 +1,107 @@
+package test;
+
+import java.util.Iterator;
+
+import org.objectstyle.cayenne.access.DataContext;
+import org.objectstyle.cayenne.access.DataNode;
+import org.objectstyle.cayenne.access.DbGenerator;
+import org.objectstyle.cayenne.exp.Expression;
+import org.objectstyle.cayenne.exp.ExpressionFactory;
+import org.objectstyle.cayenne.map.DataMap;
+import org.objectstyle.cayenne.query.SelectQuery;
+
+import test.db1.Department;
+import test.db2.Person;
+
+public class Main {
+
+    DataContext context;
+
+    public static void main(String[] args) {
+        Main m = new Main();
+        try {
+            m.initSchema("map1");
+            m.initSchema("map2");
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+            System.exit(1);
+        }
+
+        m.createDepartmentWithPeople();
+
+        m.invalidateAll();
+        m.readToManyRelationship();
+
+        m.invalidateAll();
+        m.readToOneRelationship();
+    }
+
+    Main() {
+        this.context = DataContext.createDataContext();
+    }
+
+    /**
+     * Helper method that initializes schema on startup. As we are using in-memory HSQLDB,
+     * we have to do it every time.
+     */
+    void initSchema(String mapName) throws Exception {
+        DataMap map = context.getEntityResolver().getDataMap(mapName);
+        DataNode node = context.getParentDataDomain().lookupDataNode(map);
+
+        // last domain parameter is needed to avoid bogus cross-db FK generation
+        DbGenerator g = new DbGenerator(node.getAdapter(), map, null, context
+                .getParentDataDomain());
+
+        g.runGenerator(node.getDataSource());
+    }
+
+    /**
+     * Helper method that invalidates all cached objects to make sure the next operation
+     * starts fresh from the database.
+     */
+    void invalidateAll() {
+        context.invalidateObjects(context.getGraphManager().registeredNodes());
+    }
+
+    void createDepartmentWithPeople() {
+        Department itDepartment = (Department) context
+                .createAndRegisterNewObject(Department.class);
+        itDepartment.setName("IT Department");
+
+        Person joe = (Person) context.createAndRegisterNewObject(Person.class);
+        joe.setFullName("Joe Doe");
+        joe.setDepartment(itDepartment);
+
+        // we can insert objects from different DBs in the same commit.
+        context.commitChanges();
+    }
+
+    void readToManyRelationship() {
+        Expression qualifier = ExpressionFactory.matchExp(
+                Department.NAME_PROPERTY,
+                "IT Department");
+        SelectQuery q = new SelectQuery(Department.class, qualifier);
+        Department itDepartment = (Department) context.performQuery(q).get(0);
+
+        // reading people will result in an internal query from a different DB:
+        Iterator it = itDepartment.getPeople().iterator();
+        while (it.hasNext()) {
+            Person p = (Person) it.next();
+            System.out.println(p.getFullName() + " works in " + itDepartment.getName());
+        }
+    }
+
+    void readToOneRelationship() {
+        Expression qualifier = ExpressionFactory.matchExp(
+                Person.FULL_NAME_PROPERTY,
+                "Joe Doe");
+        SelectQuery q = new SelectQuery(Person.class, qualifier);
+        Person joe = (Person) context.performQuery(q).get(0);
+
+        // reading department data will result in an internal query from a different DB:
+        System.out.println(joe.getFullName()
+                + " works in "
+                + joe.getDepartment().getName());
+    }
+}

Added: incubator/cayenne/examples/trunk/cross-db-example/src/test/db1/Department.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/examples/trunk/cross-db-example/src/test/db1/Department.java?rev=419083&view=auto
==============================================================================
--- incubator/cayenne/examples/trunk/cross-db-example/src/test/db1/Department.java (added)
+++ incubator/cayenne/examples/trunk/cross-db-example/src/test/db1/Department.java Tue Jul  4 13:28:18 2006
@@ -0,0 +1,10 @@
+package test.db1;
+
+import test.db1.auto._Department;
+
+public class Department extends _Department {
+
+}
+
+
+

Added: incubator/cayenne/examples/trunk/cross-db-example/src/test/db1/auto/_Department.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/examples/trunk/cross-db-example/src/test/db1/auto/_Department.java?rev=419083&view=auto
==============================================================================
--- incubator/cayenne/examples/trunk/cross-db-example/src/test/db1/auto/_Department.java (added)
+++ incubator/cayenne/examples/trunk/cross-db-example/src/test/db1/auto/_Department.java Tue Jul  4 13:28:18 2006
@@ -0,0 +1,36 @@
+package test.db1.auto;
+
+import java.util.List;
+
+/** Class _Department 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 class _Department extends org.objectstyle.cayenne.CayenneDataObject {
+
+    public static final String NAME_PROPERTY = "name";
+    public static final String PEOPLE_PROPERTY = "people";
+
+    public static final String ID_PK_COLUMN = "id";
+
+    public void setName(String name) {
+        writeProperty("name", name);
+    }
+    public String getName() {
+        return (String)readProperty("name");
+    }
+    
+    
+    public void addToPeople(test.db2.Person obj) {
+        addToManyTarget("people", obj, true);
+    }
+    public void removeFromPeople(test.db2.Person obj) {
+        removeToManyTarget("people", obj, true);
+    }
+    public List getPeople() {
+        return (List)readProperty("people");
+    }
+    
+    
+}

Added: incubator/cayenne/examples/trunk/cross-db-example/src/test/db2/Person.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/examples/trunk/cross-db-example/src/test/db2/Person.java?rev=419083&view=auto
==============================================================================
--- incubator/cayenne/examples/trunk/cross-db-example/src/test/db2/Person.java (added)
+++ incubator/cayenne/examples/trunk/cross-db-example/src/test/db2/Person.java Tue Jul  4 13:28:18 2006
@@ -0,0 +1,10 @@
+package test.db2;
+
+import test.db2.auto._Person;
+
+public class Person extends _Person {
+
+}
+
+
+

Added: incubator/cayenne/examples/trunk/cross-db-example/src/test/db2/auto/_Person.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/examples/trunk/cross-db-example/src/test/db2/auto/_Person.java?rev=419083&view=auto
==============================================================================
--- incubator/cayenne/examples/trunk/cross-db-example/src/test/db2/auto/_Person.java (added)
+++ incubator/cayenne/examples/trunk/cross-db-example/src/test/db2/auto/_Person.java Tue Jul  4 13:28:18 2006
@@ -0,0 +1,32 @@
+package test.db2.auto;
+
+/** Class _Person 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 class _Person extends org.objectstyle.cayenne.CayenneDataObject {
+
+    public static final String FULL_NAME_PROPERTY = "fullName";
+    public static final String DEPARTMENT_PROPERTY = "department";
+
+    public static final String ID_PK_COLUMN = "id";
+
+    public void setFullName(String fullName) {
+        writeProperty("fullName", fullName);
+    }
+    public String getFullName() {
+        return (String)readProperty("fullName");
+    }
+    
+    
+    public void setDepartment(test.db1.Department department) {
+        setToOneTarget("department", department, true);
+    }
+
+    public test.db1.Department getDepartment() {
+        return (test.db1.Department)readProperty("department");
+    } 
+    
+    
+}